4.1 帮助命令
4.1.1 docker version
[root@boxiaoyuan ~]# docker version # 查看docker版本信息 Client version: 1.7.1 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 786b29d OS/Arch (client): linux/amd64 Server version: 1.7.1 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 786b29d OS/Arch (server): linux/amd64
4.1.2 docker help(重要)
# docker --help # docker 命令帮助 Commands: attach # 当前 shell 下 attach 连接指定运行镜像 build # 通过 Dockerfile 定制镜像 commit # 提交当前容器为新的镜像 cp # 从容器中拷贝指定文件或者目录到宿主机中 create # 创建一个新的容器,同run,但不启动容器 diff # 查看 docker 容器变化 events # 从 docker 服务获取容器实时事件 exec # 在已存在的容器上运行命令 export # 导出容器的内容流作为一个 tar 归档文件[对应 import ] history # 展示一个镜像形成历史 images # 列出系统当前镜像 import # 从tar包中的内容创建一个新的文件系统映像[对应 export] info # 显示系统相关信息 inspect # 查看容器详细信息 kill # kill 指定 docker 容器 load # 从一个 tar 包中加载一个镜像[对应 save] login # 注册或者登陆一个 docker 源服务器 logout # 从当前 Docker registry 退出 logs # 输出当前容器日志信息 port # 查看映射端口对应的容器内部源端口 pause # 暂停容器 ps # 列出容器列表 pull # 从docker镜像源服务器拉取指定镜像或者库镜像 push # 推送指定镜像或者库镜像至docker源服务器 restart # 重启运行的容器 rm # 移除一个或者多个容器 rmi # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除] run # 创建一个新的容器并运行一个命令 save # 保存一个镜像为一个 tar 包[对应 load] search # 在 docker hub 中搜索镜像 start # 启动容器 stop # 停止容器 tag # 给源中镜像打标签 top # 查看容器中运行的进程信息 unpause # 取消暂停容器 version # 查看 docker 版本号 wait # 截取容器停止时的退出状态值
4.1.3 docker info
# docker info # 显示 Docker 系统信息,包括镜像和容器数 Containers: 1 # 容器个数 Images: 22 # 镜像个数 Storage Driver: devicemapper # 存储驱动 Pool Name: docker-8:17-3221225728-pool Pool Blocksize: 65.54 kB Data file: /data/docker/devicemapper/devicemapper/data Metadata file: /data/docker/devicemapper/devicemapper/metadata Data Space Used: 1.83 GB Data Space Total: 107.4 GB Metadata Space Used: 2.191 MB Metadata Space Total: 2.147 GB Library Version: 1.02.84-RHEL7 (2014-03-26) Execution Driver: native-0.2 # 存储驱动 Kernel Version: 3.10.0-123.el7.x86_64 Operating System: CentOS Linux 7 (Core)
4.2 镜像命令
4.2.1 docker search
# docker search # 从 Docker Hub 搜索镜像 --automated:只列出automated build类型的镜像 --no-trunc:显示完整的镜像描述 -s:列出收藏数不小于指定值的镜像 示例: # docker search -s 100 ubuntu # 查找 star 数至少为 100 的镜像,找出只有官方镜像 start 数超过 100,默认不加 s 选项找出所有相关 ubuntu 镜像 NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Official Ubuntu base image 425 [OK]
4.2.2 docker pull && docker push
# docker pull #下载镜像 Usage: docker pull [OPTIONS] NAME[:TAG] Pull an image or a repository from the registry -a, --all-tags=false Download all tagged images in the repository
# docker push # push 推送指定镜像 Usage: docker push NAME[:TAG] Push an image or a repository to the registry 示例: # docker pull ubuntu # 下载官方 ubuntu docker 镜像,默认下载latest版本官方库镜像 # docker pull ubuntu:14.04 # 下载指定版本 ubuntu 官方镜像 # docker push 192.168.0.100:5000/ubuntu # 推送镜像库到私有源[可注册 docker 官方账户,推送到官方自有账户] # docker push 192.168.0.100:5000/ubuntu:14.04 # 推送指定镜像到私有源
4.2.3 docker images
列出本地主机上的镜像
# docker images Usage: docker images [OPTIONS] [NAME] List images -a, 列出本地所有的镜像(包括中间映像层) --digests:显示镜像的摘要信息 --no-trunc:显示完整的镜像信息 -q, 只显示镜像ID 示例: # docker images # 显示当前系统镜像,不包括过渡层镜像 # docker images -a # 显示当前系统所有镜像,包括过渡层镜像 # docker images ubuntu # 显示当前系统 docker ubuntu 库中的所有镜像 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 12.04 ebe4be4dd427 4 weeks ago 210.6 MB ubuntu 14.04 e54ca5efa2e9 4 weeks ago 276.5 MB ubuntu 14.04-ssh 6334d3ac099a 7 weeks ago 383.2 MB 各个选项说明: REPOSITORY:表示镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像ID CREATED:镜像创建时间 SIZE:镜像大小
同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像,如果不指定一个镜像的版本标签,例如只使用ubuntu,docker将默认使用ubuntu:latest镜像。
4.2.4 docker rmi
删除一个或者多个镜像
# docker rmi #删除一个或多个镜像 -f, # 强制移除镜像不管是否有容器使用该镜像 删除单个:docker rmi –f 镜像ID 删除多个:docker rmi –f 镜像名1:TAG 镜像名2:TAG 删除全部:docker rmi –f $(docker images -qa)
4.3 容器命令
[root@boxiaoyuan ~]# docker pull centos latest: Pulling from centos 28b0a3c5ee4c: Pull complete 1f2965b8bcc4: Pull complete ee2526f4865b: Pull complete Digest: sha256:b40cee82d6f98a785b6ae35748c958804621dc0f2194759a2b8911744457337d Status: Downloaded newer image for centos:latest [root@boxiaoyuan ~]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest d351d647d655 2 weeks ago 64.18 MB ubuntu 14.04 fe62d34455b7 7 weeks ago 188.2 MB centos 6 4f2ed42dccff 3 months ago 193.9 MB centos latest ee2526f4865b 3 months ago 201.8 MB hello-world latest 9f5834b25059 6 months ago 1.84 kB [root@boxiaoyuan ~]#
4.3.1 新建并启动容器
# docker run [OPTIONS] IMAGE [COMMAND][ARG…] OPTIONS说明(常用):有些是一个减号,有些是两个减号 --name=“容器新名字”:为容器指定一个名称; -d:后台运行容器,并返回容器ID,也即启动守护式容器; -i:以交互模式运行容器,通常与-t同时使用; -t:为容器重新分配一个伪输入终端,通常与-i同时使用; -P:随机端口映射; -p:指定端口映射,有一下四种格式 ip:hostPort:containerPort ip:containerPort hostPort:containerPort containerPort
示例:
创建一个内存限制512MB,主机名为test1,名为docker_test1后台运行bash的容器
[root@boxiaoyuan ~]# docker run -i -t -m 512M -h test1 -d --name docker_test1 centos /bin/bash d4736c5327b94e75d09cbea7540dd50fa7eb91a434a7af5a0ec03c24bf66b3f8
查看正在运行的容器 [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4736c5327b9 centos "/bin/bash" 16 seconds ago Up 15 seconds docker_test1
连接正在运行的容器 [root@boxiaoyuan ~]# docker attach docker_test1 [root@test1 /]# pwd / [root@test1 /]# exit exit [root@boxiaoyuan ~]#
4.3.2 列出当前所有正在运行的容器
# docker ps [option] # 列出当前所有正在运行的容器 OPTIONS说明(常用): -a:列出当前所有正在运行的容器+历史上运行过的 -l:显示最近创建的容器 -n:显示最近n个创建的容器 -q:静默模式,只显示容器编号 --no-trunc:不截断输出
可查看到正在运行的CentOS
[root@boxiaoyuan ~]# docker start d4736c5327b9 d4736c5327b9 [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4736c5327b9 centos "/bin/bash" 8 minutes ago Up 5 seconds docker_test1
4.3.3 退出容器
两种方式:
1.exit:容器停止并退出 2.ctrl+P+Q:容器不停止退出
示例:
容器停止退出
[root@boxiaoyuan ~]# docker attach d4736c5327b9 [root@test1 /]# exit exit
再次在宿主机上查看当前运行的docker进程,CentOS的状态已显示Exited
[root@boxiaoyuan ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4736c5327b9 centos "/bin/bash" 14 minutes ago Exited (0) About a minute ago docker_test1
容器不停止退出
重新启动CentOS容器 将该容器命名为 myCentOS
[root@boxiaoyuan ~]# docker run -it --name myCentOS centos
[root@cec6887925d9 /]#
另起终端,在宿主机终端查看当前运行的docker进程可以看到已启动成功
[root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" About a minute ago Up About a minute myCentOS
ctrl+P 再 ctrl+Q 此时回到宿主机终端
[root@cec6887925d9 /]# [root@boxiaoyuan ~]#
[root@boxiaoyuan ~]#
可再次查看当前运行的docker进程 并没有停止
[root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" About a minute ago Up About a minute myCentOS [root@boxiaoyuan ~]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" 3 minutes ago Up 3 minutes myCentOS d4736c5327b9 centos "/bin/bash" 19 minutes ago Exited (0) 6 minutes ago docker_test1
4.3.4 启动容器
docker start容器ID或者容器名
示例:
查看最近两次启动的容器,接下来启动容器id为d4736c5327b9的容器:
[root@boxiaoyuan ~]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" 5 minutes ago Up 5 minutes myCentOS d4736c5327b9 centos "/bin/bash" 20 minutes ago Exited (0) 7 minutes ago docker_test1 [root@boxiaoyuan ~]# docker start d4736c5327b9 d4736c5327b9 [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" 6 minutes ago Up 5 minutes myCentOS d4736c5327b9 centos "/bin/bash" 21 minutes ago Up 3 seconds docker_test1
4.3.5 重启容器
docker restart 容器ID或容器名
示例:
容器id为cec6887925d9的运行时间为7minutes:
[root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" 7 minutes ago Up 7 minutes myCentOS d4736c5327b9 centos "/bin/bash" 22 minutes ago Up About a minute docker_test1
docker restart 容器id/容器名称
[root@boxiaoyuan ~]# docker restart cec6887925d9 cec6887925d9 [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" 9 minutes ago Up 5 seconds myCentOS d4736c5327b9 centos "/bin/bash" 24 minutes ago Up 3 minutes docker_test1
容器id为cec6887925d9重启后,运行时间为 5 seconds。
4.3.6 停止容器(缓慢停止)
docker stop 容器ID或容器名
示例:
[root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" 11 minutes ago Up About a minute myCentOS d4736c5327b9 centos "/bin/bash" 26 minutes ago Up 5 minutes docker_test1 [root@boxiaoyuan ~]# docker stop d4736c5327b9 d4736c5327b9 [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" 12 minutes ago Up 3 minutes myCentOS
4.3.7 强制停止容器(迅速停止)
docker kill 容器ID或容器名
示例:
[root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" 13 minutes ago Up 4 minutes myCentOS [root@boxiaoyuan ~]# docker kill cec6887925d9 cec6887925d9 [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4.3.8 删除已停止的容器
docker rm 容器ID
一次性删除多个容器:
(1) docker rm –f $(docker ps -aq) (2) docker ps –aq | xargs docker rm
示例:
[root@boxiaoyuan ~]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cec6887925d9 centos "/bin/bash" 15 minutes ago Exited (137) About a minute ago myCentOS d4736c5327b9 centos "/bin/bash" 30 minutes ago Exited (137) 3 minutes ago docker_test1 [root@boxiaoyuan ~]# docker rm cec6887925d9 cec6887925d9 [root@boxiaoyuan ~]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4736c5327b9 centos "/bin/bash" 30 minutes ago Exited (137) 3 minutes ago docker_test1 fa0101ec9408 centos:6 "/bin/bash" 5 hours ago Exited (137) 5 hours ago adoring_mestorf
4.3.9 启动守护式容器
启动守护式进程 docker run -d 容器名
问题:使用docker ps -a进行查看,会发现容器已经退出
很重要的要说明的一点:docker容器后台运行,就必须有一个前台进程。
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动相应的service即可,例如service nginx start。
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他就的没事可做了,所以,最佳的方案是,将你要运行的程序以前台进程的形式运行。
示例:
[root@boxiaoyuan ~]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest d351d647d655 2 weeks ago 64.18 MB ubuntu 14.04 fe62d34455b7 7 weeks ago 188.2 MB centos 6 4f2ed42dccff 3 months ago 193.9 MB centos latest ee2526f4865b 3 months ago 201.8 MB hello-world latest 9f5834b25059 6 months ago 1.84 kB [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@boxiaoyuan ~]# docker run -d centos e3c14d53584d39c8d0dd5cbd7e51b75fa0bcd5fc1d870390048a1a43510b71b5 [root@boxiaoyuan ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e3c14d53584d centos "/bin/bash" 8 seconds ago Exited (0) 7 seconds ago pensive_engelbart d4736c5327b9 centos "/bin/bash" 34 minutes ago Exited (137) 7 minutes ago docker_test1 fa0101ec9408 centos:6 "/bin/bash" 5 hours ago Exited (137) 5 hours ago adoring_mestorf 635a6d6ecc18 centos:6 "/bin/bash" 5 hours ago Exited (0) 5 hours ago reverent_einstein bcd12a83d56a ubuntu:14.04 "/bin/bash" 5 hours ago Exited (0) 5 hours ago evil_meitner 3ea8b1a018bc hello-world "/hello" 6 hours ago Exited (0) 6 hours ago drunk_lumiere
4.3.10 查看容器日志
docker logs –f –t –tail 容器ID
说明:
-t 是加入时间戳
-f 跟随最新的日志打印
--tail 数字显示最后多少条
示例:
## 启动守护式容器,每隔2秒打印hello world,让容器在前台持续工作,容器即可不被杀死
[root@boxiaoyuan ~]# docker run -d centos /bin/bash -c "while true;do echo hello world;sleep 2;done" 6a98184a890015fd62ef3181fbbff43b31aa4f7e55c7b647be1afd212ba4fbe0 [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a98184a8900 centos "/bin/bash -c 'while 5 seconds ago Up 4 seconds angry_einstein 查看日志 [root@boxiaoyuan ~]# docker logs 6a98184a8900 hello world hello world hello world 加入时间戳 [root@boxiaoyuan ~]# docker logs -t 6a98184a89002019-07-06T09:42:33.009614392Z hello world 2019-07-06T09:42:35.010433313Z hello world 2019-07-06T09:42:37.011895800Z hello world 2019-07-06T09:42:39.013284338Z hello world 2019-07-06T09:42:41.015046406Z hello world 不停的追加 [root@boxiaoyuan ~]# docker logs -t -f 6a98184a89002019-07-06T09:43:05.032197099Z hello world 2019-07-06T09:43:07.033547771Z hello world 2019-07-06T09:43:09.034927764Z hello world 2019-07-06T09:43:11.036388252Z hello world 从倒数第3行开始追加 [root@boxiaoyuan ~]# docker logs -t --tail 3 6a98184a8900 2019-07-06T09:43:25.048735307Z hello world 2019-07-06T09:43:27.049003087Z hello world 2019-07-06T09:43:29.050668716Z hello world
4.3.11 查看容器内运行的进程
docker top 容器ID
示例:
[root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a98184a8900 centos "/bin/bash -c 'while 6 minutes ago Up 6 minutes angry_einstein [root@boxiaoyuan ~]# docker top 6a98184a8900 UID PID PPID C STIME TTY TIME CMD root 68889 53122 0 17:42 ? 00:00:00 /bin/bash -c while true;do echo hello world;sleep 2;done root 69200 68889 0 17:48 ? 00:00:00 sleep 2
4.3.12 查看容器内部的细节
docker inspect 容器ID
4.3.13 进入正在运行的容器并以命令行交互
docker exec –it 容器ID bashShell
重新进入docker attach 容器ID
区别:
attach:直接进入容器启动命令的终端,不会启动新的进程
exec:是在容器中打开新的终端,并且可以启动新的进程
示例:
进入正在运行的容器并进行命令的交互
[root@boxiaoyuan ~]# docker run -it centos /bin/bash [root@2b34c6a3990b /]# pwd /
ctrl+P 再 ctrl+Q
[root@2b34c6a3990b /]# [root@boxiaoyuan ~]# [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b34c6a3990b centos "/bin/bash" 14 seconds ago Up 13 seconds sick_yonath docker attach 容器id/容器名称,重新进入正在运行的容器
[root@boxiaoyuan ~]# docker attach 2b34c6a3990b [root@2b34c6a3990b /]# ls anaconda-post.log dev home lib64 mnt proc run srv tmp var bin etc lib media opt root sbin sys usr
另外一种方式进入
[root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b34c6a3990b centos "/bin/bash" About a minute ago Up About a minute sick_yonath [root@boxiaoyuan ~]# docker exec -it 2b34c6a3990b /bin/bash [root@2b34c6a3990b /]# [root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b34c6a3990b centos "/bin/bash" 2 minutes ago Up 2 minutes sick_yonath
不进入容器,并执行命令 [root@boxiaoyuan ~]# docker exec -it 2b34c6a3990b ls anaconda-post.log dev home lib64 mnt proc run srv tmp var bin etc lib media opt root sbin sys usr [root@boxiaoyuan ~]#
4.3.14 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
示例:
此处将容器内的 /tmp/yum.log 拷贝到 宿主机的 /root 下:
[root@boxiaoyuan ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b34c6a3990b centos "/bin/bash" 6 minutes ago Up 6 minutes sick_yonath [root@boxiaoyuan ~]# docker attach 2b34c6a3990b [root@2b34c6a3990b /]# cd /tmp/ [root@2b34c6a3990b tmp]# ls ks-script-eC059Y yum.log
ctrl+P 再 ctrl+Q [root@2b34c6a3990b tmp]# [root@boxiaoyuan ~]# [root@boxiaoyuan ~]# ls anaconda-ks.cfg install.log.syslog 模板 图片 下载 桌面 install.log 公共的 视频 文档 音乐
## docker cp 容器id/容器名称:容器文件 宿主机路径 (注意 容器id/容器名称 后面有个:) [root@boxiaoyuan ~]# docker cp 2b34c6a3990b:/tmp/yum.log /root/ [root@boxiaoyuan ~]# ls anaconda-ks.cfg install.log.syslog 公共的 视频 文档 音乐 install.log yum.log 模板 图片 下载 桌面
4.3.15 暂停和取消暂停一个容器
# docker pause CONTAINER # 暂停一个容器,方便 commit
# docker unpause CONTAINER # 取消暂停的容器
4.3.16 提交指定容器为镜像
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] # 提交指定容器为镜像 -a, --author="" Author (e.g., "John Hannibal Smith [email protected]") -m, --message="" Commit message -p, --pause=true Pause container during commit # 默认 commit 是暂停状态