容器自動化(一):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-releaseCentOS Linux release 7.5.1804 (Core)[root@Docker ~]# uname -r3.10.0-862.3.3.el7.x86_64
關閉防火牆和selinux
[root@Docker ~]# systemctl stop firewalld[root@Docker ~]# systemctl disable firewalld[root@Docker ~]# setenforce 0setenforce: 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 versionClient:Version: 1.13.1API version: 1.26Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64Go version: go1.9.4Git commit: 94f4240/1.13.1Built: Fri May 18 15:44:33 2018OS/Arch: linux/amd64Server:Version: 1.13.1API version: 1.26 (minimum version 1.12)Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64Go version: go1.9.4Git commit: 94f4240/1.13.1Built: Fri May 18 15:44:33 2018OS/Arch: linux/amd64Experimental: false
2.4 Docker安裝:CE社區版
首先清理掉yum安裝的docker標准版
這里有兩種方式
#第一種清理docker方法[root@Docker ~]# yum -y remove docker#第二種清理docker方法[root@Docker ~]# yum history list #查看yum安裝的歷史列表已加載插件:fastestmirrorID | 登錄用戶 | 日期和時間 | 操作 | 變更數-------------------------------------------------------------------------------6 | root <root> | 2018-07-02 22:30 | Install | 17 EE #這次就是安裝的docker5 | root <root> | 2018-07-02 20:08 | I, U | 604 | root <root> | 2018-07-03 03:54 | Install | 933 | root <root> | 2018-07-03 03:53 | Install | 12 | root <root> | 2018-07-03 03:53 | Install | 11 | 系統 <空> | 2018-07-03 03:46 | Install | 313history 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 @baseScriptlet 輸出: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 CurrentDload Upload Total Spent Left Speed100 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-ceAPI version: 1.37Go version: go1.9.5Git commit: 9ee9f40Built: Thu Apr 26 07:20:16 2018OS/Arch: linux/amd64Experimental: falseOrchestrator: swarmServer:Engine:Version: 18.03.1-ceAPI version: 1.37 (minimum version 1.12)Go version: go1.9.5Git commit: 9ee9f40Built: Thu Apr 26 07:23:58 2018OS/Arch: linux/amd64Experimental: 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 centosNAME DESCRIPTION STARS OFFICIAL AUTOMATEDcentos The official build of CentOS. 4419 [OK]...以下省略無數行....特別說明:Name:鏡像的名字DESCRIPTION:描述STARS:星級(越高越好)OFFICIAL:是否是官方發布的AUTOMATED:是否自動化的
(2)查找星級多於100的centos鏡像
[root@docker ~]# docker search centos -f stars=100NAME DESCRIPTION STARS OFFICIAL AUTOMATEDcentos 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=100NAME DESCRIPTION STARS OFFICIAL AUTOMATEDcentos 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=100NAME DESCRIPTION STARS OFFICIAL AUTOMATEDhello-world Hello World! (an example of minimal Dockeriz… 572 [OK]#下載目標hello-world鏡像[root@docker ~]# docker pull hello-worldUsing default tag: latestlatest: Pulling from library/hello-world9bb5a5d4561a: Pull completeDigest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35dStatus: 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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos 7 49f7960eb7e4 4 weeks ago 200MBhello-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/bashwhile truedoecho "welcome"sleep 5done#創建Dockerfile配置文件,文件名稱必須為Dockerfile,第一個字母必須大寫[root@docker 7]# vim Dockerfile[root@docker 7]# cat DockerfileFROM 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.072kBStep 1/6 : FROM centos---> 49f7960eb7e4Step 2/6 : LABEL MAINTATNER="Mr.chen.com"---> Running in 2537e36ba496Removing intermediate container 2537e36ba496---> 1a932d4c7762Step 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---> 82c412669879Step 4/6 : ADD docker.sh /home/test/---> 8f092336a175Step 5/6 : RUN chmod +x /home/test/docker.sh---> Running in b034c6f7439fRemoving intermediate container b034c6f7439f---> f6587dbd78ddStep 6/6 : CMD ["/home/test/docker.sh"]---> Running in cd13edcd6632Removing intermediate container cd13edcd6632---> 58af3ad826d2Successfully built 58af3ad826d2 #構建成功Successfully tagged Mr.chen/centos7:1[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos7 1 58af3ad826d2 57 seconds ago 200MB #TAG為1centos 7 49f7960eb7e4 4 weeks ago 200MBhello-world latest e38bc07ac18e 2 months ago 1.85kB
3.5 Docker命令:run
運行一個本地鏡像
[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos7 1 58af3ad826d2 26 minutes ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MBjdeathe/centos-ssh latest 563e45ee6e12 2 months ago 219MBhello-world latest e38bc07ac18e 2 months ago 1.85kB[root@docker ~]# docker run -d -it 58af3ad826d2093e4fb8b09c8082c4749ad34db09c58f43111e447bbaccdd527d558a12f4404特別提示: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 NAMES093e4fb8b09c 58af3ad826d2 "/bin/bash" 4 minutes ago Up 4 minutes gallant_ptolemy特別提示:STATUS:進程的狀態,UP表示正在運行中,EXIT表示已經退出了。
3.7 Docker命令:attach
從本地系統中切入到某個STATUS狀態是UP的鏡像進程里
[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES093e4fb8b09c 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 NAMES093e4fb8b09c 58af3ad826d2 "/bin/bash" 9 minutes ago Exited (127) 11 seconds ago gallant_ptolemy
3.8 Docker命令:stop
用於停止一個正在運行着的容器進程
[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES093e4fb8b09c 58af3ad826d2 "/bin/bash" 12 minutes ago Exited (127) 3 minutes ago gallant_ptolemy#再次在后台啟動一個鏡像[root@docker ~]# docker run -d -it 58af3ad826d2 /bin/bashceb6682bd574a78d0072121c095ba5f22569fa46c2ec00f203f4b0a988cb75a5[root@docker ~]# docker ps -a #增加了一個容器進程CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESceb6682bd574 58af3ad826d2 "/bin/bash" 3 seconds ago Up 2 seconds affectionate_agnesi093e4fb8b09c 58af3ad826d2 "/bin/bash" 12 minutes ago Exited (127) 3 minutes ago gallant_ptolemy#停止一個運行着的容器進程[root@docker ~]# docker stop ceb6682bd574ceb6682bd574[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Exited (137) 13 seconds ago affectionate_agnesi093e4fb8b09c 58af3ad826d2 "/bin/bash" 14 minutes ago Exited (127) 5 minutes ago gallant_ptolemy
3.9 Docker命令:start
用於啟動一個已經停止了的容器進程
[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Exited (137) 13 seconds ago affectionate_agnesi093e4fb8b09c 58af3ad826d2 "/bin/bash" 14 minutes ago Exited (127) 5 minutes ago gallant_ptolemy[root@docker ~]# docker start ceb6682bd574ceb6682bd574[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Up 2 seconds affectionate_agnesi093e4fb8b09c 58af3ad826d2 "/bin/bash" 15 minutes ago Exited (127) 6 minutes ago gallant_ptolemy
3.10 Docker命令:rm
用於刪除一個已經停止了的容器進程
[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Up 2 seconds affectionate_agnesi093e4fb8b09c 58af3ad826d2 "/bin/bash" 15 minutes ago Exited (127) 6 minutes ago gallant_ptolemy[root@docker ~]# docker rm 093e4fb8b09c093e4fb8b09c[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESceb6682bd574 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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos7 1 58af3ad826d2 About an hour ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MBhello-world latest e38bc07ac18e 2 months ago 1.85kB[root@docker ~]# docker rmi -f e38bc07ac18e #-f 強制刪除(即便被占用)Untagged: hello-world:latestUntagged: hello-world@sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35dDeleted: sha256:e38bc07ac18ee64e6d59cf2eafcdddf9cec2364dfe129fe0af75f1b0194e0c96Deleted: sha256:2b8cbd0846c5aeaa7265323e7cf085779eaf244ccbdd982c4931aef9be0d2faf[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos7 1 58af3ad826d2 About an hour ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos 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 NAMESceb6682bd574 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 NAMES5af7d28b054e 58af3ad826d2 "/bin/bash" About a minute ago Up About a minute tender_dubinsky[root@docker ~]# docker attach 5af7d28b054e #切入容器進程[root@5af7d28b054e /]# lsbin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var[root@5af7d28b054e /]# mkdir yunjisuan #在容器進程里創建yunjisuan目錄[root@5af7d28b054e /]# lsbin 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5af7d28b054e 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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos 2 5620f1cb9e8e 4 seconds ago 200MB #保存成功Mr.chen/centos7 1 58af3ad826d2 21 hours ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB#啟動新保存的鏡像[root@docker ~]# docker run -d -it 5620f1cb9e8e /bin/bashaeda0a4b7e85e940945ce7e318c9ef56ad720cfc9c586b1b0f79bbcd1cf232e6[root@docker ~]# docker ps -a #查看新鏡像的容器進程CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESaeda0a4b7e85 5620f1cb9e8e "/bin/bash" 3 seconds ago Up 3 seconds zealous_goldstine5af7d28b054e 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESaeda0a4b7e85 5620f1cb9e8e "/bin/bash" 6 minutes ago Up 4 seconds zealous_goldstine5af7d28b054e 58af3ad826d2 "/bin/bash" 13 minutes ago Exited (0) 11 minutes ago tender_dubinsky[root@docker ~]# docker exec aeda0a4b7e85 ls /tmp #查看容器進程里的/tmp目錄下所有內容ks-script-3QMvMiyum.log[root@docker ~]# docker exec aeda0a4b7e85 ls -d /yunjisuan #查看容器進程里/yunjisuan目錄/yunjisuan
3.14 Docker命令:cp
用於在容器進程和本地系統之間復制文件
[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESaeda0a4b7e85 5620f1cb9e8e "/bin/bash" 9 minutes ago Up 2 minutes zealous_goldstine5af7d28b054e 58af3ad826d2 "/bin/bash" 16 minutes ago Exited (0) 14 minutes ago tender_dubinsky[root@docker ~]# docker exec aeda0a4b7e85 ls /tmp #向容器進程發布命令ks-script-3QMvMiyum.log[root@docker ~]# docker cp aeda0a4b7e85:/tmp/yum.log . #將指定容器進程的/tmp/yum.log復制到當前目錄下[root@docker ~]# lsanaconda-ks.cfg dockerfile nohup.out ping.out yum.log #已經復制過來了[root@docker ~]# docker cp anaconda-ks.cfg aeda0a4b7e85:/tmp/ #將本地文件復制到容器進程里[root@docker ~]# docker exec aeda0a4b7e85 ls /tmpanaconda-ks.cfg #復制成功ks-script-3QMvMiyum.log
3.15 Docker命令:create
用於創建一個容器進程,但是並不啟動它
[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos 2 5620f1cb9e8e 22 minutes ago 200MBMr.chen/centos7 1 58af3ad826d2 22 hours ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker ~]# docker create -it 5620f1cb9e8e #創建一個鏡像的容器進程,但不直接啟動6040b7b6decee3701444af0e6258f7af506e2e1bed4967e9fa5d67fe9bd599e8[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6040b7b6dece 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6040b7b6dece 5620f1cb9e8e "/bin/bash" 17 seconds ago Up 1 second nifty_yalow5af7d28b054e 58af3ad826d2 "/bin/bash" 26 minutes ago Exited (0) 23 minutes ago tender_dubinsky
3.16 Docker命令:diff
查看容器進程與源鏡像做對比,發生了改變的文件或文件夾
[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos 2 5620f1cb9e8e 11 hours ago 200MBMr.chen/centos7 1 58af3ad826d2 32 hours ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker ~]# docker run -d -it 5620f1cb9e8e #啟動一個鏡像的容器進程ab06a9794e45ca35ab5f4594d630ecbe3527814233cc004d4deb8aafde2906f8[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESab06a9794e45 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]# ls1 10 2 3 4 5 6 7 8 9[root@ab06a9794e45 yunjisuan]# exit #退出容器進程exit[root@docker ~]# docker diff ab06a9794e45 #查看容器進程的變化C /root/.bash_historyC /yunjisuanA /yunjisuan/1A /yunjisuan/10A /yunjisuan/2A /yunjisuan/3A /yunjisuan/4A /yunjisuan/5A /yunjisuan/6A /yunjisuan/7A /yunjisuan/8A /yunjisuan/9
3.17 Docker命令:events
時時監測容器的變化情況
[root@docker ~]# docker events2018-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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESab06a9794e45 5620f1cb9e8e "/bin/bash" About an hour ago Up About an hour confident_snyder[root@docker ~]# docker export ab06a9794e45 > test.tar #將容器進程導出成一個tar包[root@docker ~]# lsanaconda-ks.cfg dockerfile nohup.out ping.out test.tar yum.log
3.19 Docker命令:import
用於將export導出的文件系統創建為一個鏡像
[root@docker ~]# lsanaconda-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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos 3 745606e08231 4 seconds ago 200MBMr.chen/centos 2 5620f1cb9e8e 13 hours ago 200MBMr.chen/centos7 1 58af3ad826d2 34 hours ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB
3.20 Docker命令:history
用於查看一個鏡像的歷史修改紀錄
[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos 3 745606e08231 4 seconds ago 200MBMr.chen/centos 2 5620f1cb9e8e 13 hours ago 200MBMr.chen/centos7 1 58af3ad826d2 34 hours ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker ~]# docker history 745606e08231IMAGE CREATED CREATED BY SIZE COMMENT745606e08231 6 minutes ago 200MB Imported from -[root@docker ~]# docker history 5620f1cb9e8eIMAGE CREATED CREATED BY SIZE COMMENT5620f1cb9e8e 13 hours ago /bin/bash 27B58af3ad826d2 34 hours ago /bin/sh -c #(nop) CMD ["/home/test/docker.s… 0Bf6587dbd78dd 34 hours ago /bin/sh -c chmod +x /home/test/docker.sh 57B8f092336a175 34 hours ago /bin/sh -c #(nop) ADD file:84ec58f8405b16017… 57B82c412669879 34 hours ago /bin/sh -c ln -sfv /usr/share/zoneinfo/Asia/… 33B1a932d4c7762 34 hours ago /bin/sh -c #(nop) LABEL MAINTATNER=Mr.chen.… 0B49f7960eb7e4 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 infoContainers: 1 #容器進程1個Running: 1 #正在運行狀態的容器1個Paused: 0Stopped: 0Images: 8 #一共有8個鏡像Server Version: 18.03.1-ceStorage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:Volume: localNetwork: bridge host macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslogSwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88runc version: 4fc53a81fb7c994640722ac585fa9ca548971871init version: 949e6faSecurity Options:seccompProfile: defaultKernel Version: 3.10.0-862.3.3.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 974.6MiBName: dockerID: IZLC:3CEK:YWIH:CEWB:SHHI:BUAY:B3I5:GGN6:BW4E:4O2Z:FVAD:DMPIDocker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:127.0.0.0/8Live Restore Enabled: false
3.22 Docker命令:inspect
查看某個鏡像的詳細信息
[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEMr.chen/centos 3 745606e08231 12 minutes ago 200MBMr.chen/centos 2 5620f1cb9e8e 13 hours ago 200MBMr.chen/centos7 1 58af3ad826d2 34 hours ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESab06a9794e45 5620f1cb9e8e "/bin/bash" 2 hours ago Up 2 hours confident_snyder[root@docker ~]# docker kill ab06a9794e45ab06a9794e45[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESab06a9794e45 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.072kBStep 1/6 : FROM centos---> 49f7960eb7e4Step 2/6 : LABEL MAINTATNER="Mr.chen.com"---> Running in 9c71d8d0c8d9Removing intermediate container 9c71d8d0c8d9---> c719db6a38bbStep 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---> c80e63f73145Step 4/6 : ADD docker.sh /home/test/---> fa1179b1ab73Step 5/6 : RUN chmod +x /home/test/docker.sh---> Running in 5a0243641c71Removing intermediate container 5a0243641c71---> f4fe4b82300cStep 6/6 : CMD ["/home/test/docker.sh"]---> Running in f259134ac5beRemoving intermediate container f259134ac5be---> cc87aef92b66Successfully built cc87aef92b66Successfully tagged test:1[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 4 seconds ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB#save導出test:1這個鏡像(也可以用id號)[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 51 seconds ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker 7]# docker save test:1 > test.tar[root@docker 7]# lsDockerfile docker.sh test.tar
3.25 Docker命令:load
用於將save導出到本地的tar包,重新加載為鏡像(和源鏡像的名字標識完全一樣)
[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 2 minutes ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker 7]# docker rmi test:1 #刪除鏡像test:1Untagged: test:1Deleted: sha256:cc87aef92b667fa2ef8c6f00fc2c598931adcc137e569a5ee77626e98845c66fDeleted: sha256:f4fe4b82300c163350ca7aea20d713246b34861e57778482a8536b189eb15328Deleted: sha256:a49455ce240e931703525ab8bd0fd46a08283681e54b412cc2ae3ff98c346847Deleted: sha256:fa1179b1ab73c564f85ab15038abc27248da914bf61f835432b1b3e9660dac3fDeleted: sha256:c9686c8c97ed841d519023cc7ce6a7e8b6c6af51d2d85084dcf37b072933f353Deleted: sha256:c80e63f73145c443d5fac77b166b68b0865167ce3e17b9207540bc926276850aDeleted: sha256:0794cb3a1f33a60e86ffd252d7db298799b44c846efe6b0aef3e445db767d662Deleted: sha256:c719db6a38bb83756c8e831694268681ece2ee2e8ae6ecad12bd810997f61b9e[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker 7]# docker load < test.tar #將之前test:1這個鏡像的save備份導入系統cdba4ed54f31: Loading layer [==================================================>] 2.048kB/2.048kB0e990db11d5d: Loading layer [==================================================>] 3.584kB/3.584kBe57b2692ffad: Loading layer [==================================================>] 3.072kB/3.072kBLoaded image: test:1[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 2 minutes ago 200MB #和原來的鏡像完全一樣centos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB
3.26 Docker命令:logs
用於輸出一個容器進程內的操作日志
[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 12 minutes ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@docker 7]# docker run -d -it test:116f9f6c9c699c649709b5643590c632f4c2e2f621de7dd1a6c480ae863761a98[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES16f9f6c9c699 test:1 "/home/test/docker.sh" 2 seconds ago Up 2 seconds adoring_noether[root@docker 7]# docker logs 16f9f6c9c699welcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcomewelcome[root@docker 7]# docker logs --tail 5 16f9f6c9c699 #只顯示容器日志的后5行welcomewelcomewelcomewelcomewelcome
3.27 Docker命令:pause && unpause
用於將一個或多個容器的進程暫停和恢復
[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES16f9f6c9c699 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES16f9f6c9c699 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES16f9f6c9c699 test:1 "/home/test/docker.sh" 5 minutes ago Up 5 minutes adoring_noether
3.28 Docker命令:port
用於列出一個容器的端口映射及協議
[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 24 minutes ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6321c3a3481f test:1 "/home/test/docker.sh" 5 seconds ago Up 4 seconds 0.0.0.0:2222->22/tcp romantic_elbakyan16f9f6c9c699 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6321c3a3481f test:1 "/home/test/docker.sh" 11 minutes ago Up 11 minutes 0.0.0.0:2222->22/tcp romantic_elbakyan16f9f6c9c699 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6321c3a3481f test:1 "/home/test/docker.sh" 11 minutes ago Up 11 minutes 0.0.0.0:2222->22/tcp Mr.chen16f9f6c9c699 test:1 "/home/test/docker.sh" 22 minutes ago Up 22 minutes adoring_noether
3.30 Docker命令:restart
重啟一個容器進程
[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6321c3a3481f test:1 "/home/test/docker.sh" 15 minutes ago Up 15 minutes 0.0.0.0:2222->22/tcp Mr.chen16f9f6c9c699 test:1 "/home/test/docker.sh" 26 minutes ago Up 26 minutes adoring_noether[root@docker 7]# docker restart 6321c3a3481f6321c3a3481f[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6321c3a3481f test:1 "/home/test/docker.sh" 15 minutes ago Up 2 seconds 0.0.0.0:2222->22/tcp Mr.chen16f9f6c9c699 test:1 "/home/test/docker.sh" 26 minutes ago Up 26 minutes adoring_noether
3.31 Docker命令:stats
用於時時輸出容器的資源使用情況
[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6321c3a3481f test:1 "/home/test/docker.sh" 17 minutes ago Up About a minute 0.0.0.0:2222->22/tcp Mr.chen16f9f6c9c699 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-streamCONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS6321c3a3481f Mr.chen 0.00% 292KiB / 974.6MiB 0.03% 648B / 0B 0B / 0B 2
3.32 Docker命令:tag
用於從一個指定的鏡像創建另外一個鏡像
[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 About an hour ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker 7]# docker tag test:1 test:2 #我們可以指定名字:標志來創建[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 About an hour ago 200MBtest 2 cc87aef92b66 About an hour ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker 7]# docker rmi test:2Untagged: test:2[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 About an hour ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker 7]# docker tag cc87aef92b66 test:2 #我們也可以指定image id來創建[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtest 1 cc87aef92b66 About an hour ago 200MBtest 2 cc87aef92b66 About an hour ago 200MBcentos 7 49f7960eb7e4 4 weeks ago 200MBcentos latest 49f7960eb7e4 4 weeks ago 200MB
3.33 Docker命令:top
用於顯示指定容器的進程信息
[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6321c3a3481f test:1 "/home/test/docker.sh" 28 minutes ago Up 12 minutes 0.0.0.0:2222->22/tcp Mr.chen16f9f6c9c699 test:1 "/home/test/docker.sh" 39 minutes ago Up 39 minutes adoring_noether[root@docker 7]# docker top 6321c3a3481fUID PID PPID C STIME TTY TIME CMDroot 89798 89784 0 11:55 pts/0 00:00:00 /bin/bash /home/test/docker.shroot 90265 89798 0 12:07 pts/0 00:00:00 sleep 5
3.34 Docker命令:update
用於調整一個或多個容器的啟動配置
[root@docker 7]# docker update --helpUsage: docker update [OPTIONS] CONTAINER [CONTAINER...]Update configuration of one or more containersOptions:--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 versionClient:Version: 18.03.1-ceAPI version: 1.37Go version: go1.9.5Git commit: 9ee9f40Built: Thu Apr 26 07:20:16 2018OS/Arch: linux/amd64Experimental: falseOrchestrator: swarmServer:Engine:Version: 18.03.1-ceAPI version: 1.37 (minimum version 1.12)Go version: go1.9.5Git commit: 9ee9f40Built: Thu Apr 26 07:23:58 2018OS/Arch: linux/amd64Experimental: false#監聽容器的退出狀態並返回狀態碼[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6321c3a3481f test:1 "/home/test/docker.sh" 33 minutes ago Up 17 minutes 0.0.0.0:2222->22/tcp Mr.chen16f9f6c9c699 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-volnginx-vol[root@docker 7]# docker volume lsDRIVER VOLUME NAMElocal 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 nginxUsing default tag: latestlatest: Pulling from library/nginx683abbb4ea60: Pull complete6ff57cbc007a: Pull complete162f7aebbf40: Pull completeDigest: sha256:2cf71a9320ea65566c0738e87400407aaffd8dd11a411ceb2f2b585ad513469eStatus: Downloaded newer image for nginx:latest[root@docker 7]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 649dcb69b782 2 days ago 109MBcentos latest 49f7960eb7e4 4 weeks ago 200MB[root@docker 7]# docker run -dit --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginxe74fb1640742a6a535d825ea223c18809b495532a9c9d6bd0b7ca8c4775261dc特別說明:--name:容器的名字--mount:掛載src:源卷的名字dst:掛載到容器中的路徑[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe74fb1640742 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.htmlindex.htmltest.txt #有了[root@docker 7]# ls /var/lib/docker/volumes/nginx-vol/_data/50x.html index.html test.txt #成功#清理容器進程[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe74fb1640742 nginx "nginx -g 'daemon of…" 8 minutes ago Up 8 minutes 80/tcp nginx-test[root@docker 7]# docker stop nginx-testnginx-test[root@docker 7]# docker rm nginx-testnginx-test[root@docker 7]# docker ps -aCONTAINER 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 nginxb5e0bfc639087bdd4998065e457eda837c042cfb5e9cf3c044a11c97280e7270[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb5e0bfc63908 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 nginxf1373f38c6cda722f151f06fc06cd6fccf62bc042850c6481ddb74c5336377be[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf1373f38c6cd nginx "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:89->80/tcp nginx-test2b5e0bfc63908 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf1373f38c6cd nginx "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes 0.0.0.0:89->80/tcp nginx-test2b5e0bfc63908 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 nginx270b609a9e2ec53c3b0a9250f2f8d175e21748ac8ebe9e4c0f9897e72a9b3843[root@docker 7]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES270b609a9e2e nginx "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:90->80/tcp nginx-test3f1373f38c6cd nginx "nginx -g 'daemon of…" 9 minutes ago Up 9 minutes 0.0.0.0:89->80/tcp nginx-test2b5e0bfc63908 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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 649dcb69b782 3 days ago 109MBmysql 5.6 97fdbdd65c6a 10 days ago 256MBcentos latest 49f7960eb7e4 4 weeks ago 200MB#創建一個自定義網絡(docker自定義網絡下一節再講)[root@docker ~]# docker network create lnmpb02d8652022382f21780ee4935f472689883b64389ae120174268de57ec03e4e[root@docker ~]# docker network lsNETWORK ID NAME DRIVER SCOPE29e8c90dbd80 bridge bridge localf11e598312bd host host localb02d86520223 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=utf807bd252ec637324683514c6f27ba0beb552d9c1044a60c2dbb1cb3d2aeba807b[root@docker ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES07bd252ec637 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_mysqlUID PID PPID C STIME TTY TIME CMDpolkitd 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 -1192.168.200.142#遠程方式連接docker宿主機的3306端口[root@docker ~]# mysql -h192.168.200.142 -P3306 -uroot -p123123Welcome to the MariaDB monitor. Commands end with ; or \g.Your MySQL connection id is 4Server 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/wwwrootdrwxr-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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEricharvey/nginx-php-fpm latest 26c0e6f09c52 2 days ago 300MBnginx latest 649dcb69b782 3 days ago 109MBmysql 5.6 97fdbdd65c6a 10 days ago 256MBcentos 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1ab26792a73c 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_web07bd252ec637 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]# lswordpress
4.2.6 博客wordpress訪問測試
通過瀏覽器進行docker宿主機的88端口的訪問測試
http://IP:88/wordpress
特別提示:
如果同學們在訪問時,出現以下情況

#如果出現連接不上的情況,那么請按順序執行以下命令一遍[root@docker wwwroot]# systemctl stop firewalld[root@docker wwwroot]# systemctl stop iptables.serviceFailed 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端口
