一、启动容器

所需要的命令主要为 docker run。例如,下面的命令输出一个“Hello World”,之后终止容器。
image.png
当利用docker run来创建容器时,Docker在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个ip地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止
    1. docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

参数说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;常用
  • -i: 以交互模式运行容器,通常与 -t 同时使用;常用
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;常用
  • -p: 端口映射;容器端口和宿主机端口的映射;常用
  • -P: 端口映射;随机映射端口号
  • -v: 绑定宿主机和容器文件夹,绑定以后实现文件同步;常用
  • -w: 指定容器工作目录,也就是进入容器的默认目录
  • -h “mars”: 指定容器的hostname;
  • -e username=”ritchie”: 设置环境变量;
  • —name=”nginx-lb”: 为容器指定一个名称;常用
  • —dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • —dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • —env-file=[]: 从指定文件读入环境变量;
  • —cpuset=”0-2” or —cpuset=”0,1,2”: 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;常用
  • —net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • —link=[]: 添加链接到另一个容器;常用
  • —expose=[]: 开放一个端口或一组端口;

例如:

  1. docker run -it -p 80:80 --name mycentos -v /zhibi:/zhibi -w /usr centos

如果需要其他局域网内的 pc 访问 docker 容器,容器需要将自身的端口映射出来。
因为 docker 在 docker 网络下,相当于一个局域网,docker 需要把端口映射出来给宿主机,才能通过宿主机ip加端口的方式访问 docker 容器。内网环境也是要将pc指定的端口暴露给交换机,交换机转发给运行商,内网的pc才能被公网访问。
image.png
ifconfig查看网路,docker 容器也会有网卡

  1. [root@brettwu ~]# ifconfig
  2. docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  3. inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
  4. inet6 fe80::42:8dff:fe73:b92f prefixlen 64 scopeid 0x20<link>
  5. ether 02:42:8d:73:b9:2f txqueuelen 0 (Ethernet)
  6. RX packets 170 bytes 48879 (47.7 KiB)
  7. RX errors 0 dropped 0 overruns 0 frame 0
  8. TX packets 240 bytes 38480 (37.5 KiB)
  9. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  10. enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  11. inet 192.168.3.202 netmask 255.255.255.0 broadcast 192.168.3.255
  12. inet6 fe80::a00:27ff:fe9a:fb5e prefixlen 64 scopeid 0x20<link>
  13. ether 08:00:27:9a:fb:5e txqueuelen 1000 (Ethernet)
  14. RX packets 278807 bytes 376151707 (358.7 MiB)
  15. RX errors 0 dropped 0 overruns 0 frame 0
  16. TX packets 34855 bytes 3495313 (3.3 MiB)
  17. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  18. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  19. inet 127.0.0.1 netmask 255.0.0.0
  20. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  21. loop txqueuelen 1000 (Local Loopback)
  22. RX packets 2 bytes 1152 (1.1 KiB)
  23. RX errors 0 dropped 0 overruns 0 frame 0
  24. TX packets 2 bytes 1152 (1.1 KiB)
  25. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  26. # 这里就是 docker 容器的网卡,由于容器比较多,所以容器的网卡是一串哈希值
  27. vethfbcf793: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  28. inet6 fe80::b073:e8ff:feaf:4cc2 prefixlen 64 scopeid 0x20<link>
  29. ether b2:73:e8:af:4c:c2 txqueuelen 0 (Ethernet)
  30. RX packets 55 bytes 15834 (15.4 KiB)
  31. RX errors 0 dropped 0 overruns 0 frame 0
  32. TX packets 91 bytes 13255 (12.9 KiB)
  33. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

update命令给容器加上自启动
docker update [OPTIONS] CONTAINER [CONTAINER...]
docker update --restart=always 容器名

名称 描述
—blkio-weight 阻塞IO (相对权重),介于10到1000之间,0表示禁用(默认禁止)
—cpu-period 限制CPU CFS(完全公平的调度程序)期限
—cpu-quota 限制CPU CFS(完全公平的调度程序)配额
—cpu-rt-period API 1.25+,将CPU实时时间限制为微秒
—cpu-rt-runtime API 1.25+,将CPU实时运行时间限制为微秒
—cpu-shares, -c CPU份额(相对权重)
—cpus API 1.29+,CPU数量
—cpuset-cpus 允许执行的CPU(0-3,0,1)
—cpuset-mem 允许执行的MEM(0-3,0,1)
—kernel-memory 内核内存限制
—memory-swap 交换限制等于内存加交换,“-1”以启用无限交换
—memory-reservatio 内存软限制
—memory, -m 内存限制
—pids-limit API 1.40+,调节容器pids限制(-1表示无限制)
—restart 容器退出时重新启动策略以应用

二、查看容器

  1. docker ps

Docker容器操作 - 图3

如果没有指定name,docker会随机生成一个名字

1、参数说明:

  • -f :根据条件过滤显示的内容。
  • —format :指定返回值的模板文件。
  • -l :显示最近创建的一个容器。常用
  • -a :显示全部容器,包括已经停止的。常用
  • -n :列出最近创建的n个容器。 -n 6 常用
  • —no-trunc :不截断id输出,id默认显示16位,全部输入128位。
  • -q :静默模式,只显示容器编号。常用
  • -s :显示总的文件大小。

2、查看端口映射快捷方式

根据名字或者ID查看容器端口映射

  1. docker port ecb7db5c716f

Docker容器操作 - 图4

3、查看WEB应用程序日志

  1. docker logs ecb7db5c716f

参数说明:

  • -f: dokcer logs 像使用 tail -f 一样来输出容器内部的标准输出。

4、查看容器底层信息

  1. docker inspect ecb7db5c716f

5、查看容器使用情况

  1. docker stats [OPTIONS] [CONTAINER...]

参数说明:

  • -a: 显示所有的容器,默认只显示运行中的。

    三、停止容器

    1. docker stop ecb7db5c716f

参数说明:

  • -t: 强制关闭(相当于直接拔掉电源)

四、启动已经有的容器

  1. docker start ecb7db5c716f

参数说明:

  • -a:直接进入到容器里面
  • -i:直接进入到容器里面

五、重启容器

  1. docker restart ecb7db5c716f

参数说明:

  • -t:多少秒以后停止容器(默认十秒)

六、移除容器

docker rm 容器名或者容器id普通删除
docker rm -f 容器名或者容器id强制删除

  1. docker rm ecb7db5c716f

注:删除容器以前必须先停掉容器,不然会报错

Error response from daemon: You cannot remove a running container ecb7db5c716faf4b6c99f22e4c4373437fce51e6d497c3f05acd78eae5e04d51. Stop the container before attempting removal or force remove

参数说明:

  • -f:强制移除,运行中的也会被移除
  • -l:删除指定的连接
  • -v:删除和容器关联的卷,默认关联的卷不会删除

docker container prune可以删除所有停止的容器

七、进入一个运行中的容器

  1. docker exec -it ecb7db5c716f /bin/bash

参数说明:

  • -i:以交互模式运行容器
  • -t:分配一个伪终端
  • -d:分离模式,在后台运行
  • ecb7db5c716f:容器id
  • /bin/bash:用bash操作容器

注:最后的 /bin/bash 后面没有 /

八、退出容器

  1. # 方法一:(容器停止运行)
  2. exit
  3. # 方法二:(容器继续运行)
  4. ctrl + P + Q

九、查看容器内网ip信息

  1. docker inspect redis-master(容器ID)