Docker是什么蔗蹋?
docker其實(shí)是一家公司名事期,其實(shí)我們常說的docker實(shí)際指的是容器。
容器就是再隔離的環(huán)境運(yùn)行的一個(gè)進(jìn)程纸颜,如果進(jìn)程停止兽泣,容器就會(huì)被銷毀。隔離的環(huán)境擁有自己的系統(tǒng)文件胁孙,ip地址唠倦,主機(jī)名等。
白話點(diǎn)講涮较,我們自己的筆記本經(jīng)常會(huì)安裝虛擬機(jī)稠鼻,才安裝應(yīng)用,中間件或數(shù)據(jù)庫(kù)等軟件狂票。這個(gè)傳統(tǒng)意義上叫虛擬化候齿,因?yàn)橐话闾摂M化出來的主機(jī)會(huì)安裝完整的操作系統(tǒng),并且會(huì)運(yùn)行我們需要運(yùn)行的程序闺属,并且是多個(gè)(web+app+DB)慌盯。
容器化,我們一般剛接觸的人員掂器,可以理解成小的虛擬化機(jī)器亚皂。你的程序在容器里面跑,同樣需要具備基礎(chǔ)環(huán)境+程序国瓮。
一般我們應(yīng)用容器化灭必,我們需要準(zhǔn)備docker的基礎(chǔ)鏡像,一般是系統(tǒng)鏡像乃摹,像常用的aplne禁漓,centos,ubuntu等,然后將我們的程序運(yùn)行上去孵睬。
邏輯上其實(shí)就跟你在linux主機(jī)上播歼,安裝你的程序一樣都需要具備,比如需要jdk肪康,gcc等荚恶。容器可以理解成小的虛擬機(jī),如果你需要web+app+DB,如果是docker容器磷支,你就需要多個(gè)容器實(shí)例(web一個(gè)谒撼,app一個(gè),db一個(gè))
上面這么說雾狈,可能讀者就糊涂了廓潜,要這么麻煩,干嘛要用容器啊。我們以前公司開發(fā)程序辩蛋,開發(fā)打包呻畸,給測(cè)試,測(cè)試安裝測(cè)試環(huán)境悼院,然后發(fā)往生產(chǎn)伤为,經(jīng)常會(huì)出現(xiàn),原來開發(fā)那据途,測(cè)試那沒有的問題绞愚,到現(xiàn)場(chǎng)就莫名其妙的錯(cuò),可能是因?yàn)槟承┮蕾嚥煌ㄓ币剑热鏹dk版本位衩,操作系統(tǒng)版本等等。使用容器你就可以避免這些問題了熔萧,除了配置文件的變更糖驴,所有的依賴都可以做成鏡像,直接發(fā)布使用即可佛致,當(dāng)然這只是其中一個(gè)有點(diǎn)贮缕。
相當(dāng)于jdk,一次構(gòu)建晌杰,隨處可用跷睦。其他我就列舉一下,讀者慢慢體會(huì)
- 靈活:即使是最復(fù)雜的應(yīng)用也可以集裝箱化肋演。
- 輕量級(jí):容器利用并共享主機(jī)內(nèi)核。
- 可互換:您可以即時(shí)部署更新和升級(jí)烂琴。
- 便攜式:您可以在本地構(gòu)建爹殊,部署到云,并在任何地方運(yùn)行奸绷。
- 可擴(kuò)展:您可以增加并自動(dòng)分發(fā)容器副本梗夸。
- 可堆疊:您可以垂直和即時(shí)堆疊服務(wù)。
安裝Docker
一般centos7以上基本都可以直接用如下命令安裝
yum install -y docker-io
也可以通過阿里云的方式安裝号醉,具體操作如下反症,也可以上阿里云網(wǎng)站查詢
由于國(guó)外的yum源有的時(shí)候訪問不了,我們一般采用阿里云鏡像源
centos鏡像源:
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# step 1: 安裝必要的一些系統(tǒng)工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安裝Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 開啟Docker服務(wù)
sudo systemctl enable docker
sudo systemctl start docker
docker的基本命令
1畔派、docker啟動(dòng)
[root@linux01 ~]# systemctl start docker
2铅碍、查看docker鏡像列表
[root@linux01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.37-oracle a17d55060104 13 days ago 404MB
bitnami/etcd latest f8cade17916c 13 days ago 152MB
prom/prometheus latest 514e6a882f6e 2 weeks ago 204MB
quay.io/coreos/etcd latest 61ad63875109 3 years ago 39.5MB
從左到右依次是鏡像名稱、鏡像標(biāo)簽线椰、鏡像ID
3胞谈、查看當(dāng)前主機(jī)運(yùn)行的docker容器
[root@linux01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6658e8093fe4 nginx "/docker-entrypoint.…" 19 seconds ago Up 18 seconds 80/tcp zealous_hellman
4、查詢可用的docker鏡像,這些鏡像是在互聯(lián)網(wǎng)上的烦绳,有的可能因?yàn)榫W(wǎng)絡(luò)問題卿捎,無法下載
[root@linux01 ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16439 [OK]
bitnami/nginx Bitnami nginx Docker Image 120 [OK]
bitnami/wordpress-nginx Bitnami Docker Image for WordPress with NGINX 56 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 33
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 16 [OK]
rancher/nginx-ingress-controller 10
ibmcom/nginx-ingress-controller Docker Image for IBM Cloud Private-CE (Commu… 4
bitnami/nginx-ldap-auth-daemon 3
5、將需要的鏡像下載至本地
[root@linux01 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:1c13bc6de5dfca749c377974146ac05256791ca2fe1979fc8e8278bf0121d285
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
6径密、啟動(dòng)一個(gè)docker 鏡像
[root@linux01 ~]# docker run -it -d -p 8080:80 nginx
b385e2f2e6ac869eca03ed0305e6feea4430850f26926130c5582eb2cdcb551c
[root@linux01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b385e2f2e6ac nginx "/docker-entrypoint.…" 2 seconds ago Up 1 second 0.0.0.0:8080->80/tcp, :::8080->80/tcp heuristic_vaughan
[root@linux01 ~]# curl http://127.0.0.1:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a >nginx.org</a>.<br/>
Commercial support is available at
<a >nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@linux01 ~]#
7午阵、進(jìn)入docker 鏡像,如進(jìn)入上面啟動(dòng)的nginx
#docker exec -it 容器ID 指定shell
[root@linux01 ~]# docker exec -it b385e2f2e6ac /bin/bash
root@b385e2f2e6ac:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc
8享扔、如何停止docker鏡像
#docker stop 容器ID or docker rm -f 容器ID
[root@linux01 ~]# docker stop b385e2f2e6ac
b385e2f2e6ac
#再啟動(dòng)一個(gè)nginx,然后刪除
[root@linux01 ~]# docker run -it -d -p 8080:80 nginx
a16a82b6d636acaef906e3bbba80a0832b5b6be2ca5ea6101ecf1544f56807d3
[root@linux01 ~]# docker rm -f a16a82b6d636acaef906e3bbba80a0832b5b6be2ca5ea6101ecf1544f56807d3
a16a82b6d636acaef906e3bbba80a0832b5b6be2ca5ea6101ecf1544f56807d3
9趟庄、學(xué)會(huì)使用docker -h,查看一些常見的參數(shù)
[root@linux01 ~]# docker --help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and
default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
輸出.....