容器自動化(一):docker基礎(上)


容器自動化(一):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:多版本多種類系統與軟件

QQ截圖20180702193450.png-206.3kB

1.3.2 場景2: 環境

QQ截圖20180702215043.png-296.7kB

1.3.3 場景3: 分發

QQ截圖20180702215306.png-235.2kB

二,Docker的安裝

2.1 安裝環境

最小化安裝Centos7.5

  1. [root@Docker ~]# cat /etc/redhat-release
  2. CentOS Linux release 7.5.1804 (Core)
  3. [root@Docker ~]# uname -r
  4. 3.10.0-862.3.3.el7.x86_64

關閉防火牆和selinux

  1. [root@Docker ~]# systemctl stop firewalld
  2. [root@Docker ~]# systemctl disable firewalld
  3. [root@Docker ~]# setenforce 0
  4. 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 文件即可(不需要將其他文件仍子目錄里)
確保虛擬機能正常上網

  1. [root@Docker ~]# yum -y install docker
  2. [root@Docker ~]# systemctl start docker #啟動docker進程
  3. [root@Docker ~]# systemctl enable docker #加入docker開機啟動
  4. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
  5. [root@Docker ~]# docker ps #查看封裝在docker鏡像中的正在運行的鏡像進程
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. [root@Docker ~]# docker version
  8. Client:
  9. Version: 1.13.1
  10. API version: 1.26
  11. Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
  12. Go version: go1.9.4
  13. Git commit: 94f4240/1.13.1
  14. Built: Fri May 18 15:44:33 2018
  15. OS/Arch: linux/amd64
  16. Server:
  17. Version: 1.13.1
  18. API version: 1.26 (minimum version 1.12)
  19. Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
  20. Go version: go1.9.4
  21. Git commit: 94f4240/1.13.1
  22. Built: Fri May 18 15:44:33 2018
  23. OS/Arch: linux/amd64
  24. Experimental: false

2.4 Docker安裝:CE社區版

首先清理掉yum安裝的docker標准版
這里有兩種方式

  1. #第一種清理docker方法
  2. [root@Docker ~]# yum -y remove docker
  3. #第二種清理docker方法
  4. [root@Docker ~]# yum history list #查看yum安裝的歷史列表
  5. 已加載插件:fastestmirror
  6. ID | 登錄用戶 | 日期和時間 | 操作 | 變更數
  7. -------------------------------------------------------------------------------
  8. 6 | root <root> | 2018-07-02 22:30 | Install | 17 EE #這次就是安裝的docker
  9. 5 | root <root> | 2018-07-02 20:08 | I, U | 60
  10. 4 | root <root> | 2018-07-03 03:54 | Install | 93
  11. 3 | root <root> | 2018-07-03 03:53 | Install | 1
  12. 2 | root <root> | 2018-07-03 03:53 | Install | 1
  13. 1 | 系統 <空> | 2018-07-03 03:46 | Install | 313
  14. history list
  15. [root@Docker ~]# yum history info 6 #查看yum歷史安裝ID為6的安裝信息
  16. 已加載插件:fastestmirror
  17. 事務 ID 6
  18. 起始時間 Mon Jul 2 22:30:11 2018
  19. 啟動 RPM 數據庫 409:3aba29f1d5b7e2d7ff3ed9f169ec4a2225595390
  20. 結束時間 22:30:27 2018 16 秒)
  21. 結束 RPM 數據庫 426:28338758ec6a2332cabb3a1439336bd451c52366
  22. 用戶 root <root>
  23. 返回碼 成功
  24. 命令行 -y install docker
  25. 事務完成屬主:
  26. 已安裝 rpm-4.11.3-32.el7.x86_64 @anaconda
  27. 已安裝 yum-3.4.3-158.el7.centos.noarch @anaconda
  28. 已安裝 yum-plugin-fastestmirror-1.1.31-45.el7.noarch @anaconda
  29. 已變更的包:
  30. 依賴安裝 audit-libs-python-2.8.1-3.el7.x86_64 @base
  31. 依賴安裝 checkpolicy-2.5-6.el7.x86_64 @base
  32. 依賴安裝 container-selinux-2:2.55-1.el7.noarch @extras
  33. 依賴安裝 container-storage-setup-0.9.0-1.rhel75.gite0997c3.el7.noarch @extras
  34. 安裝 docker-2:1.13.1-63.git94f4240.el7.centos.x86_64 @extras
  35. 依賴安裝 docker-client-2:1.13.1-63.git94f4240.el7.centos.x86_64 @extras
  36. 依賴安裝 docker-common-2:1.13.1-63.git94f4240.el7.centos.x86_64 @extras
  37. 依賴安裝 libcgroup-0.41-15.el7.x86_64 @base
  38. 依賴安裝 libsemanage-python-2.5-11.el7.x86_64 @base
  39. 依賴安裝 oci-register-machine-1:0-6.git2b44233.el7.x86_64 @extras
  40. 依賴安裝 oci-systemd-hook-1:0.1.15-2.gitc04483d.el7.x86_64 @extras
  41. 依賴安裝 oci-umount-2:2.3.3-3.gite3c9055.el7.x86_64 @extras
  42. 依賴安裝 policycoreutils-python-2.5-22.el7.x86_64 @base
  43. 依賴安裝 python-IPy-0.75-6.el7.noarch @base
  44. 依賴安裝 setools-libs-3.3.8-2.el7.x86_64 @base
  45. 依賴安裝 skopeo-containers-1:0.1.29-3.dev.git7add6fc.el7.0.x86_64 @extras
  46. 依賴安裝 yajl-2.0.4-4.el7.x86_64 @base
  47. Scriptlet 輸出:
  48. 1 setsebool: SELinux is disabled.
  49. history info
  50. [root@Docker ~]# yum -y history undo 6 #進行yum安裝操作回退

