容器运维工程师(一):docker基础(上)

云计算领域专题式教学

--私人课件,不公开,不出版,禁止传播

想做好运维工作,人先要学会勤快; 
居安而思危,勤记而补拙,方可不断提高; 
别人资料不论你用着再如何爽那也是别人的; 
自己总结东西是你自身特有的一种思想与理念的展现; 
精髓不是看出来的,精髓是记出来的; 
请同学们在学习的过程中养成好的学习习惯; 
勤于实践,抛弃教案,勤于动手,整理文档。

 

一,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 disable docker #添加开机启动
  14. [root@Docker ~]# docker version #查看docker版本
  15. Client:
  16. Version: 18.03.1-ce
  17. API version: 1.37
  18. Go version: go1.9.5
  19. Git commit: 9ee9f40
  20. Built: Thu Apr 26 07:20:16 2018
  21. OS/Arch: linux/amd64
  22. Experimental: false
  23. Orchestrator: swarm
  24. Server:
  25. Engine:
  26. Version: 18.03.1-ce
  27. API version: 1.37 (minimum version 1.12)
  28. Go version: go1.9.5
  29. Git commit: 9ee9f40
  30. Built: Thu Apr 26 07:23:58 2018
  31. OS/Arch: linux/amd64
  32. Experimental: false
 

三,Docker的操作命令

 

3.0 添加docker国内镜像源

在开始学习docker之前,我们首先要更改一下docker的默认源镜像下载地址(默认是从国外下载,很慢),我们需要添加国内的源地址

 
  1. [root@docker ~]# cat /etc/docker/daemon.json
  2. {
  3. "registry-mirrors":[ "https://registry.docker-cn.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 /bin/bash
  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端口

+
 
 
 
 
posted on 2018-07-26 19:03  热巴热吧  阅读(426)  评论(0编辑  收藏  举报