容器自動化(一):docker基礎(上)
容器自動化
--AchEng
一,Docker簡介,功能特性與應用場景
1.1 Docker簡介
- Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
- 一個完整的Docker有以下幾個部分組成:
- Docker Client 客戶端
- Docker Daemon 守護進程
- Docker Image 鏡像
- Docker Container 容器
1.2 Docker功能特性
- 隔離環境(系統,網絡,文件系統)與應用
- 解決依賴與版本問題
- 易於分發,開箱即用
- 節點與容器快速擴容
- 鏡像制作簡單便捷,管理方便
(1)隔離
- 通過cgroup(隔離和跟蹤資源的使用)& namespace(組與組之間隔離)來實現輕量級的進程隔離
- 對於容器中運行的進程來說,自己獨占了一個系統
- 容器間網絡,文件及其他資源都互相隔離
(2)版本與依賴
- 傳統模式下,多個不同環境或版本的項目需要部署在不同機器上,部署與后期維護管理復雜繁瑣。
- 使用Docker,通過多個不同版本或者環境的鏡像,可以同時運行在一台機器上互不干擾,部署與后期維護簡單方便。
(3)分發與使用
- 鏡像可以通過導入,導出,上傳到鏡像倉庫等多種方式進行分發
- 在啟動了Docker的系統上直接使用docker run即可啟動鏡像,無需特別配置。
(4)擴容
- 容器擴容簡單方便
- 擴容節點只需安裝並啟動Docker即可
(5)鏡像制作
- 鏡像的靈魂Dockerfile
- 使用Dockerfile進行指令控制
- 基於Linux命令,易於理解,快速上手
- 易於定制與修改
1.3 Docker應用場景
- Docker通常應用於如下場景:
- web應用的自動化打包和發布;
- 自動化測試和持續集成,發布;
- 應用服務,如MySQL,Redis等,通過Docker實現快速部署;
- k8s私有雲
1.3.1 場景1:多版本多種類系統與軟件
1.3.2 場景2: 環境
1.3.3 場景3: 分發
二,Docker的安裝
2.1 安裝環境
最小化安裝Centos7.5
[root@Docker ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@Docker ~]# uname -r
3.10.0-862.3.3.el7.x86_64
關閉防火牆和selinux
[root@Docker ~]# systemctl stop firewalld
[root@Docker ~]# systemctl disable firewalld
[root@Docker ~]# setenforce 0
setenforce: SELinux is disabled
2.2 版本選擇
- Docker
- 17.03之后版本變為Docker CE
- Docker CE
- 社區版,Community Edition
- Docker EE
- 企業版,Enterprise Edition
- 收費版本,強調安全性,提供一些高級特性及商業支持
2.3 Docker安裝:標准版本
特別提示:
centos7.5在搭建本地yum倉庫的時候只需要修改
CentOS-Media.repo 文件即可(不需要將其他文件仍子目錄里)
確保虛擬機能正常上網
[root@Docker ~]# yum -y install docker
[root@Docker ~]# systemctl start docker #啟動docker進程
[root@Docker ~]# systemctl enable docker #加入docker開機啟動
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@Docker ~]# docker ps #查看封裝在docker鏡像中的正在運行的鏡像進程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@Docker ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
Go version: go1.9.4
Git commit: 94f4240/1.13.1
Built: Fri May 18 15:44:33 2018
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
Go version: go1.9.4
Git commit: 94f4240/1.13.1
Built: Fri May 18 15:44:33 2018
OS/Arch: linux/amd64
Experimental: false
2.4 Docker安裝:CE社區版
首先清理掉yum安裝的docker標准版
這里有兩種方式
#第一種清理docker方法
[root@Docker ~]# yum -y remove docker
#第二種清理docker方法
[root@Docker ~]# yum history list #查看yum安裝的歷史列表
已加載插件:fastestmirror
ID | 登錄用戶 | 日期和時間 | 操作 | 變更數
-------------------------------------------------------------------------------
6 | root <root> | 2018-07-02 22:30 | Install | 17 EE #這次就是安裝的docker
5 | root <root> | 2018-07-02 20:08 | I, U | 60
4 | root <root> | 2018-07-03 03:54 | Install | 93
3 | root <root> | 2018-07-03 03:53 | Install | 1
2 | root <root> | 2018-07-03 03:53 | Install | 1
1 | 系統 <空> | 2018-07-03 03:46 | Install | 313
history list
[root@Docker ~]# yum history info 6 #查看yum歷史安裝ID為6的安裝信息
已加載插件:fastestmirror
事務 ID: 6
起始時間 : Mon Jul 2 22:30:11 2018
啟動 RPM 數據庫 : 409:3aba29f1d5b7e2d7ff3ed9f169ec4a2225595390
結束時間 : 22:30:27 2018 (16 秒)
結束 RPM 數據庫 : 426:28338758ec6a2332cabb3a1439336bd451c52366
用戶 : root <root>
返回碼 : 成功
命令行 : -y install docker
事務完成屬主:
已安裝 rpm-4.11.3-32.el7.x86_64 @anaconda
已安裝 yum-3.4.3-158.el7.centos.noarch @anaconda
已安裝 yum-plugin-fastestmirror-1.1.31-45.el7.noarch @anaconda
已變更的包:
依賴安裝 audit-libs-python-2.8.1-3.el7.x86_64 @base
依賴安裝 checkpolicy-2.5-6.el7.x86_64 @base
依賴安裝 container-selinux-2:2.55-1.el7.noarch @extras
依賴安裝 container-storage-setup-0.9.0-1.rhel75.gite0997c3.el7.noarch @extras
安裝 docker-2:1.13.1-63.git94f4240.el7.centos.x86_64 @extras
依賴安裝 docker-client-2:1.13.1-63.git94f4240.el7.centos.x86_64 @extras
依賴安裝 docker-common-2:1.13.1-63.git94f4240.el7.centos.x86_64 @extras
依賴安裝 libcgroup-0.41-15.el7.x86_64 @base
依賴安裝 libsemanage-python-2.5-11.el7.x86_64 @base
依賴安裝 oci-register-machine-1:0-6.git2b44233.el7.x86_64 @extras
依賴安裝 oci-systemd-hook-1:0.1.15-2.gitc04483d.el7.x86_64 @extras
依賴安裝 oci-umount-2:2.3.3-3.gite3c9055.el7.x86_64 @extras
依賴安裝 policycoreutils-python-2.5-22.el7.x86_64 @base
依賴安裝 python-IPy-0.75-6.el7.noarch @base
依賴安裝 setools-libs-3.3.8-2.el7.x86_64 @base
依賴安裝 skopeo-containers-1:0.1.29-3.dev.git7add6fc.el7.0.x86_64 @extras
依賴安裝 yajl-2.0.4-4.el7.x86_64 @base
Scriptlet 輸出:
1 setsebool: SELinux is disabled.
history info
[root@Docker ~]# yum -y history undo 6 #進行yum安裝操作回退
特別提示:
yum的回退安裝在工作中很有用,請留心學習
接下來我們安裝Docker的CE社區版
#安裝依賴包
[root@Docker ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
#添加docker的CE版本的yum源配置文件
[root@Docker ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2424 100 2424 0 0 2544 0 --:--:-- --:--:-- --:--:-- 2543
[root@Docker ~]# ll /etc/yum.repos.d/docker-ce.repo
-rw-r--r-- 1 root root 2424 7月 2 23:00 /etc/yum.repos.d/docker-ce.repo
#安裝CE版本的docker
[root@Docker ~]# yum -y install docker-ce
[root@Docker ~]# systemctl start docker #啟動docker
[root@Docker ~]# systemctl enable docker #添加開機啟動
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@Docker ~]# docker version #查看docker版本
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:20:16 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:23:58 2018
OS/Arch: linux/amd64
Experimental: false
三,Docker的操作命令
3.0 添加docker國內鏡像源
在開始學習docker之前,我們首先要更改一下docker的默認源鏡像下載地址(默認是從國外下載,很慢),我們需要添加國內的源地址
[root@docker ~]# cat /etc/docker/daemon.json
{
"registry-mirrors":[ "https://81l9w6xn.mirror.aliyuncs.com" ]
}
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
3.1 Docker命令:search
用於從docker的官方公有鏡像倉庫查找鏡像
(1)查看Docker Hub上公開的centos鏡像
[root@docker ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 4419 [OK]
...以下省略無數行....
特別說明:
Name:鏡像的名字
DESCRIPTION:描述
STARS:星級(越高越好)
OFFICIAL:是否是官方發布的
AUTOMATED:是否自動化的
(2)查找星級多於100的centos鏡像
[root@docker ~]# docker search centos -f stars=100
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 4419 [OK]
ansible/centos7-ansible Ansible on Centos7 114 [OK]
特別提示:
/:符號用於分割作者名稱和鏡像名稱
ansible/centos7-ansible:ansible是作者名稱,centos7-ansible是鏡像名稱
(3)多條件查找--filter
#查找官方發布的,星級大於100的centos鏡像
[root@docker ~]# docker search centos --filter is-official=true --filter stars=100
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 4419 [OK]
3.2 Docker命令:pull
用於從Docker Hub上下載公有鏡像
#查找符合條件的hello-world鏡像
[root@docker ~]# docker search hello-world --filter is-official=true --filter stars=100
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
hello-world Hello World! (an example of minimal Dockeriz… 572 [OK]
#下載目標hello-world鏡像
[root@docker ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Status: Downloaded newer image for hello-world:latest #下載成功latest是標記tag
#下載目標centos:7鏡像
[root@docker 7]# docker pull centos:7 #網速不好的話,需要點時間耐心等待
3.3 Docker命令:images
用於本地鏡像的查看
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 49f7960eb7e4 4 weeks ago 200MB
hello-world latest e38bc07ac18e 2 months ago 1.85kB
特別說明:
REPOSITORY:鏡像倉庫(下邊羅列的都是本地已有鏡像名稱)
TAG:鏡像的標記(為了區分同名鏡像)
IMAGES ID:鏡像的ID號
CREATED:此鏡像的創建時間
SIZE:此鏡像的大小
3.4 Docker命令:build
用於本地自定義鏡像的構建,需要創建Dockerfile文件(具體寫法后面會講,這里同學們先看)
#創建Dockerfile文件的存儲目錄
[root@docker ~]# mkdir -p /root/dockerfile/lib/centos/7
[root@docker ~]# cd /root/dockerfile/lib/centos/7
#創建docker.sh腳本
[root@docker 7]# vim docker.sh
[root@docker 7]# cat docker.sh
#!/bin/bash
while true
do
echo "welcome"
sleep 5
done
#創建Dockerfile配置文件,文件名稱必須為Dockerfile,第一個字母必須大寫
[root@docker 7]# vim Dockerfile
[root@docker 7]# cat Dockerfile
FROM centos #從centos源鏡像的基礎上進行構建
LABEL MAINTATNER="Mr.chen.com" #作者的名稱
RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #RUN:在鏡像構建過程中運行命令
ADD docker.sh /home/test/ #從本地系統中把docker.sh文件添加到構建中的鏡像的/home/test/目錄下
RUN chmod +x /home/test/docker.sh #在鏡像構建過程中運行命令
CMD ["/home/test/docker.sh"] #構建鏡像完成時,最后執行的命令
#根據Dockfile配置文件構建一個自定義鏡像
[root@docker 7]# docker build -t Mr.chen/centos7:1 . #-t 指定鏡像名稱 :1 設定鏡像的tag標記
Sending build context to Docker daemon 3.072kB
Step 1/6 : FROM centos
---> 49f7960eb7e4
Step 2/6 : LABEL MAINTATNER="Mr.chen.com"
---> Running in 2537e36ba496
Removing intermediate container 2537e36ba496
---> 1a932d4c7762
Step 3/6 : RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
---> Running in 7890b38ae948
'/etc/localtime' -> '/usr/share/zoneinfo/Asia/Shanghai'
Removing intermediate container 7890b38ae948
---> 82c412669879
Step 4/6 : ADD docker.sh /home/test/
---> 8f092336a175
Step 5/6 : RUN chmod +x /home/test/docker.sh
---> Running in b034c6f7439f
Removing intermediate container b034c6f7439f
---> f6587dbd78dd
Step 6/6 : CMD ["/home/test/docker.sh"]
---> Running in cd13edcd6632
Removing intermediate container cd13edcd6632
---> 58af3ad826d2
Successfully built 58af3ad826d2 #構建成功
Successfully tagged Mr.chen/centos7:1
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos7 1 58af3ad826d2 57 seconds ago 200MB #TAG為1
centos 7 49f7960eb7e4 4 weeks ago 200MB
hello-world latest e38bc07ac18e 2 months ago 1.85kB
3.5 Docker命令:run
運行一個本地鏡像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos7 1 58af3ad826d2 26 minutes ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
jdeathe/centos-ssh latest 563e45ee6e12 2 months ago 219MB
hello-world latest e38bc07ac18e 2 months ago 1.85kB
[root@docker ~]# docker run -d -it 58af3ad826d2
093e4fb8b09c8082c4749ad34db09c58f43111e447bbaccdd527d558a12f4404
特別提示:
docker run:運行一個指定的images id
-d:放在后台運行
-i:可以進行命令交互
-t:制作一個偽終端用於登陸
58af3ad826d2:鏡像的ID,可以簡寫成58a
3.6 Docker命令:ps
查看已經運行的鏡像的進程
[root@docker ~]# docker ps -a #查看所有運行的鏡像進程(包含退出的exit)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
093e4fb8b09c 58af3ad826d2 "/bin/bash" 4 minutes ago Up 4 minutes gallant_ptolemy
特別提示:
STATUS:進程的狀態,UP表示正在運行中,EXIT表示已經退出了。
3.7 Docker命令:attach
從本地系統中切入到某個STATUS狀態是UP的鏡像進程里
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
093e4fb8b09c 58af3ad826d2 "/bin/bash" 4 minutes ago Up 4 minutes gallant_ptolemy
[root@docker ~]# docker attach 093e4fb8b09c #切入到容器號為093e4fb8b09c的鏡像進程里
[root@093e4fb8b09c /]# ls #已經進入容器里了
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@093e4fb8b09c /]# exit #退出容器
exit
[root@docker ~]# docker ps -a #容器的進程的STATUS已經處於EXIT狀態(之前是后台運行的,切入進去后執行exit就等於手動退出了)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
093e4fb8b09c 58af3ad826d2 "/bin/bash" 9 minutes ago Exited (127) 11 seconds ago gallant_ptolemy
3.8 Docker命令:stop
用於停止一個正在運行着的容器進程
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
093e4fb8b09c 58af3ad826d2 "/bin/bash" 12 minutes ago Exited (127) 3 minutes ago gallant_ptolemy
#再次在后台啟動一個鏡像
[root@docker ~]# docker run -d -it 58af3ad826d2 /bin/bash
ceb6682bd574a78d0072121c095ba5f22569fa46c2ec00f203f4b0a988cb75a5
[root@docker ~]# docker ps -a #增加了一個容器進程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ceb6682bd574 58af3ad826d2 "/bin/bash" 3 seconds ago Up 2 seconds affectionate_agnesi
093e4fb8b09c 58af3ad826d2 "/bin/bash" 12 minutes ago Exited (127) 3 minutes ago gallant_ptolemy
#停止一個運行着的容器進程
[root@docker ~]# docker stop ceb6682bd574
ceb6682bd574
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Exited (137) 13 seconds ago affectionate_agnesi
093e4fb8b09c 58af3ad826d2 "/bin/bash" 14 minutes ago Exited (127) 5 minutes ago gallant_ptolemy
3.9 Docker命令:start
用於啟動一個已經停止了的容器進程
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Exited (137) 13 seconds ago affectionate_agnesi
093e4fb8b09c 58af3ad826d2 "/bin/bash" 14 minutes ago Exited (127) 5 minutes ago gallant_ptolemy
[root@docker ~]# docker start ceb6682bd574
ceb6682bd574
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Up 2 seconds affectionate_agnesi
093e4fb8b09c 58af3ad826d2 "/bin/bash" 15 minutes ago Exited (127) 6 minutes ago gallant_ptolemy
3.10 Docker命令:rm
用於刪除一個已經停止了的容器進程
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Up 2 seconds affectionate_agnesi
093e4fb8b09c 58af3ad826d2 "/bin/bash" 15 minutes ago Exited (127) 6 minutes ago gallant_ptolemy
[root@docker ~]# docker rm 093e4fb8b09c
093e4fb8b09c
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ceb6682bd574 58af3ad826d2 "/bin/bash" 4 minutes ago Up About a minute affectionate_agnesi
[root@docker ~]# docker rm ceb6682bd574 #注意運行中的容器進程需要先stop,才能刪除
Error response from daemon: You cannot remove a running container ceb6682bd574a78d0072121c095ba5f22569fa46c2ec00f203f4b0a988cb75a5. Stop the container before attempting removal or force remove
3.11 Docker命令:rmi
用於刪除一個未用作容器啟動的本地鏡像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos7 1 58af3ad826d2 About an hour ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
hello-world latest e38bc07ac18e 2 months ago 1.85kB
[root@docker ~]# docker rmi -f e38bc07ac18e #-f 強制刪除(即便被占用)
Untagged: hello-world:latest
Untagged: hello-world@sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Deleted: sha256:e38bc07ac18ee64e6d59cf2eafcdddf9cec2364dfe129fe0af75f1b0194e0c96
Deleted: sha256:2b8cbd0846c5aeaa7265323e7cf085779eaf244ccbdd982c4931aef9be0d2faf
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos7 1 58af3ad826d2 About an hour ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker ~]# docker rmi 58af3ad826d2 #但要注意,被用作容器啟動的鏡像是不能刪除的(需先rm刪除容器進程)
Error response from daemon: conflict: unable to delete 58af3ad826d2 (cannot be forced) - image is being used by running container ceb6682bd574
[root@docker ~]# docker rmi -f 58af3ad826d2 #強行刪除被容器進程占用的鏡像也是不行的
Error response from daemon: conflict: unable to delete 58af3ad826d2 (cannot be forced) - image is being used by running container ceb6682bd574
[root@docker ~]# docker ps -a #查看容器進程,被占用中
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ceb6682bd574 58af3ad826d2 "/bin/bash" 9 minutes ago Up 6 minutes affectionate_agnesi
3.12 Docker命令:commit
將一個更改過的容器進程的容器狀態保存為一個新的鏡像
[root@docker ~]# docker ps -a #查看啟動的容器進程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5af7d28b054e 58af3ad826d2 "/bin/bash" About a minute ago Up About a minute tender_dubinsky
[root@docker ~]# docker attach 5af7d28b054e #切入容器進程
[root@5af7d28b054e /]# ls
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@5af7d28b054e /]# mkdir yunjisuan #在容器進程里創建yunjisuan目錄
[root@5af7d28b054e /]# ls
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var yunjisuan
[root@5af7d28b054e /]# exit #退出容器進程
exit
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5af7d28b054e 58af3ad826d2 "/bin/bash" 2 minutes ago Exited (0) 4 seconds ago tender_dubinsky
[root@docker ~]# docker commit 5af7d28b054e Mr.chen/centos:2 #將更改后的容器進程保存為一個新的鏡像
sha256:5620f1cb9e8eac8ea79f95e6f5786f8503f6ac12428bd3e9dc8197a173e426b8
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos 2 5620f1cb9e8e 4 seconds ago 200MB #保存成功
Mr.chen/centos7 1 58af3ad826d2 21 hours ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
#啟動新保存的鏡像
[root@docker ~]# docker run -d -it 5620f1cb9e8e /bin/bash
aeda0a4b7e85e940945ce7e318c9ef56ad720cfc9c586b1b0f79bbcd1cf232e6
[root@docker ~]# docker ps -a #查看新鏡像的容器進程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aeda0a4b7e85 5620f1cb9e8e "/bin/bash" 3 seconds ago Up 3 seconds zealous_goldstine
5af7d28b054e 58af3ad826d2 "/bin/bash" 7 minutes ago Exited (0) 4 minutes ago tender_dubinsky
[root@docker ~]# docker attach aeda0a4b7e85 #切入新鏡像的容器進程
[root@aeda0a4b7e85 /]# ls -d yunjisuan #我們發現之前創建的目錄仍舊存在
yunjisuan
3.13 Docker命令:exec
用於從本地操作系統上直接向容器進程發布執行命令並返回結果
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aeda0a4b7e85 5620f1cb9e8e "/bin/bash" 6 minutes ago Up 4 seconds zealous_goldstine
5af7d28b054e 58af3ad826d2 "/bin/bash" 13 minutes ago Exited (0) 11 minutes ago tender_dubinsky
[root@docker ~]# docker exec aeda0a4b7e85 ls /tmp #查看容器進程里的/tmp目錄下所有內容
ks-script-3QMvMi
yum.log
[root@docker ~]# docker exec aeda0a4b7e85 ls -d /yunjisuan #查看容器進程里/yunjisuan目錄
/yunjisuan
3.14 Docker命令:cp
用於在容器進程和本地系統之間復制文件
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aeda0a4b7e85 5620f1cb9e8e "/bin/bash" 9 minutes ago Up 2 minutes zealous_goldstine
5af7d28b054e 58af3ad826d2 "/bin/bash" 16 minutes ago Exited (0) 14 minutes ago tender_dubinsky
[root@docker ~]# docker exec aeda0a4b7e85 ls /tmp #向容器進程發布命令
ks-script-3QMvMi
yum.log
[root@docker ~]# docker cp aeda0a4b7e85:/tmp/yum.log . #將指定容器進程的/tmp/yum.log復制到當前目錄下
[root@docker ~]# ls
anaconda-ks.cfg dockerfile nohup.out ping.out yum.log #已經復制過來了
[root@docker ~]# docker cp anaconda-ks.cfg aeda0a4b7e85:/tmp/ #將本地文件復制到容器進程里
[root@docker ~]# docker exec aeda0a4b7e85 ls /tmp
anaconda-ks.cfg #復制成功
ks-script-3QMvMi
yum.log
3.15 Docker命令:create
用於創建一個容器進程,但是並不啟動它
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos 2 5620f1cb9e8e 22 minutes ago 200MB
Mr.chen/centos7 1 58af3ad826d2 22 hours ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker ~]# docker create -it 5620f1cb9e8e #創建一個鏡像的容器進程,但不直接啟動
6040b7b6decee3701444af0e6258f7af506e2e1bed4967e9fa5d67fe9bd599e8
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6040b7b6dece 5620f1cb9e8e "/bin/bash" 3 seconds ago Created nifty_yalow #創建狀態並未啟動
5af7d28b054e 58af3ad826d2 "/bin/bash" 25 minutes ago Exited (0) 23 minutes ago tender_dubinsky
[root@docker ~]# docker start 6040b7b6dece #啟動容器進程
6040b7b6dece
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6040b7b6dece 5620f1cb9e8e "/bin/bash" 17 seconds ago Up 1 second nifty_yalow
5af7d28b054e 58af3ad826d2 "/bin/bash" 26 minutes ago Exited (0) 23 minutes ago tender_dubinsky
3.16 Docker命令:diff
查看容器進程與源鏡像做對比,發生了改變的文件或文件夾
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos 2 5620f1cb9e8e 11 hours ago 200MB
Mr.chen/centos7 1 58af3ad826d2 32 hours ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker ~]# docker run -d -it 5620f1cb9e8e #啟動一個鏡像的容器進程
ab06a9794e45ca35ab5f4594d630ecbe3527814233cc004d4deb8aafde2906f8
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab06a9794e45 5620f1cb9e8e "/bin/bash" 3 seconds ago Up 2 seconds confident_snyder
[root@docker ~]# docker attach ab06a9794e45 #切入容器進程
[root@ab06a9794e45 /]# cd /yunjisuan/
[root@ab06a9794e45 yunjisuan]# pwd
/yunjisuan
[root@ab06a9794e45 yunjisuan]# touch {1..10} #在容器進程中創建文件
[root@ab06a9794e45 yunjisuan]# ls
1 10 2 3 4 5 6 7 8 9
[root@ab06a9794e45 yunjisuan]# exit #退出容器進程
exit
[root@docker ~]# docker diff ab06a9794e45 #查看容器進程的變化
C /root/.bash_history
C /yunjisuan
A /yunjisuan/1
A /yunjisuan/10
A /yunjisuan/2
A /yunjisuan/3
A /yunjisuan/4
A /yunjisuan/5
A /yunjisuan/6
A /yunjisuan/7
A /yunjisuan/8
A /yunjisuan/9
3.17 Docker命令:events
時時監測容器的變化情況
[root@docker ~]# docker events
2018-07-06T09:11:23.938963932+08:00 network connect c03e38ce8c0e54511899c4ad34b37adaa6339b68e44478072b7d9a4129afdb7a (container=ab06a9794e45ca35ab5f4594d630ecbe3527814233cc004d4deb8aafde2906f8, name=bridge, type=bridge)
2018-07-06T09:11:24.096366168+08:00 container start ab06a9794e45ca35ab5f4594d630ecbe3527814233cc004d4deb8aafde2906f8 (MAINTATNER=Mr.chen.com, image=5620f1cb9e8e, name=confident_snyder, org.label-schema.schema-version== 1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20180531)
前台時時監控容器的變化若要檢測,需要另外再起一個窗口進行操作
3.18 Docker命令:export
將容器進程的文件系統導出到本地
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab06a9794e45 5620f1cb9e8e "/bin/bash" About an hour ago Up About an hour confident_snyder
[root@docker ~]# docker export ab06a9794e45 > test.tar #將容器進程導出成一個tar包
[root@docker ~]# ls
anaconda-ks.cfg dockerfile nohup.out ping.out test.tar yum.log
3.19 Docker命令:import
用於將export導出的文件系統創建為一個鏡像
[root@docker ~]# ls
anaconda-ks.cfg dockerfile nohup.out ping.out test.tar yum.log
[root@docker ~]# docker import test.tar Mr.chen/centos:3 #將導出的tar包文件系統生成一個新的鏡像
sha256:745606e08231f270d40fe2bff574f10b60144e52accd79772c0ed8c739da015a
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos 3 745606e08231 4 seconds ago 200MB
Mr.chen/centos 2 5620f1cb9e8e 13 hours ago 200MB
Mr.chen/centos7 1 58af3ad826d2 34 hours ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
3.20 Docker命令:history
用於查看一個鏡像的歷史修改紀錄
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos 3 745606e08231 4 seconds ago 200MB
Mr.chen/centos 2 5620f1cb9e8e 13 hours ago 200MB
Mr.chen/centos7 1 58af3ad826d2 34 hours ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker ~]# docker history 745606e08231
IMAGE CREATED CREATED BY SIZE COMMENT
745606e08231 6 minutes ago 200MB Imported from -
[root@docker ~]# docker history 5620f1cb9e8e
IMAGE CREATED CREATED BY SIZE COMMENT
5620f1cb9e8e 13 hours ago /bin/bash 27B
58af3ad826d2 34 hours ago /bin/sh -c #(nop) CMD ["/home/test/docker.s… 0B
f6587dbd78dd 34 hours ago /bin/sh -c chmod +x /home/test/docker.sh 57B
8f092336a175 34 hours ago /bin/sh -c #(nop) ADD file:84ec58f8405b16017… 57B
82c412669879 34 hours ago /bin/sh -c ln -sfv /usr/share/zoneinfo/Asia/… 33B
1a932d4c7762 34 hours ago /bin/sh -c #(nop) LABEL MAINTATNER=Mr.chen.… 0B
49f7960eb7e4 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 4 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:8f4b3be0c1427b158… 200MB
3.21 Docker命令:info
用於查看當前操作系統的docker運行信息
[root@docker ~]# docker info
Containers: 1 #容器進程1個
Running: 1 #正在運行狀態的容器1個
Paused: 0
Stopped: 0
Images: 8 #一共有8個鏡像
Server Version: 18.03.1-ce
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-862.3.3.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 974.6MiB
Name: docker
ID: IZLC:3CEK:YWIH:CEWB:SHHI:BUAY:B3I5:GGN6:BW4E:4O2Z:FVAD:DMPI
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
3.22 Docker命令:inspect
查看某個鏡像的詳細信息
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Mr.chen/centos 3 745606e08231 12 minutes ago 200MB
Mr.chen/centos 2 5620f1cb9e8e 13 hours ago 200MB
Mr.chen/centos7 1 58af3ad826d2 34 hours ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker ~]# docker inspect 745606e08231
[
{
"Id": "sha256:745606e08231f270d40fe2bff574f10b60144e52accd79772c0ed8c739da015a",
"RepoTags": [
"Mr.chen/centos:3"
],
"RepoDigests": [],
"Parent": "",
"Comment": "Imported from -",
"Created": "2018-07-06T02:36:40.100685513Z",
"Container": "",
"ContainerConfig": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": null,
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"DockerVersion": "18.03.1-ce",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": null,
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 199678439,
"VirtualSize": 199678439,
"GraphDriver": {
"Data": {
"MergedDir": "/var/lib/docker/overlay2/a5c2a8fae1f8ccde01cbb408f8ad3d35d613c35eb0384395d4d0a5c40d9823cf/merged",
"UpperDir": "/var/lib/docker/overlay2/a5c2a8fae1f8ccde01cbb408f8ad3d35d613c35eb0384395d4d0a5c40d9823cf/diff",
"WorkDir": "/var/lib/docker/overlay2/a5c2a8fae1f8ccde01cbb408f8ad3d35d613c35eb0384395d4d0a5c40d9823cf/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:168843d36816cba72e7a483e5d6ce0fe89a6755fe86704d162306082f4300a8c"
]
},
"Metadata": {
"LastTagTime": "2018-07-06T10:36:40.101585642+08:00"
}
}
]
3.23 Docker命令:kill
強行停止一個或多個正在運行狀態的容器進程
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab06a9794e45 5620f1cb9e8e "/bin/bash" 2 hours ago Up 2 hours confident_snyder
[root@docker ~]# docker kill ab06a9794e45
ab06a9794e45
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab06a9794e45 5620f1cb9e8e "/bin/bash" 2 hours ago Exited (137) 1 second ago confident_snyder
3.24 Docker命令:save
用於將一個鏡像的文件系統導出到本地(export導出的是容器)
#重新build一個鏡像
[root@docker ~]# cd dockerfile/lib/centos/7/
[root@docker 7]# docker build -t test:1 .
Sending build context to Docker daemon 3.072kB
Step 1/6 : FROM centos
---> 49f7960eb7e4
Step 2/6 : LABEL MAINTATNER="Mr.chen.com"
---> Running in 9c71d8d0c8d9
Removing intermediate container 9c71d8d0c8d9
---> c719db6a38bb
Step 3/6 : RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
---> Running in 39436af722de
'/etc/localtime' -> '/usr/share/zoneinfo/Asia/Shanghai'
Removing intermediate container 39436af722de
---> c80e63f73145
Step 4/6 : ADD docker.sh /home/test/
---> fa1179b1ab73
Step 5/6 : RUN chmod +x /home/test/docker.sh
---> Running in 5a0243641c71
Removing intermediate container 5a0243641c71
---> f4fe4b82300c
Step 6/6 : CMD ["/home/test/docker.sh"]
---> Running in f259134ac5be
Removing intermediate container f259134ac5be
---> cc87aef92b66
Successfully built cc87aef92b66
Successfully tagged test:1
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 4 seconds ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
#save導出test:1這個鏡像(也可以用id號)
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 51 seconds ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker 7]# docker save test:1 > test.tar
[root@docker 7]# ls
Dockerfile docker.sh test.tar
3.25 Docker命令:load
用於將save導出到本地的tar包,重新加載為鏡像(和源鏡像的名字標識完全一樣)
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 2 minutes ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker 7]# docker rmi test:1 #刪除鏡像test:1
Untagged: test:1
Deleted: sha256:cc87aef92b667fa2ef8c6f00fc2c598931adcc137e569a5ee77626e98845c66f
Deleted: sha256:f4fe4b82300c163350ca7aea20d713246b34861e57778482a8536b189eb15328
Deleted: sha256:a49455ce240e931703525ab8bd0fd46a08283681e54b412cc2ae3ff98c346847
Deleted: sha256:fa1179b1ab73c564f85ab15038abc27248da914bf61f835432b1b3e9660dac3f
Deleted: sha256:c9686c8c97ed841d519023cc7ce6a7e8b6c6af51d2d85084dcf37b072933f353
Deleted: sha256:c80e63f73145c443d5fac77b166b68b0865167ce3e17b9207540bc926276850a
Deleted: sha256:0794cb3a1f33a60e86ffd252d7db298799b44c846efe6b0aef3e445db767d662
Deleted: sha256:c719db6a38bb83756c8e831694268681ece2ee2e8ae6ecad12bd810997f61b9e
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker 7]# docker load < test.tar #將之前test:1這個鏡像的save備份導入系統
cdba4ed54f31: Loading layer [==================================================>] 2.048kB/2.048kB
0e990db11d5d: Loading layer [==================================================>] 3.584kB/3.584kB
e57b2692ffad: Loading layer [==================================================>] 3.072kB/3.072kB
Loaded image: test:1
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 2 minutes ago 200MB #和原來的鏡像完全一樣
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
3.26 Docker命令:logs
用於輸出一個容器進程內的操作日志
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 12 minutes ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker 7]# docker run -d -it test:1
16f9f6c9c699c649709b5643590c632f4c2e2f621de7dd1a6c480ae863761a98
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16f9f6c9c699 test:1 "/home/test/docker.sh" 2 seconds ago Up 2 seconds adoring_noether
[root@docker 7]# docker logs 16f9f6c9c699
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
welcome
[root@docker 7]# docker logs --tail 5 16f9f6c9c699 #只顯示容器日志的后5行
welcome
welcome
welcome
welcome
welcome
3.27 Docker命令:pause && unpause
用於將一個或多個容器的進程暫停和恢復
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16f9f6c9c699 test:1 "/home/test/docker.sh" 5 minutes ago Up 5 minutes adoring_noether
[root@docker 7]# docker pause 16f9f6c9c699 #暫停容器進程
16f9f6c9c699
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16f9f6c9c699 test:1 "/home/test/docker.sh" 5 minutes ago Up 5 minutes (Paused) adoring_noether
[root@docker 7]# docker unpause 16f9f6c9c699 #恢復容器進程
16f9f6c9c699
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16f9f6c9c699 test:1 "/home/test/docker.sh" 5 minutes ago Up 5 minutes adoring_noether
3.28 Docker命令:port
用於列出一個容器的端口映射及協議
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 24 minutes ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker 7]# docker run -d -it -p 2222:22 test:1 #啟動一個鏡像的容器進程 -p 指定本地2222端口映射到容器的22端口
6321c3a3481fe44c13307a1e082ac58a0ee87b29e8bdd2a2d664914a66405f1c
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6321c3a3481f test:1 "/home/test/docker.sh" 5 seconds ago Up 4 seconds 0.0.0.0:2222->22/tcp romantic_elbakyan
16f9f6c9c699 test:1 "/home/test/docker.sh" 10 minutes ago Up 10 minutes adoring_noether
[root@docker 7]# docker port 6321c3a3481f #查看容器進程的端口映射及協議
22/tcp -> 0.0.0.0:2222
3.29 Docker命令:rename
給容器進程重命名
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6321c3a3481f test:1 "/home/test/docker.sh" 11 minutes ago Up 11 minutes 0.0.0.0:2222->22/tcp romantic_elbakyan
16f9f6c9c699 test:1 "/home/test/docker.sh" 22 minutes ago Up 22 minutes adoring_noether
[root@docker 7]# docker rename romantic_elbakyan Mr.chen
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6321c3a3481f test:1 "/home/test/docker.sh" 11 minutes ago Up 11 minutes 0.0.0.0:2222->22/tcp Mr.chen
16f9f6c9c699 test:1 "/home/test/docker.sh" 22 minutes ago Up 22 minutes adoring_noether
3.30 Docker命令:restart
重啟一個容器進程
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6321c3a3481f test:1 "/home/test/docker.sh" 15 minutes ago Up 15 minutes 0.0.0.0:2222->22/tcp Mr.chen
16f9f6c9c699 test:1 "/home/test/docker.sh" 26 minutes ago Up 26 minutes adoring_noether
[root@docker 7]# docker restart 6321c3a3481f
6321c3a3481f
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6321c3a3481f test:1 "/home/test/docker.sh" 15 minutes ago Up 2 seconds 0.0.0.0:2222->22/tcp Mr.chen
16f9f6c9c699 test:1 "/home/test/docker.sh" 26 minutes ago Up 26 minutes adoring_noether
3.31 Docker命令:stats
用於時時輸出容器的資源使用情況
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6321c3a3481f test:1 "/home/test/docker.sh" 17 minutes ago Up About a minute 0.0.0.0:2222->22/tcp Mr.chen
16f9f6c9c699 test:1 "/home/test/docker.sh" 28 minutes ago Up 28 minutes adoring_noether
[root@docker 7]# docker stats 6321c3a3481f
#--no-tream只輸出一次
[root@docker 7]# docker stats 6321c3a3481f --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
6321c3a3481f Mr.chen 0.00% 292KiB / 974.6MiB 0.03% 648B / 0B 0B / 0B 2
3.32 Docker命令:tag
用於從一個指定的鏡像創建另外一個鏡像
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 About an hour ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker 7]# docker tag test:1 test:2 #我們可以指定名字:標志來創建
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 About an hour ago 200MB
test 2 cc87aef92b66 About an hour ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker 7]# docker rmi test:2
Untagged: test:2
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 About an hour ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker 7]# docker tag cc87aef92b66 test:2 #我們也可以指定image id來創建
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 cc87aef92b66 About an hour ago 200MB
test 2 cc87aef92b66 About an hour ago 200MB
centos 7 49f7960eb7e4 4 weeks ago 200MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
3.33 Docker命令:top
用於顯示指定容器的進程信息
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6321c3a3481f test:1 "/home/test/docker.sh" 28 minutes ago Up 12 minutes 0.0.0.0:2222->22/tcp Mr.chen
16f9f6c9c699 test:1 "/home/test/docker.sh" 39 minutes ago Up 39 minutes adoring_noether
[root@docker 7]# docker top 6321c3a3481f
UID PID PPID C STIME TTY TIME CMD
root 89798 89784 0 11:55 pts/0 00:00:00 /bin/bash /home/test/docker.sh
root 90265 89798 0 12:07 pts/0 00:00:00 sleep 5
3.34 Docker命令:update
用於調整一個或多個容器的啟動配置
[root@docker 7]# docker update --help
Usage: docker update [OPTIONS] CONTAINER [CONTAINER...]
Update configuration of one or more containers
Options:
--blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int Limit the CPU real-time period in microseconds
--cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
-c, --cpu-shares int CPU shares (relative weight) #調整CPU
--cpus decimal Number of CPUs
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--kernel-memory bytes Kernel memory limit
-m, --memory bytes Memory limit #調整內存
--memory-reservation bytes Memory soft limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--restart string Restart policy to apply when a container exits
3.35 Docker命令:version and wait
version用於顯示docker的版本信息
wait用於捕捉一個或多個容器的退出狀態,並返回退出狀態碼
#顯示docker版本信息
[root@docker 7]# docker version
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:20:16 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:23:58 2018
OS/Arch: linux/amd64
Experimental: false
#監聽容器的退出狀態並返回狀態碼
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6321c3a3481f test:1 "/home/test/docker.sh" 33 minutes ago Up 17 minutes 0.0.0.0:2222->22/tcp Mr.chen
16f9f6c9c699 test:1 "/home/test/docker.sh" 44 minutes ago Up 44 minutes adoring_noether
[root@docker 7]# docker wait 6321c3a3481f #需要在開一個窗口stop這個容器進程再查看
137
3.36 Docker命令:login && logout && push
- login用於登陸docker hub官方公有倉庫
- logout用於登出docker hub官方公有倉庫
- push用於將本地鏡像提交到docker hub
由於docker hub國內已經無法注冊,因此無法演示上述內容
DockerHub官方公有鏡像倉庫:https://hub.docker.com/
四,管理應用程序數據
4.1 Volume和Bind Mount
將Docker主機數據掛載到容器
- Docker提供三種不同方式將數據從宿主機掛載到容器中:volumes,bind mounts和tmpfs。
- volumes:Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)
- bind mounts:可以存儲在宿主機系統的任意位置
- tmpfs:掛載存儲在宿主機系統的內存中,而不會寫入宿主機的文件系統
4.1.1 Volume
#創建一個卷
[root@docker 7]# docker volume create nginx-vol
nginx-vol
[root@docker 7]# docker volume ls
DRIVER VOLUME NAME
local nginx-vol
[root@docker 7]# docker volume inspect nginx-vol
[
{
"CreatedAt": "2018-07-07T00:07:51+08:00", #創建時間
"Driver": "local", #驅動
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data", #掛載點
"Name": "nginx-vol", #卷名
"Options": {},
"Scope": "local"
}
]
#下載一個nginx官方鏡像
[root@docker 7]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
683abbb4ea60: Pull complete
6ff57cbc007a: Pull complete
162f7aebbf40: Pull complete
Digest: sha256:2cf71a9320ea65566c0738e87400407aaffd8dd11a411ceb2f2b585ad513469e
Status: Downloaded newer image for nginx:latest
[root@docker 7]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 649dcb69b782 2 days ago 109MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
[root@docker 7]# docker run -dit --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
e74fb1640742a6a535d825ea223c18809b495532a9c9d6bd0b7ca8c4775261dc
特別說明:
--name:容器的名字
--mount:掛載
src:源卷的名字
dst:掛載到容器中的路徑
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e74fb1640742 nginx "nginx -g 'daemon of…" 48 seconds ago Up 47 seconds 80/tcp nginx-test
#向容器中的掛載目錄創建文件,查看是否掛載成功
[root@docker 7]# docker exec nginx-test touch /usr/share/nginx/html/test.txt
[root@docker 7]# docker exec nginx-test ls /usr/share/nginx/html/
50x.html
index.html
test.txt #有了
[root@docker 7]# ls /var/lib/docker/volumes/nginx-vol/_data/
50x.html index.html test.txt #成功
#清理容器進程
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e74fb1640742 nginx "nginx -g 'daemon of…" 8 minutes ago Up 8 minutes 80/tcp nginx-test
[root@docker 7]# docker stop nginx-test
nginx-test
[root@docker 7]# docker rm nginx-test
nginx-test
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker 7]# ls /var/lib/docker/volumes/nginx-vol/_data/
50x.html index.html test.txt #清理容器后,掛載的卷的數據仍舊存在
#重新啟動鏡像nginx的容器進程
[root@docker 7]# docker run -dit --name nginx-test -p 88:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
b5e0bfc639087bdd4998065e457eda837c042cfb5e9cf3c044a11c97280e7270
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b5e0bfc63908 nginx "nginx -g 'daemon of…" 15 seconds ago Up 14 seconds 0.0.0.0:88->80/tcp nginx-test
特別提示:
docker run的-p參數:指定端口的映射,88:80的意思就是將宿主機88端口的訪問映射到容器進程的80端口
現在我們通過瀏覽器訪問宿主機的88端口,進而訪問容器進程的80端口
#在數據卷nginx-vol里換一個網頁在訪問
[root@docker 7]# rm -rf /var/lib/docker/volumes/nginx-vol/_data/
50x.html index.html test.txt
[root@docker 7]# rm -rf /var/lib/docker/volumes/nginx-vol/_data/*
[root@docker 7]# echo "welcome to yunjisuan" > /var/lib/docker/volumes/nginx-vol/_data/index.html
現在我們在啟動一個鏡像nginx的進程,讓兩個nginx的容器進程公用一個數據卷nginx-vol
[root@docker 7]# docker run -dit --name nginx-test2 -p 89:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
f1373f38c6cda722f151f06fc06cd6fccf62bc042850c6481ddb74c5336377be
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1373f38c6cd nginx "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:89->80/tcp nginx-test2
b5e0bfc63908 nginx "nginx -g 'daemon of…" 17 minutes ago Up 17 minutes 0.0.0.0:88->80/tcp nginx-test
我們用瀏覽器訪問docker宿主機的89端口
4.1.2 Bind Mounts
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1373f38c6cd nginx "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes 0.0.0.0:89->80/tcp nginx-test2
b5e0bfc63908 nginx "nginx -g 'daemon of…" 24 minutes ago Up 24 minutes 0.0.0.0:88->80/tcp nginx-test
[root@docker 7]# docker run -dit --name nginx-test3 -p 90:80 --mount type=bind,src=/var/lib/docker/volumes/nginx-vol/_data,dst=/usr/share/nginx/html nginx
270b609a9e2ec53c3b0a9250f2f8d175e21748ac8ebe9e4c0f9897e72a9b3843
[root@docker 7]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
270b609a9e2e nginx "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:90->80/tcp nginx-test3
f1373f38c6cd nginx "nginx -g 'daemon of…" 9 minutes ago Up 9 minutes 0.0.0.0:89->80/tcp nginx-test2
b5e0bfc63908 nginx "nginx -g 'daemon of…" 26 minutes ago Up 26 minutes 0.0.0.0:88->80/tcp nginx-test
我們用瀏覽器訪問docker宿主機的90端口
特別提示:
bind mounts可以掛載宿主機上的任意目錄,而volume先得創建后才能掛載
4.2 實戰容器部署LNMP網站平台
首先我們下載一個wordpress博客
wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz
4.2.1 創建MySQL數據庫容器
#下載MySQL5.6版本鏡像
[root@docker ~]# docker pull mysql:5.6
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 649dcb69b782 3 days ago 109MB
mysql 5.6 97fdbdd65c6a 10 days ago 256MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
#創建一個自定義網絡(docker自定義網絡下一節再講)
[root@docker ~]# docker network create lnmp
b02d8652022382f21780ee4935f472689883b64389ae120174268de57ec03e4e
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
29e8c90dbd80 bridge bridge local
f11e598312bd host host local
b02d86520223 lnmp bridge local #有了(默認驅動為網橋)
3978eff69b11 none null local
#啟動MySQL數據庫容器
[root@docker ~]# docker run -dit --name lnmp_mysql --network lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 --character-set-server=utf8
07bd252ec637324683514c6f27ba0beb552d9c1044a60c2dbb1cb3d2aeba807b
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07bd252ec637 mysql:5.6 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp lnmp_mysql
特別提示:
- 自定義網絡lnmp如果不提前創建的話,在啟動容器進程時會報錯
- 如果沒有提前pull好mysql:5.6那么容器在啟動時會自動下載對應鏡像
- 如果沒有提前docker volume create mysql-vol,那么容器啟動時會自動創建
#查看容器lnmp_mysql的日志輸出
[root@docker ~]# docker logs lnmp_mysql
#查看容器里啟動的進程
[root@docker ~]# docker top lnmp_mysql
UID PID PPID C STIME TTY TIME CMD
polkitd 96252 96240 0 22:58 pts/0 00:00:01 mysqld --character-set-server=utf8
4.2.2 向容器里的Mysql創建一個庫
[root@docker ~]# docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'
Warning: Using a password on the command line interface can be insecure.
4.2.3 在docker宿主機上安裝mysql的客戶端通過端口映射訪問容器內的mysql
因為已經將mysql容器的3306端口映射到了docker宿主機的3306,因此我們訪問本地即可
#安裝mysql客戶端
[root@docker ~]# yum -y install mysql
#查看本機IP地址
[root@docker ~]# hostname -I | xargs -n1 | head -1
192.168.200.142
#遠程方式連接docker宿主機的3306端口
[root@docker ~]# mysql -h192.168.200.142 -P3306 -uroot -p123123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.40 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wp | #已經創建wp庫了
+--------------------+
4 rows in set (0.01 sec)
4.2.4 創建nginx+PHP環境容器
#創建一個網頁目錄
[root@docker ~]# mkdir -p /app/wwwroot
[root@docker ~]# ll -d /app/wwwroot
drwxr-xr-x 2 root root 6 7月 8 00:22 /app/wwwroot
#下載richarvey/nginx-php-fpm鏡像
[root@docker ~]# docker pull richarvey/nginx-php-fpm
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
richarvey/nginx-php-fpm latest 26c0e6f09c52 2 days ago 300MB
nginx latest 649dcb69b782 3 days ago 109MB
mysql 5.6 97fdbdd65c6a 10 days ago 256MB
centos latest 49f7960eb7e4 4 weeks ago 200MB
#啟動richarvey/nginx-php-fpm鏡像的容器
[root@docker ~]# docker run -dit --name lnmp_web --network lnmp -p 88:80 --mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1ab26792a73c richarvey/nginx-php-fpm "docker-php-entrypoi…" 4 seconds ago Up 3 seconds 443/tcp, 9000/tcp, 0.0.0.0:88->80/tcp lnmp_web
07bd252ec637 mysql:5.6 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp lnmp_mysql
4.2.5 解壓wordpress到網頁目錄/app/wwwroot下
[root@docker ~]# tar xf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot/
[root@docker ~]# cd /app/wwwroot/
[root@docker wwwroot]# ls
wordpress
4.2.6 博客wordpress訪問測試
通過瀏覽器進行docker宿主機的88端口的訪問測試
http://IP:88/wordpress
特別提示:
如果同學們在訪問時,出現以下情況
#如果出現連接不上的情況,那么請按順序執行以下命令一遍
[root@docker wwwroot]# systemctl stop firewalld
[root@docker wwwroot]# systemctl stop iptables.service
Failed to stop iptables.service: Unit iptables.service not loaded.
[root@docker wwwroot]# iptables -F
[root@docker wwwroot]# iptables -P FORWARD ACCEPT
[root@docker wwwroot]# iptables -P INPUT ACCEPT
[root@docker wwwroot]# iptables -P OUTPUT ACCEPT
如果沒有意外此時訪問瀏覽器,就可出現下述內容
特別提示:
如果多次連續訪問同一網頁,那么瀏覽器有可能默認去掉指定的端口
因此,若訪問不到,請查看是否指定了88端口