特別提示:
yum的回退安裝在工作中很有用,請留心學習
接下來我們安裝Docker的CE社區版

  1. #安裝依賴包
  2. [root@Docker ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
  3. #添加docker的CE版本的yum源配置文件
  4. [root@Docker ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
  5. % Total % Received % Xferd Average Speed Time Time Time Current
  6. Dload Upload Total Spent Left Speed
  7. 100 2424 100 2424 0 0 2544 0 --:--:-- --:--:-- --:--:-- 2543
  8. [root@Docker ~]# ll /etc/yum.repos.d/docker-ce.repo
  9. -rw-r--r-- 1 root root 2424 7 2 23:00 /etc/yum.repos.d/docker-ce.repo
  10. #安裝CE版本的docker
  11. [root@Docker ~]# yum -y install docker-ce
  12. [root@Docker ~]# systemctl start docker #啟動docker
  13. [root@Docker ~]# systemctl enable docker #添加開機啟動
  14. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
  15. [root@Docker ~]# docker version #查看docker版本
  16. Client:
  17. Version: 18.03.1-ce
  18. API version: 1.37
  19. Go version: go1.9.5
  20. Git commit: 9ee9f40
  21. Built: Thu Apr 26 07:20:16 2018
  22. OS/Arch: linux/amd64
  23. Experimental: false
  24. Orchestrator: swarm
  25. Server:
  26. Engine:
  27. Version: 18.03.1-ce
  28. API version: 1.37 (minimum version 1.12)
  29. Go version: go1.9.5
  30. Git commit: 9ee9f40
  31. Built: Thu Apr 26 07:23:58 2018
  32. OS/Arch: linux/amd64
  33. Experimental: false

三,Docker的操作命令

3.0 添加docker國內鏡像源

在開始學習docker之前,我們首先要更改一下docker的默認源鏡像下載地址(默認是從國外下載,很慢),我們需要添加國內的源地址

  1. [root@docker ~]# cat /etc/docker/daemon.json
  2. {
  3. "registry-mirrors":[ "https://81l9w6xn.mirror.aliyuncs.com" ]
  4. }
  5. [root@docker ~]# systemctl daemon-reload
  6. [root@docker ~]# systemctl restart docker

3.1 Docker命令:search

用於從docker的官方公有鏡像倉庫查找鏡像

(1)查看Docker Hub上公開的centos鏡像

  1. [root@docker ~]# docker search centos
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. centos The official build of CentOS. 4419 [OK]
  4. ...以下省略無數行....
  5. 特別說明:
  6. Name:鏡像的名字
  7. DESCRIPTION:描述
  8. STARS:星級(越高越好)
  9. OFFICIAL:是否是官方發布的
  10. AUTOMATED:是否自動化的

(2)查找星級多於100的centos鏡像

  1. [root@docker ~]# docker search centos -f stars=100
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. centos The official build of CentOS. 4419 [OK]
  4. ansible/centos7-ansible Ansible on Centos7 114 [OK]
  5. 特別提示:
  6. /:符號用於分割作者名稱和鏡像名稱
  7. ansible/centos7-ansibleansible是作者名稱,centos7-ansible是鏡像名稱

(3)多條件查找--filter

  1. #查找官方發布的,星級大於100的centos鏡像
  2. [root@docker ~]# docker search centos --filter is-official=true --filter stars=100
  3. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  4. centos The official build of CentOS. 4419 [OK]

3.2 Docker命令:pull

用於從Docker Hub上下載公有鏡像

  1. #查找符合條件的hello-world鏡像
  2. [root@docker ~]# docker search hello-world --filter is-official=true --filter stars=100
  3. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  4. hello-world Hello World! (an example of minimal Dockeriz 572 [OK]
  5. #下載目標hello-world鏡像
  6. [root@docker ~]# docker pull hello-world
  7. Using default tag: latest
  8. latest: Pulling from library/hello-world
  9. 9bb5a5d4561a: Pull complete
  10. Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
  11. Status: Downloaded newer image for hello-world:latest #下載成功latest是標記tag
  12. #下載目標centos:7鏡像
  13. [root@docker 7]# docker pull centos:7 #網速不好的話,需要點時間耐心等待

3.3 Docker命令:images

用於本地鏡像的查看

  1. [root@docker ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. centos 7 49f7960eb7e4 4 weeks ago 200MB
  4. hello-world latest e38bc07ac18e 2 months ago 1.85kB
  5. 特別說明:
  6. REPOSITORY:鏡像倉庫(下邊羅列的都是本地已有鏡像名稱)
  7. TAG:鏡像的標記(為了區分同名鏡像)
  8. IMAGES ID:鏡像的ID
  9. CREATED:此鏡像的創建時間
  10. SIZE:此鏡像的大小

3.4 Docker命令:build

用於本地自定義鏡像的構建,需要創建Dockerfile文件(具體寫法后面會講,這里同學們先看)

  1. #創建Dockerfile文件的存儲目錄
  2. [root@docker ~]# mkdir -p /root/dockerfile/lib/centos/7
  3. [root@docker ~]# cd /root/dockerfile/lib/centos/7
  4. #創建docker.sh腳本
  5. [root@docker 7]# vim docker.sh
  6. [root@docker 7]# cat docker.sh
  7. #!/bin/bash
  8. while true
  9. do
  10. echo "welcome"
  11. sleep 5
  12. done
  13. #創建Dockerfile配置文件,文件名稱必須為Dockerfile,第一個字母必須大寫
  14. [root@docker 7]# vim Dockerfile
  15. [root@docker 7]# cat Dockerfile
  16. FROM centos #從centos源鏡像的基礎上進行構建
  17. LABEL MAINTATNER="Mr.chen.com" #作者的名稱
  18. RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #RUN:在鏡像構建過程中運行命令
  19. ADD docker.sh /home/test/ #從本地系統中把docker.sh文件添加到構建中的鏡像的/home/test/目錄下
  20. RUN chmod +x /home/test/docker.sh #在鏡像構建過程中運行命令
  21. CMD ["/home/test/docker.sh"] #構建鏡像完成時,最后執行的命令
  22. #根據Dockfile配置文件構建一個自定義鏡像
  23. [root@docker 7]# docker build -t Mr.chen/centos7:1 . #-t 指定鏡像名稱 :1 設定鏡像的tag標記
  24. Sending build context to Docker daemon 3.072kB
  25. Step 1/6 : FROM centos
  26. ---> 49f7960eb7e4
  27. Step 2/6 : LABEL MAINTATNER="Mr.chen.com"
  28. ---> Running in 2537e36ba496
  29. Removing intermediate container 2537e36ba496
  30. ---> 1a932d4c7762
  31. Step 3/6 : RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  32. ---> Running in 7890b38ae948
  33. '/etc/localtime' -> '/usr/share/zoneinfo/Asia/Shanghai'
  34. Removing intermediate container 7890b38ae948
  35. ---> 82c412669879
  36. Step 4/6 : ADD docker.sh /home/test/
  37. ---> 8f092336a175
  38. Step 5/6 : RUN chmod +x /home/test/docker.sh
  39. ---> Running in b034c6f7439f
  40. Removing intermediate container b034c6f7439f
  41. ---> f6587dbd78dd
  42. Step 6/6 : CMD ["/home/test/docker.sh"]
  43. ---> Running in cd13edcd6632
  44. Removing intermediate container cd13edcd6632
  45. ---> 58af3ad826d2
  46. Successfully built 58af3ad826d2 #構建成功
  47. Successfully tagged Mr.chen/centos7:1
  48. [root@docker 7]# docker images
  49. REPOSITORY TAG IMAGE ID CREATED SIZE
  50. Mr.chen/centos7 1 58af3ad826d2 57 seconds ago 200MB #TAG為1
  51. centos 7 49f7960eb7e4 4 weeks ago 200MB
  52. hello-world latest e38bc07ac18e 2 months ago 1.85kB

3.5 Docker命令:run

運行一個本地鏡像

  1. [root@docker ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. Mr.chen/centos7 1 58af3ad826d2 26 minutes ago 200MB
  4. centos 7 49f7960eb7e4 4 weeks ago 200MB
  5. centos latest 49f7960eb7e4 4 weeks ago 200MB
  6. jdeathe/centos-ssh latest 563e45ee6e12 2 months ago 219MB
  7. hello-world latest e38bc07ac18e 2 months ago 1.85kB
  8. [root@docker ~]# docker run -d -it 58af3ad826d2
  9. 093e4fb8b09c8082c4749ad34db09c58f43111e447bbaccdd527d558a12f4404
  10. 特別提示:
  11. docker run:運行一個指定的images id
  12. -d:放在后台運行
  13. -i:可以進行命令交互
  14. -t:制作一個偽終端用於登陸
  15. 58af3ad826d2:鏡像的ID,可以簡寫成58a

3.6 Docker命令:ps

查看已經運行的鏡像的進程

  1. [root@docker ~]# docker ps -a #查看所有運行的鏡像進程(包含退出的exit)
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 093e4fb8b09c 58af3ad826d2 "/bin/bash" 4 minutes ago Up 4 minutes gallant_ptolemy
  4. 特別提示:
  5. STATUS:進程的狀態,UP表示正在運行中,EXIT表示已經退出了。

3.7 Docker命令:attach

從本地系統中切入到某個STATUS狀態是UP的鏡像進程里

  1. [root@docker ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 093e4fb8b09c 58af3ad826d2 "/bin/bash" 4 minutes ago Up 4 minutes gallant_ptolemy
  4. [root@docker ~]# docker attach 093e4fb8b09c #切入到容器號為093e4fb8b09c的鏡像進程里
  5. [root@093e4fb8b09c /]# ls #已經進入容器里了
  6. bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
  7. [root@093e4fb8b09c /]# exit #退出容器
  8. exit
  9. [root@docker ~]# docker ps -a #容器的進程的STATUS已經處於EXIT狀態(之前是后台運行的,切入進去后執行exit就等於手動退出了)
  10. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  11. 093e4fb8b09c 58af3ad826d2 "/bin/bash" 9 minutes ago Exited (127) 11 seconds ago gallant_ptolemy

3.8 Docker命令:stop

用於停止一個正在運行着的容器進程

  1. [root@docker ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 093e4fb8b09c 58af3ad826d2 "/bin/bash" 12 minutes ago Exited (127) 3 minutes ago gallant_ptolemy
  4. #再次在后台啟動一個鏡像
  5. [root@docker ~]# docker run -d -it 58af3ad826d2 /bin/bash
  6. ceb6682bd574a78d0072121c095ba5f22569fa46c2ec00f203f4b0a988cb75a5
  7. [root@docker ~]# docker ps -a #增加了一個容器進程
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. ceb6682bd574 58af3ad826d2 "/bin/bash" 3 seconds ago Up 2 seconds affectionate_agnesi
  10. 093e4fb8b09c 58af3ad826d2 "/bin/bash" 12 minutes ago Exited (127) 3 minutes ago gallant_ptolemy
  11. #停止一個運行着的容器進程
  12. [root@docker ~]# docker stop ceb6682bd574
  13. ceb6682bd574
  14. [root@docker ~]# docker ps -a
  15. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  16. ceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Exited (137) 13 seconds ago affectionate_agnesi
  17. 093e4fb8b09c 58af3ad826d2 "/bin/bash" 14 minutes ago Exited (127) 5 minutes ago gallant_ptolemy

3.9 Docker命令:start

用於啟動一個已經停止了的容器進程

  1. [root@docker ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. ceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Exited (137) 13 seconds ago affectionate_agnesi
  4. 093e4fb8b09c 58af3ad826d2 "/bin/bash" 14 minutes ago Exited (127) 5 minutes ago gallant_ptolemy
  5. [root@docker ~]# docker start ceb6682bd574
  6. ceb6682bd574
  7. [root@docker ~]# docker ps -a
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. ceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Up 2 seconds affectionate_agnesi
  10. 093e4fb8b09c 58af3ad826d2 "/bin/bash" 15 minutes ago Exited (127) 6 minutes ago gallant_ptolemy

3.10 Docker命令:rm

用於刪除一個已經停止了的容器進程

  1. [root@docker ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. ceb6682bd574 58af3ad826d2 "/bin/bash" 2 minutes ago Up 2 seconds affectionate_agnesi
  4. 093e4fb8b09c 58af3ad826d2 "/bin/bash" 15 minutes ago Exited (127) 6 minutes ago gallant_ptolemy
  5. [root@docker ~]# docker rm 093e4fb8b09c
  6. 093e4fb8b09c
  7. [root@docker ~]# docker ps -a
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. ceb6682bd574 58af3ad826d2 "/bin/bash" 4 minutes ago Up About a minute affectionate_agnesi
  10. [root@docker ~]# docker rm ceb6682bd574 #注意運行中的容器進程需要先stop,才能刪除
  11. Error response from daemon: You cannot remove a running container ceb6682bd574a78d0072121c095ba5f22569fa46c2ec00f203f4b0a988cb75a5. Stop the container before attempting removal or force remove

3.11 Docker命令:rmi

用於刪除一個未用作容器啟動的本地鏡像

  1. [root@docker ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. Mr.chen/centos7 1 58af3ad826d2 About an hour ago 200MB
  4. centos 7 49f7960eb7e4 4 weeks ago 200MB
  5. centos latest 49f7960eb7e4 4 weeks ago 200MB
  6. hello-world latest e38bc07ac18e 2 months ago 1.85kB
  7. [root@docker ~]# docker rmi -f e38bc07ac18e #-f 強制刪除(即便被占用)
  8. Untagged: hello-world:latest
  9. Untagged: hello-world@sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
  10. Deleted: sha256:e38bc07ac18ee64e6d59cf2eafcdddf9cec2364dfe129fe0af75f1b0194e0c96
  11. Deleted: sha256:2b8cbd0846c5aeaa7265323e7cf085779eaf244ccbdd982c4931aef9be0d2faf
  12. [root@docker ~]# docker images
  13. REPOSITORY TAG IMAGE ID CREATED SIZE
  14. Mr.chen/centos7 1 58af3ad826d2 About an hour ago 200MB
  15. centos 7 49f7960eb7e4 4 weeks ago 200MB
  16. centos latest 49f7960eb7e4 4 weeks ago 200MB
  17. [root@docker ~]# docker rmi 58af3ad826d2 #但要注意,被用作容器啟動的鏡像是不能刪除的(需先rm刪除容器進程)
  18. Error response from daemon: conflict: unable to delete 58af3ad826d2 (cannot be forced) - image is being used by running container ceb6682bd574
  19. [root@docker ~]# docker rmi -f 58af3ad826d2 #強行刪除被容器進程占用的鏡像也是不行的
  20. Error response from daemon: conflict: unable to delete 58af3ad826d2 (cannot be forced) - image is being used by running container ceb6682bd574
  21. [root@docker ~]# docker ps -a #查看容器進程,被占用中
  22. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  23. ceb6682bd574 58af3ad826d2 "/bin/bash" 9 minutes ago Up 6 minutes affectionate_agnesi

3.12 Docker命令:commit

將一個更改過的容器進程的容器狀態保存為一個新的鏡像

  1. [root@docker ~]# docker ps -a #查看啟動的容器進程
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 5af7d28b054e 58af3ad826d2 "/bin/bash" About a minute ago Up About a minute tender_dubinsky
  4. [root@docker ~]# docker attach 5af7d28b054e #切入容器進程
  5. [root@5af7d28b054e /]# ls
  6. bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
  7. [root@5af7d28b054e /]# mkdir yunjisuan #在容器進程里創建yunjisuan目錄
  8. [root@5af7d28b054e /]# ls
  9. bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var yunjisuan
  10. [root@5af7d28b054e /]# exit #退出容器進程
  11. exit
  12. [root@docker ~]# docker ps -a
  13. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  14. 5af7d28b054e 58af3ad826d2 "/bin/bash" 2 minutes ago Exited (0) 4 seconds ago tender_dubinsky
  15. [root@docker ~]# docker commit 5af7d28b054e Mr.chen/centos:2 #將更改后的容器進程保存為一個新的鏡像
  16. sha256:5620f1cb9e8eac8ea79f95e6f5786f8503f6ac12428bd3e9dc8197a173e426b8
  17. [root@docker ~]# docker images
  18. REPOSITORY TAG IMAGE ID CREATED SIZE
  19. Mr.chen/centos 2 5620f1cb9e8e 4 seconds ago 200MB #保存成功
  20. Mr.chen/centos7 1 58af3ad826d2 21 hours ago 200MB
  21. centos 7 49f7960eb7e4 4 weeks ago 200MB
  22. centos latest 49f7960eb7e4 4 weeks ago 200MB
  23. #啟動新保存的鏡像
  24. [root@docker ~]# docker run -d -it 5620f1cb9e8e /bin/bash
  25. aeda0a4b7e85e940945ce7e318c9ef56ad720cfc9c586b1b0f79bbcd1cf232e6
  26. [root@docker ~]# docker ps -a #查看新鏡像的容器進程
  27. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  28. aeda0a4b7e85 5620f1cb9e8e "/bin/bash" 3 seconds ago Up 3 seconds zealous_goldstine
  29. 5af7d28b054e 58af3ad826d2 "/bin/bash" 7 minutes ago Exited (0) 4 minutes ago tender_dubinsky
  30. [root@docker ~]# docker attach aeda0a4b7e85 #切入新鏡像的容器進程
  31. [root@aeda0a4b7e85 /]# ls -d yunjisuan #我們發現之前創建的目錄仍舊存在
  32. yunjisuan

3.13 Docker命令:exec

用於從本地操作系統上直接向容器進程發布執行命令並返回結果

  1. [root@docker ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. aeda0a4b7e85 5620f1cb9e8e "/bin/bash" 6 minutes ago Up 4 seconds zealous_goldstine
  4. 5af7d28b054e 58af3ad826d2 "/bin/bash" 13 minutes ago Exited (0) 11 minutes ago tender_dubinsky
  5. [root@docker ~]# docker exec aeda0a4b7e85 ls /tmp #查看容器進程里的/tmp目錄下所有內容
  6. ks-script-3QMvMi
  7. yum.log
  8. [root@docker ~]# docker exec aeda0a4b7e85 ls -d /yunjisuan #查看容器進程里/yunjisuan目錄
  9. /yunjisuan

3.14 Docker命令:cp

用於在容器進程和本地系統之間復制文件

  1. [root@docker ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. aeda0a4b7e85 5620f1cb9e8e "/bin/bash" 9 minutes ago Up 2 minutes zealous_goldstine
  4. 5af7d28b054e 58af3ad826d2 "/bin/bash" 16 minutes ago Exited (0) 14 minutes ago tender_dubinsky
  5. [root@docker ~]# docker exec aeda0a4b7e85 ls /tmp #向容器進程發布命令
  6. ks-script-3QMvMi
  7. yum.log
  8. [root@docker ~]# docker cp aeda0a4b7e85:/tmp/yum.log . #將指定容器進程的/tmp/yum.log復制到當前目錄下
  9. [root@docker ~]# ls
  10. anaconda-ks.cfg dockerfile nohup.out ping.out yum.log #已經復制過來了
  11. [root@docker ~]# docker cp anaconda-ks.cfg aeda0a4b7e85:/tmp/ #將本地文件復制到容器進程里
  12. [root@docker ~]# docker exec aeda0a4b7e85 ls /tmp
  13. anaconda-ks.cfg #復制成功
  14. ks-script-3QMvMi
  15. yum.log

3.15 Docker命令:create

用於創建一個容器進程,但是並不啟動它

  1. [root@docker ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. Mr.chen/centos 2 5620f1cb9e8e 22 minutes ago 200MB
  4. Mr.chen/centos7 1 58af3ad826d2 22 hours ago 200MB
  5. centos 7 49f7960eb7e4 4 weeks ago 200MB
  6. centos latest 49f7960eb7e4 4 weeks ago 200MB
  7. [root@docker ~]# docker create -it 5620f1cb9e8e #創建一個鏡像的容器進程,但不直接啟動
  8. 6040b7b6decee3701444af0e6258f7af506e2e1bed4967e9fa5d67fe9bd599e8
  9. [root@docker ~]# docker ps -a
  10. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  11. 6040b7b6dece 5620f1cb9e8e "/bin/bash" 3 seconds ago Created nifty_yalow #創建狀態並未啟動
  12. 5af7d28b054e 58af3ad826d2 "/bin/bash" 25 minutes ago Exited (0) 23 minutes ago tender_dubinsky
  13. [root@docker ~]# docker start 6040b7b6dece #啟動容器進程
  14. 6040b7b6dece
  15. [root@docker ~]# docker ps -a
  16. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  17. 6040b7b6dece 5620f1cb9e8e "/bin/bash" 17 seconds ago Up 1 second nifty_yalow
  18. 5af7d28b054e 58af3ad826d2 "/bin/bash" 26 minutes ago Exited (0) 23 minutes ago tender_dubinsky

3.16 Docker命令:diff

查看容器進程與源鏡像做對比,發生了改變的文件或文件夾

  1. [root@docker ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. [root@docker ~]# docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. Mr.chen/centos 2 5620f1cb9e8e 11 hours ago 200MB
  6. Mr.chen/centos7 1 58af3ad826d2 32 hours ago 200MB
  7. centos 7 49f7960eb7e4 4 weeks ago 200MB
  8. centos latest 49f7960eb7e4 4 weeks ago 200MB
  9. [root@docker ~]# docker run -d -it 5620f1cb9e8e #啟動一個鏡像的容器進程
  10. ab06a9794e45ca35ab5f4594d630ecbe3527814233cc004d4deb8aafde2906f8
  11. [root@docker ~]# docker ps -a
  12. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  13. ab06a9794e45 5620f1cb9e8e "/bin/bash" 3 seconds ago Up 2 seconds confident_snyder
  14. [root@docker ~]# docker attach ab06a9794e45 #切入容器進程
  15. [root@ab06a9794e45 /]# cd /yunjisuan/
  16. [root@ab06a9794e45 yunjisuan]# pwd
  17. /yunjisuan
  18. [root@ab06a9794e45 yunjisuan]# touch {1..10} #在容器進程中創建文件
  19. [root@ab06a9794e45 yunjisuan]# ls
  20. 1 10 2 3 4 5 6 7 8 9
  21. [root@ab06a9794e45 yunjisuan]# exit #退出容器進程
  22. exit
  23. [root@docker ~]# docker diff ab06a9794e45 #查看容器進程的變化
  24. C /root/.bash_history
  25. C /yunjisuan
  26. A /yunjisuan/1
  27. A /yunjisuan/10
  28. A /yunjisuan/2
  29. A /yunjisuan/3
  30. A /yunjisuan/4
  31. A /yunjisuan/5
  32. A /yunjisuan/6
  33. A /yunjisuan/7
  34. A /yunjisuan/8
  35. A /yunjisuan/9

3.17 Docker命令:events

時時監測容器的變化情況

  1. [root@docker ~]# docker events
  2. 2018-07-06T09:11:23.938963932+08:00 network connect c03e38ce8c0e54511899c4ad34b37adaa6339b68e44478072b7d9a4129afdb7a (container=ab06a9794e45ca35ab5f4594d630ecbe3527814233cc004d4deb8aafde2906f8, name=bridge, type=bridge)
  3. 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

將容器進程的文件系統導出到本地

  1. [root@docker ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. ab06a9794e45 5620f1cb9e8e "/bin/bash" About an hour ago Up About an hour confident_snyder
  4. [root@docker ~]# docker export ab06a9794e45 > test.tar #將容器進程導出成一個tar包
  5. [root@docker ~]# ls
  6. anaconda-ks.cfg dockerfile nohup.out ping.out test.tar yum.log

3.19 Docker命令:import

用於將export導出的文件系統創建為一個鏡像

  1. [root@docker ~]# ls
  2. anaconda-ks.cfg dockerfile nohup.out ping.out test.tar yum.log
  3. [root@docker ~]# docker import test.tar Mr.chen/centos:3 #將導出的tar包文件系統生成一個新的鏡像
  4. sha256:745606e08231f270d40fe2bff574f10b60144e52accd79772c0ed8c739da015a
  5. [root@docker ~]# docker images
  6. REPOSITORY TAG IMAGE ID CREATED SIZE
  7. Mr.chen/centos 3 745606e08231 4 seconds ago 200MB
  8. Mr.chen/centos 2 5620f1cb9e8e 13 hours ago 200MB
  9. Mr.chen/centos7 1 58af3ad826d2 34 hours ago 200MB
  10. centos 7 49f7960eb7e4 4 weeks ago 200MB
  11. centos latest 49f7960eb7e4 4 weeks ago 200MB

3.20 Docker命令:history

用於查看一個鏡像的歷史修改紀錄

  1. [root@docker ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. Mr.chen/centos 3 745606e08231 4 seconds ago 200MB
  4. Mr.chen/centos 2 5620f1cb9e8e 13 hours ago 200MB
  5. Mr.chen/centos7 1 58af3ad826d2 34 hours ago 200MB
  6. centos 7 49f7960eb7e4 4 weeks ago 200MB
  7. centos latest 49f7960eb7e4 4 weeks ago 200MB
  8. [root@docker ~]# docker history 745606e08231
  9. IMAGE CREATED CREATED BY SIZE COMMENT
  10. 745606e08231 6 minutes ago 200MB Imported from -
  11. [root@docker ~]# docker history 5620f1cb9e8e
  12. IMAGE CREATED CREATED BY SIZE COMMENT
  13. 5620f1cb9e8e 13 hours ago /bin/bash 27B
  14. 58af3ad826d2 34 hours ago /bin/sh -c #(nop) CMD ["/home/test/docker.s… 0B
  15. f6587dbd78dd 34 hours ago /bin/sh -c chmod +x /home/test/docker.sh 57B
  16. 8f092336a175 34 hours ago /bin/sh -c #(nop) ADD file:84ec58f8405b16017… 57B
  17. 82c412669879 34 hours ago /bin/sh -c ln -sfv /usr/share/zoneinfo/Asia/… 33B
  18. 1a932d4c7762 34 hours ago /bin/sh -c #(nop) LABEL MAINTATNER=Mr.chen.… 0B
  19. 49f7960eb7e4 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
  20. <missing> 4 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
  21. <missing> 4 weeks ago /bin/sh -c #(nop) ADD file:8f4b3be0c1427b158… 200MB

3.21 Docker命令:info

用於查看當前操作系統的docker運行信息

  1. [root@docker ~]# docker info
  2. Containers: 1 #容器進程1個
  3. Running: 1 #正在運行狀態的容器1個
  4. Paused: 0
  5. Stopped: 0
  6. Images: 8 #一共有8個鏡像
  7. Server Version: 18.03.1-ce
  8. Storage Driver: overlay2
  9. Backing Filesystem: xfs
  10. Supports d_type: true
  11. Native Overlay Diff: true
  12. Logging Driver: json-file
  13. Cgroup Driver: cgroupfs
  14. Plugins:
  15. Volume: local
  16. Network: bridge host macvlan null overlay
  17. Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
  18. Swarm: inactive
  19. Runtimes: runc
  20. Default Runtime: runc
  21. Init Binary: docker-init
  22. containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
  23. runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
  24. init version: 949e6fa
  25. Security Options:
  26. seccomp
  27. Profile: default
  28. Kernel Version: 3.10.0-862.3.3.el7.x86_64
  29. Operating System: CentOS Linux 7 (Core)
  30. OSType: linux
  31. Architecture: x86_64
  32. CPUs: 1
  33. Total Memory: 974.6MiB
  34. Name: docker
  35. ID: IZLC:3CEK:YWIH:CEWB:SHHI:BUAY:B3I5:GGN6:BW4E:4O2Z:FVAD:DMPI
  36. Docker Root Dir: /var/lib/docker
  37. Debug Mode (client): false
  38. Debug Mode (server): false
  39. Registry: https://index.docker.io/v1/
  40. Labels:
  41. Experimental: false
  42. Insecure Registries:
  43. 127.0.0.0/8
  44. Live Restore Enabled: false

3.22 Docker命令:inspect

查看某個鏡像的詳細信息

  1. [root@docker ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. Mr.chen/centos 3 745606e08231 12 minutes ago 200MB
  4. Mr.chen/centos 2 5620f1cb9e8e 13 hours ago 200MB
  5. Mr.chen/centos7 1 58af3ad826d2 34 hours ago 200MB
  6. centos 7 49f7960eb7e4 4 weeks ago 200MB
  7. centos latest 49f7960eb7e4 4 weeks ago 200MB
  8. [root@docker ~]# docker inspect 745606e08231
  9. [
  10. {
  11. "Id": "sha256:745606e08231f270d40fe2bff574f10b60144e52accd79772c0ed8c739da015a",
  12. "RepoTags": [
  13. "Mr.chen/centos:3"
  14. ],
  15. "RepoDigests": [],
  16. "Parent": "",
  17. "Comment": "Imported from -",
  18. "Created": "2018-07-06T02:36:40.100685513Z",
  19. "Container": "",
  20. "ContainerConfig": {
  21. "Hostname": "",
  22. "Domainname": "",
  23. "User": "",
  24. "AttachStdin": false,
  25. "AttachStdout": false,
  26. "AttachStderr": false,
  27. "Tty": false,
  28. "OpenStdin": false,
  29. "StdinOnce": false,
  30. "Env": null,
  31. "Cmd": null,
  32. "Image": "",
  33. "Volumes": null,
  34. "WorkingDir": "",
  35. "Entrypoint": null,
  36. "OnBuild": null,
  37. "Labels": null
  38. },
  39. "DockerVersion": "18.03.1-ce",
  40. "Author": "",
  41. "Config": {
  42. "Hostname": "",
  43. "Domainname": "",
  44. "User": "",
  45. "AttachStdin": false,
  46. "AttachStdout": false,
  47. "AttachStderr": false,
  48. "Tty": false,
  49. "OpenStdin": false,
  50. "StdinOnce": false,
  51. "Env": null,
  52. "Cmd": null,
  53. "Image": "",
  54. "Volumes": null,
  55. "WorkingDir": "",
  56. "Entrypoint": null,
  57. "OnBuild": null,
  58. "Labels": null
  59. },
  60. "Architecture": "amd64",
  61. "Os": "linux",
  62. "Size": 199678439,
  63. "VirtualSize": 199678439,
  64. "GraphDriver": {
  65. "Data": {
  66. "MergedDir": "/var/lib/docker/overlay2/a5c2a8fae1f8ccde01cbb408f8ad3d35d613c35eb0384395d4d0a5c40d9823cf/merged",
  67. "UpperDir": "/var/lib/docker/overlay2/a5c2a8fae1f8ccde01cbb408f8ad3d35d613c35eb0384395d4d0a5c40d9823cf/diff",
  68. "WorkDir": "/var/lib/docker/overlay2/a5c2a8fae1f8ccde01cbb408f8ad3d35d613c35eb0384395d4d0a5c40d9823cf/work"
  69. },
  70. "Name": "overlay2"
  71. },
  72. "RootFS": {
  73. "Type": "layers",
  74. "Layers": [
  75. "sha256:168843d36816cba72e7a483e5d6ce0fe89a6755fe86704d162306082f4300a8c"
  76. ]
  77. },
  78. "Metadata": {
  79. "LastTagTime": "2018-07-06T10:36:40.101585642+08:00"
  80. }
  81. }
  82. ]

3.23 Docker命令:kill

強行停止一個或多個正在運行狀態的容器進程

  1. [root@docker ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. ab06a9794e45 5620f1cb9e8e "/bin/bash" 2 hours ago Up 2 hours confident_snyder
  4. [root@docker ~]# docker kill ab06a9794e45
  5. ab06a9794e45
  6. [root@docker ~]# docker ps -a
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. ab06a9794e45 5620f1cb9e8e "/bin/bash" 2 hours ago Exited (137) 1 second ago confident_snyder

3.24 Docker命令:save

用於將一個鏡像的文件系統導出到本地(export導出的是容器)

  1. #重新build一個鏡像
  2. [root@docker ~]# cd dockerfile/lib/centos/7/
  3. [root@docker 7]# docker build -t test:1 .
  4. Sending build context to Docker daemon 3.072kB
  5. Step 1/6 : FROM centos
  6. ---> 49f7960eb7e4
  7. Step 2/6 : LABEL MAINTATNER="Mr.chen.com"
  8. ---> Running in 9c71d8d0c8d9
  9. Removing intermediate container 9c71d8d0c8d9
  10. ---> c719db6a38bb
  11. Step 3/6 : RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  12. ---> Running in 39436af722de
  13. '/etc/localtime' -> '/usr/share/zoneinfo/Asia/Shanghai'
  14. Removing intermediate container 39436af722de
  15. ---> c80e63f73145
  16. Step 4/6 : ADD docker.sh /home/test/
  17. ---> fa1179b1ab73
  18. Step 5/6 : RUN chmod +x /home/test/docker.sh
  19. ---> Running in 5a0243641c71
  20. Removing intermediate container 5a0243641c71
  21. ---> f4fe4b82300c
  22. Step 6/6 : CMD ["/home/test/docker.sh"]
  23. ---> Running in f259134ac5be
  24. Removing intermediate container f259134ac5be
  25. ---> cc87aef92b66
  26. Successfully built cc87aef92b66
  27. Successfully tagged test:1
  28. [root@docker 7]# docker images
  29. REPOSITORY TAG IMAGE ID CREATED SIZE
  30. test 1 cc87aef92b66 4 seconds ago 200MB
  31. centos 7 49f7960eb7e4 4 weeks ago 200MB
  32. centos latest 49f7960eb7e4 4 weeks ago 200MB
  33. #save導出test:1這個鏡像(也可以用id號)
  34. [root@docker 7]# docker images
  35. REPOSITORY TAG IMAGE ID CREATED SIZE
  36. test 1 cc87aef92b66 51 seconds ago 200MB
  37. centos 7 49f7960eb7e4 4 weeks ago 200MB
  38. centos latest 49f7960eb7e4 4 weeks ago 200MB
  39. [root@docker 7]# docker save test:1 > test.tar
  40. [root@docker 7]# ls
  41. Dockerfile docker.sh test.tar

3.25 Docker命令:load

用於將save導出到本地的tar包,重新加載為鏡像(和源鏡像的名字標識完全一樣)

  1. [root@docker 7]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. test 1 cc87aef92b66 2 minutes ago 200MB
  4. centos 7 49f7960eb7e4 4 weeks ago 200MB
  5. centos latest 49f7960eb7e4 4 weeks ago 200MB
  6. [root@docker 7]# docker rmi test:1 #刪除鏡像test:1
  7. Untagged: test:1
  8. Deleted: sha256:cc87aef92b667fa2ef8c6f00fc2c598931adcc137e569a5ee77626e98845c66f
  9. Deleted: sha256:f4fe4b82300c163350ca7aea20d713246b34861e57778482a8536b189eb15328
  10. Deleted: sha256:a49455ce240e931703525ab8bd0fd46a08283681e54b412cc2ae3ff98c346847
  11. Deleted: sha256:fa1179b1ab73c564f85ab15038abc27248da914bf61f835432b1b3e9660dac3f
  12. Deleted: sha256:c9686c8c97ed841d519023cc7ce6a7e8b6c6af51d2d85084dcf37b072933f353
  13. Deleted: sha256:c80e63f73145c443d5fac77b166b68b0865167ce3e17b9207540bc926276850a
  14. Deleted: sha256:0794cb3a1f33a60e86ffd252d7db298799b44c846efe6b0aef3e445db767d662
  15. Deleted: sha256:c719db6a38bb83756c8e831694268681ece2ee2e8ae6ecad12bd810997f61b9e
  16. [root@docker 7]# docker images
  17. REPOSITORY TAG IMAGE ID CREATED SIZE
  18. centos 7 49f7960eb7e4 4 weeks ago 200MB
  19. centos latest 49f7960eb7e4 4 weeks ago 200MB
  20. [root@docker 7]# docker load < test.tar #將之前test:1這個鏡像的save備份導入系統
  21. cdba4ed54f31: Loading layer [==================================================>] 2.048kB/2.048kB
  22. 0e990db11d5d: Loading layer [==================================================>] 3.584kB/3.584kB
  23. e57b2692ffad: Loading layer [==================================================>] 3.072kB/3.072kB
  24. Loaded image: test:1
  25. [root@docker 7]# docker images
  26. REPOSITORY TAG IMAGE ID CREATED SIZE
  27. test 1 cc87aef92b66 2 minutes ago 200MB #和原來的鏡像完全一樣
  28. centos 7 49f7960eb7e4 4 weeks ago 200MB
  29. centos latest 49f7960eb7e4 4 weeks ago 200MB

3.26 Docker命令:logs

用於輸出一個容器進程內的操作日志

  1. [root@docker 7]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. test 1 cc87aef92b66 12 minutes ago 200MB
  4. centos 7 49f7960eb7e4 4 weeks ago 200MB
  5. centos latest 49f7960eb7e4 4 weeks ago 200MB
  6. [root@docker 7]# docker ps -a
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. [root@docker 7]# docker run -d -it test:1
  9. 16f9f6c9c699c649709b5643590c632f4c2e2f621de7dd1a6c480ae863761a98
  10. [root@docker 7]# docker ps -a
  11. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  12. 16f9f6c9c699 test:1 "/home/test/docker.sh" 2 seconds ago Up 2 seconds adoring_noether
  13. [root@docker 7]# docker logs 16f9f6c9c699
  14. welcome
  15. welcome
  16. welcome
  17. welcome
  18. welcome
  19. welcome
  20. welcome
  21. welcome
  22. welcome
  23. welcome
  24. welcome
  25. welcome
  26. welcome
  27. welcome
  28. welcome
  29. welcome
  30. welcome
  31. welcome
  32. welcome
  33. welcome
  34. welcome
  35. welcome
  36. welcome
  37. welcome
  38. welcome
  39. welcome
  40. welcome
  41. welcome
  42. welcome
  43. welcome
  44. welcome
  45. welcome
  46. welcome
  47. welcome
  48. [root@docker 7]# docker logs --tail 5 16f9f6c9c699 #只顯示容器日志的后5行
  49. welcome
  50. welcome
  51. welcome
  52. welcome
  53. welcome

3.27 Docker命令:pause && unpause

用於將一個或多個容器的進程暫停和恢復

  1. [root@docker 7]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 16f9f6c9c699 test:1 "/home/test/docker.sh" 5 minutes ago Up 5 minutes adoring_noether
  4. [root@docker 7]# docker pause 16f9f6c9c699 #暫停容器進程
  5. 16f9f6c9c699
  6. [root@docker 7]# docker ps -a
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. 16f9f6c9c699 test:1 "/home/test/docker.sh" 5 minutes ago Up 5 minutes (Paused) adoring_noether
  9. [root@docker 7]# docker unpause 16f9f6c9c699 #恢復容器進程
  10. 16f9f6c9c699
  11. [root@docker 7]# docker ps -a
  12. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  13. 16f9f6c9c699 test:1 "/home/test/docker.sh" 5 minutes ago Up 5 minutes adoring_noether

3.28 Docker命令:port

用於列出一個容器的端口映射及協議

  1. [root@docker 7]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. test 1 cc87aef92b66 24 minutes ago 200MB
  4. centos 7 49f7960eb7e4 4 weeks ago 200MB
  5. centos latest 49f7960eb7e4 4 weeks ago 200MB
  6. [root@docker 7]# docker run -d -it -p 2222:22 test:1 #啟動一個鏡像的容器進程 -p 指定本地2222端口映射到容器的22端口
  7. 6321c3a3481fe44c13307a1e082ac58a0ee87b29e8bdd2a2d664914a66405f1c
  8. [root@docker 7]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. 6321c3a3481f test:1 "/home/test/docker.sh" 5 seconds ago Up 4 seconds 0.0.0.0:2222->22/tcp romantic_elbakyan
  11. 16f9f6c9c699 test:1 "/home/test/docker.sh" 10 minutes ago Up 10 minutes adoring_noether
  12. [root@docker 7]# docker port 6321c3a3481f #查看容器進程的端口映射及協議
  13. 22/tcp -> 0.0.0.0:2222

3.29 Docker命令:rename

給容器進程重命名

  1. [root@docker 7]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 6321c3a3481f test:1 "/home/test/docker.sh" 11 minutes ago Up 11 minutes 0.0.0.0:2222->22/tcp romantic_elbakyan
  4. 16f9f6c9c699 test:1 "/home/test/docker.sh" 22 minutes ago Up 22 minutes adoring_noether
  5. [root@docker 7]# docker rename romantic_elbakyan Mr.chen
  6. [root@docker 7]# docker ps -a
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. 6321c3a3481f test:1 "/home/test/docker.sh" 11 minutes ago Up 11 minutes 0.0.0.0:2222->22/tcp Mr.chen
  9. 16f9f6c9c699 test:1 "/home/test/docker.sh" 22 minutes ago Up 22 minutes adoring_noether

3.30 Docker命令:restart

重啟一個容器進程

  1. [root@docker 7]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 6321c3a3481f test:1 "/home/test/docker.sh" 15 minutes ago Up 15 minutes 0.0.0.0:2222->22/tcp Mr.chen
  4. 16f9f6c9c699 test:1 "/home/test/docker.sh" 26 minutes ago Up 26 minutes adoring_noether
  5. [root@docker 7]# docker restart 6321c3a3481f
  6. 6321c3a3481f
  7. [root@docker 7]# docker ps -a
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. 6321c3a3481f test:1 "/home/test/docker.sh" 15 minutes ago Up 2 seconds 0.0.0.0:2222->22/tcp Mr.chen
  10. 16f9f6c9c699 test:1 "/home/test/docker.sh" 26 minutes ago Up 26 minutes adoring_noether

3.31 Docker命令:stats

用於時時輸出容器的資源使用情況

  1. [root@docker 7]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 6321c3a3481f test:1 "/home/test/docker.sh" 17 minutes ago Up About a minute 0.0.0.0:2222->22/tcp Mr.chen
  4. 16f9f6c9c699 test:1 "/home/test/docker.sh" 28 minutes ago Up 28 minutes adoring_noether
  5. [root@docker 7]# docker stats 6321c3a3481f

QQ截圖20180706115229.png-7.8kB

  1. #--no-tream只輸出一次
  2. [root@docker 7]# docker stats 6321c3a3481f --no-stream
  3. CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
  4. 6321c3a3481f Mr.chen 0.00% 292KiB / 974.6MiB 0.03% 648B / 0B 0B / 0B 2

3.32 Docker命令:tag

用於從一個指定的鏡像創建另外一個鏡像

  1. [root@docker 7]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. test 1 cc87aef92b66 About an hour ago 200MB
  4. centos 7 49f7960eb7e4 4 weeks ago 200MB
  5. centos latest 49f7960eb7e4 4 weeks ago 200MB
  6. [root@docker 7]# docker tag test:1 test:2 #我們可以指定名字:標志來創建
  7. [root@docker 7]# docker images
  8. REPOSITORY TAG IMAGE ID CREATED SIZE
  9. test 1 cc87aef92b66 About an hour ago 200MB
  10. test 2 cc87aef92b66 About an hour ago 200MB
  11. centos 7 49f7960eb7e4 4 weeks ago 200MB
  12. centos latest 49f7960eb7e4 4 weeks ago 200MB
  13. [root@docker 7]# docker rmi test:2
  14. Untagged: test:2
  15. [root@docker 7]# docker images
  16. REPOSITORY TAG IMAGE ID CREATED SIZE
  17. test 1 cc87aef92b66 About an hour ago 200MB
  18. centos 7 49f7960eb7e4 4 weeks ago 200MB
  19. centos latest 49f7960eb7e4 4 weeks ago 200MB
  20. [root@docker 7]# docker tag cc87aef92b66 test:2 #我們也可以指定image id來創建
  21. [root@docker 7]# docker images
  22. REPOSITORY TAG IMAGE ID CREATED SIZE
  23. test 1 cc87aef92b66 About an hour ago 200MB
  24. test 2 cc87aef92b66 About an hour ago 200MB
  25. centos 7 49f7960eb7e4 4 weeks ago 200MB
  26. centos latest 49f7960eb7e4 4 weeks ago 200MB

3.33 Docker命令:top

用於顯示指定容器的進程信息

  1. [root@docker 7]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 6321c3a3481f test:1 "/home/test/docker.sh" 28 minutes ago Up 12 minutes 0.0.0.0:2222->22/tcp Mr.chen
  4. 16f9f6c9c699 test:1 "/home/test/docker.sh" 39 minutes ago Up 39 minutes adoring_noether
  5. [root@docker 7]# docker top 6321c3a3481f
  6. UID PID PPID C STIME TTY TIME CMD
  7. root 89798 89784 0 11:55 pts/0 00:00:00 /bin/bash /home/test/docker.sh
  8. root 90265 89798 0 12:07 pts/0 00:00:00 sleep 5

3.34 Docker命令:update

用於調整一個或多個容器的啟動配置

  1. [root@docker 7]# docker update --help
  2. Usage: docker update [OPTIONS] CONTAINER [CONTAINER...]
  3. Update configuration of one or more containers
  4. Options:
  5. --blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
  6. --cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
  7. --cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
  8. --cpu-rt-period int Limit the CPU real-time period in microseconds
  9. --cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
  10. -c, --cpu-shares int CPU shares (relative weight) #調整CPU
  11. --cpus decimal Number of CPUs
  12. --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
  13. --cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
  14. --kernel-memory bytes Kernel memory limit
  15. -m, --memory bytes Memory limit #調整內存
  16. --memory-reservation bytes Memory soft limit
  17. --memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
  18. --restart string Restart policy to apply when a container exits

3.35 Docker命令:version and wait

version用於顯示docker的版本信息
wait用於捕捉一個或多個容器的退出狀態,並返回退出狀態碼

  1. #顯示docker版本信息
  2. [root@docker 7]# docker version
  3. Client:
  4. Version: 18.03.1-ce
  5. API version: 1.37
  6. Go version: go1.9.5
  7. Git commit: 9ee9f40
  8. Built: Thu Apr 26 07:20:16 2018
  9. OS/Arch: linux/amd64
  10. Experimental: false
  11. Orchestrator: swarm
  12. Server:
  13. Engine:
  14. Version: 18.03.1-ce
  15. API version: 1.37 (minimum version 1.12)
  16. Go version: go1.9.5
  17. Git commit: 9ee9f40
  18. Built: Thu Apr 26 07:23:58 2018
  19. OS/Arch: linux/amd64
  20. Experimental: false
  21. #監聽容器的退出狀態並返回狀態碼
  22. [root@docker 7]# docker ps -a
  23. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  24. 6321c3a3481f test:1 "/home/test/docker.sh" 33 minutes ago Up 17 minutes 0.0.0.0:2222->22/tcp Mr.chen
  25. 16f9f6c9c699 test:1 "/home/test/docker.sh" 44 minutes ago Up 44 minutes adoring_noether
  26. [root@docker 7]# docker wait 6321c3a3481f #需要在開一個窗口stop這個容器進程再查看
  27. 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:掛載存儲在宿主機系統的內存中,而不會寫入宿主機的文件系統

QQ截圖20180706235210.png-47.3kB

4.1.1 Volume

  1. #創建一個卷
  2. [root@docker 7]# docker volume create nginx-vol
  3. nginx-vol
  4. [root@docker 7]# docker volume ls
  5. DRIVER VOLUME NAME
  6. local nginx-vol
  7. [root@docker 7]# docker volume inspect nginx-vol
  8. [
  9. {
  10. "CreatedAt": "2018-07-07T00:07:51+08:00", #創建時間
  11. "Driver": "local", #驅動
  12. "Labels": {},
  13. "Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data", #掛載點
  14. "Name": "nginx-vol", #卷名
  15. "Options": {},
  16. "Scope": "local"
  17. }
  18. ]
  19. #下載一個nginx官方鏡像
  20. [root@docker 7]# docker pull nginx
  21. Using default tag: latest
  22. latest: Pulling from library/nginx
  23. 683abbb4ea60: Pull complete
  24. 6ff57cbc007a: Pull complete
  25. 162f7aebbf40: Pull complete
  26. Digest: sha256:2cf71a9320ea65566c0738e87400407aaffd8dd11a411ceb2f2b585ad513469e
  27. Status: Downloaded newer image for nginx:latest
  28. [root@docker 7]# docker images
  29. REPOSITORY TAG IMAGE ID CREATED SIZE
  30. nginx latest 649dcb69b782 2 days ago 109MB
  31. centos latest 49f7960eb7e4 4 weeks ago 200MB
  32. [root@docker 7]# docker run -dit --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
  33. e74fb1640742a6a535d825ea223c18809b495532a9c9d6bd0b7ca8c4775261dc
  34. 特別說明:
  35. --name:容器的名字
  36. --mount:掛載
  37. src:源卷的名字
  38. dst:掛載到容器中的路徑
  39. [root@docker 7]# docker ps -a
  40. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  41. e74fb1640742 nginx "nginx -g 'daemon of…" 48 seconds ago Up 47 seconds 80/tcp nginx-test
  42. #向容器中的掛載目錄創建文件,查看是否掛載成功
  43. [root@docker 7]# docker exec nginx-test touch /usr/share/nginx/html/test.txt
  44. [root@docker 7]# docker exec nginx-test ls /usr/share/nginx/html/
  45. 50x.html
  46. index.html
  47. test.txt #有了
  48. [root@docker 7]# ls /var/lib/docker/volumes/nginx-vol/_data/
  49. 50x.html index.html test.txt #成功
  50. #清理容器進程
  51. [root@docker 7]# docker ps -a
  52. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  53. e74fb1640742 nginx "nginx -g 'daemon of…" 8 minutes ago Up 8 minutes 80/tcp nginx-test
  54. [root@docker 7]# docker stop nginx-test
  55. nginx-test
  56. [root@docker 7]# docker rm nginx-test
  57. nginx-test
  58. [root@docker 7]# docker ps -a
  59. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  60. [root@docker 7]# ls /var/lib/docker/volumes/nginx-vol/_data/
  61. 50x.html index.html test.txt #清理容器后,掛載的卷的數據仍舊存在
  62. #重新啟動鏡像nginx的容器進程
  63. [root@docker 7]# docker run -dit --name nginx-test -p 88:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
  64. b5e0bfc639087bdd4998065e457eda837c042cfb5e9cf3c044a11c97280e7270
  65. [root@docker 7]# docker ps -a
  66. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  67. b5e0bfc63908 nginx "nginx -g 'daemon of…" 15 seconds ago Up 14 seconds 0.0.0.0:88->80/tcp nginx-test
  68. 特別提示:
  69. docker run的-p參數:指定端口的映射,8880的意思就是將宿主機88端口的訪問映射到容器進程的80端口

現在我們通過瀏覽器訪問宿主機的88端口,進而訪問容器進程的80端口

QQ截圖20180707002530.png-22kB

  1. #在數據卷nginx-vol里換一個網頁在訪問
  2. [root@docker 7]# rm -rf /var/lib/docker/volumes/nginx-vol/_data/
  3. 50x.html index.html test.txt
  4. [root@docker 7]# rm -rf /var/lib/docker/volumes/nginx-vol/_data/*
  5. [root@docker 7]# echo "welcome to yunjisuan" > /var/lib/docker/volumes/nginx-vol/_data/index.html

QQ截圖20180707002826.png-4.8kB

現在我們在啟動一個鏡像nginx的進程,讓兩個nginx的容器進程公用一個數據卷nginx-vol

  1. [root@docker 7]# docker run -dit --name nginx-test2 -p 89:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
  2. f1373f38c6cda722f151f06fc06cd6fccf62bc042850c6481ddb74c5336377be
  3. [root@docker 7]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. f1373f38c6cd nginx "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:89->80/tcp nginx-test2
  6. b5e0bfc63908 nginx "nginx -g 'daemon of…" 17 minutes ago Up 17 minutes 0.0.0.0:88->80/tcp nginx-test

我們用瀏覽器訪問docker宿主機的89端口

QQ截圖20180707004039.png-5.3kB

4.1.2 Bind Mounts

  1. [root@docker 7]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. f1373f38c6cd nginx "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes 0.0.0.0:89->80/tcp nginx-test2
  4. b5e0bfc63908 nginx "nginx -g 'daemon of…" 24 minutes ago Up 24 minutes 0.0.0.0:88->80/tcp nginx-test
  5. [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
  6. 270b609a9e2ec53c3b0a9250f2f8d175e21748ac8ebe9e4c0f9897e72a9b3843
  7. [root@docker 7]# docker ps -a
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. 270b609a9e2e nginx "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:90->80/tcp nginx-test3
  10. f1373f38c6cd nginx "nginx -g 'daemon of…" 9 minutes ago Up 9 minutes 0.0.0.0:89->80/tcp nginx-test2
  11. b5e0bfc63908 nginx "nginx -g 'daemon of…" 26 minutes ago Up 26 minutes 0.0.0.0:88->80/tcp nginx-test

我們用瀏覽器訪問docker宿主機的90端口

QQ截圖20180707005436.png-5kB

特別提示:
bind mounts可以掛載宿主機上的任意目錄,而volume先得創建后才能掛載

4.2 實戰容器部署LNMP網站平台

首先我們下載一個wordpress博客

wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz

4.2.1 創建MySQL數據庫容器

  1. #下載MySQL5.6版本鏡像
  2. [root@docker ~]# docker pull mysql:5.6
  3. [root@docker ~]# docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. nginx latest 649dcb69b782 3 days ago 109MB
  6. mysql 5.6 97fdbdd65c6a 10 days ago 256MB
  7. centos latest 49f7960eb7e4 4 weeks ago 200MB
  8. #創建一個自定義網絡(docker自定義網絡下一節再講)
  9. [root@docker ~]# docker network create lnmp
  10. b02d8652022382f21780ee4935f472689883b64389ae120174268de57ec03e4e
  11. [root@docker ~]# docker network ls
  12. NETWORK ID NAME DRIVER SCOPE
  13. 29e8c90dbd80 bridge bridge local
  14. f11e598312bd host host local
  15. b02d86520223 lnmp bridge local #有了(默認驅動為網橋)
  16. 3978eff69b11 none null local
  17. #啟動MySQL數據庫容器
  18. [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
  19. 07bd252ec637324683514c6f27ba0beb552d9c1044a60c2dbb1cb3d2aeba807b
  20. [root@docker ~]# docker ps -a
  21. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  22. 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,那么容器啟動時會自動創建
  1. #查看容器lnmp_mysql的日志輸出
  2. [root@docker ~]# docker logs lnmp_mysql
  3. #查看容器里啟動的進程
  4. [root@docker ~]# docker top lnmp_mysql
  5. UID PID PPID C STIME TTY TIME CMD
  6. polkitd 96252 96240 0 22:58 pts/0 00:00:01 mysqld --character-set-server=utf8

4.2.2 向容器里的Mysql創建一個庫

  1. [root@docker ~]# docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'
  2. Warning: Using a password on the command line interface can be insecure.

4.2.3 在docker宿主機上安裝mysql的客戶端通過端口映射訪問容器內的mysql

因為已經將mysql容器的3306端口映射到了docker宿主機的3306,因此我們訪問本地即可

  1. #安裝mysql客戶端
  2. [root@docker ~]# yum -y install mysql
  3. #查看本機IP地址
  4. [root@docker ~]# hostname -I | xargs -n1 | head -1
  5. 192.168.200.142
  6. #遠程方式連接docker宿主機的3306端口
  7. [root@docker ~]# mysql -h192.168.200.142 -P3306 -uroot -p123123
  8. Welcome to the MariaDB monitor. Commands end with ; or \g.
  9. Your MySQL connection id is 4
  10. Server version: 5.6.40 MySQL Community Server (GPL)
  11. Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
  12. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  13. MySQL [(none)]> show databases;
  14. +--------------------+
  15. | Database |
  16. +--------------------+
  17. | information_schema |
  18. | mysql |
  19. | performance_schema |
  20. | wp | #已經創建wp庫了
  21. +--------------------+
  22. 4 rows in set (0.01 sec)

4.2.4 創建nginx+PHP環境容器

  1. #創建一個網頁目錄
  2. [root@docker ~]# mkdir -p /app/wwwroot
  3. [root@docker ~]# ll -d /app/wwwroot
  4. drwxr-xr-x 2 root root 6 7 8 00:22 /app/wwwroot
  5. #下載richarvey/nginx-php-fpm鏡像
  6. [root@docker ~]# docker pull richarvey/nginx-php-fpm
  7. [root@docker ~]# docker images
  8. REPOSITORY TAG IMAGE ID CREATED SIZE
  9. richarvey/nginx-php-fpm latest 26c0e6f09c52 2 days ago 300MB
  10. nginx latest 649dcb69b782 3 days ago 109MB
  11. mysql 5.6 97fdbdd65c6a 10 days ago 256MB
  12. centos latest 49f7960eb7e4 4 weeks ago 200MB
  13. #啟動richarvey/nginx-php-fpm鏡像的容器
  14. [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
  15. [root@docker ~]# docker ps -a
  16. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  17. 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
  18. 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下

  1. [root@docker ~]# tar xf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot/
  2. [root@docker ~]# cd /app/wwwroot/
  3. [root@docker wwwroot]# ls
  4. wordpress

4.2.6 博客wordpress訪問測試

通過瀏覽器進行docker宿主機的88端口的訪問測試
http://IP:88/wordpress

特別提示:

如果同學們在訪問時,出現以下情況

QQ截圖20180708004235.png-21.5kB

  1. #如果出現連接不上的情況,那么請按順序執行以下命令一遍
  2. [root@docker wwwroot]# systemctl stop firewalld
  3. [root@docker wwwroot]# systemctl stop iptables.service
  4. Failed to stop iptables.service: Unit iptables.service not loaded.
  5. [root@docker wwwroot]# iptables -F
  6. [root@docker wwwroot]# iptables -P FORWARD ACCEPT
  7. [root@docker wwwroot]# iptables -P INPUT ACCEPT
  8. [root@docker wwwroot]# iptables -P OUTPUT ACCEPT

如果沒有意外此時訪問瀏覽器,就可出現下述內容

QQ截圖20180708004755.png-55.9kB

特別提示:
如果多次連續訪問同一網頁,那么瀏覽器有可能默認去掉指定的端口
因此,若訪問不到,請查看是否指定了88端口

 
 




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM