Docker 常用命令总结
镜像相关
搜索
docker search *image_name*
下载
docker pull *image_name*
查看
docker images
docker image ls
删除
docker rmi *image_name*
docker image rm *image_name*
导出docker镜像
docker save *image_name* > /save/image/path/name.tar.gz
导入docker镜像
docker load < /save/image/path/name.tar.gz
提交创建的自定义的镜像
docker commit *container_id* *镜像名称*
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
[root@c7-dev ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB [root@c7-dev ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6ecddae6e645 centos "bash" 21 minutes ago Exited (0) About a minute ago boring_mestorf # 进入容器,执行一些安装的过程省略 # 对容器进行一些自定制的操作后,提交这个容器生成新的镜像 [root@c7-dev ~]# docker commit 6ecdd gandoufu/centos-wget sha256:bac2d675a9c230f0a60b0af35b5d4e3cb337d7c6f122a05b60a9172ddb9fbda0 [root@c7-dev ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6ecddae6e645 centos "bash" 24 minutes ago Exited (0) 4 minutes ago boring_mestorf [root@c7-dev ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE gandoufu/centos-wget latest bac2d675a9c2 16 seconds ago 328 MB docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB
# 将生成的新的镜像推送至远程仓库 [root@c7-dev ~]# docker login Username: gandoufu Password: Login Succeeded [root@c7-dev ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE gandoufu/centos-wget latest bac2d675a9c2 10 minutes ago 328 MB docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB [root@c7-dev ~]# docker tag bac2 gandoufu/centos7-wget:latest [root@c7-dev ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE gandoufu/centos-wget latest bac2d675a9c2 12 minutes ago 328 MB gandoufu/centos7-wget latest bac2d675a9c2 12 minutes ago 328 MB docker.io/centos latest 1e1148e4cc2c 6 days ago 202 MB docker.io/ubuntu latest 93fd78260bd1 3 weeks ago 86.2 MB docker.io/hello-world latest 4ab4c602aa5e 3 months ago 1.84 kB [root@c7-dev ~]# docker push gandoufu/centos7-wget The push refers to a repository [docker.io/gandoufu/centos7-wget] f79b6b9e2fa6: Pushing [==================================================>] 129.6 MB 071d8bd76517: Pushed
|
打标签时的注意事项:
docker tag bac2 gandoufu/centos7-wget
bac2 是镜像的id
gandoufu/centos7-wget 镜像的名称必须是自己的id名称/镜像名称
latest 默认版本号,可以不用加
容器相关
新建容器
docker create image_name
docker create -t -i image_name bash
docker run image_name
docker run image_name /bin/echo “haha”
docker run -it -d image_name
docker run -it -d –rm –name mydo image_name
使用create创建的容器,在使用时需要先start对应的容器;
使用run创建的容器,直接运行;如果指定的image_name不存在,则会去镜像仓库下载镜像,然后根据镜像创建容器。
参数说明:
i 进入交互模式
t 创建一个虚拟终端
d 后台运行
rm 退出后自动删除容器
name 创建的容器使用自定义的名字
注:i和t参数一起指定(-it),在实际操作时发现只指定i参数时,attach到实例时会出现卡死的情况。
进入容器
docker attach *container_id|container_name*
根据容器的id或名字进入指定的容器;如果容器处于未运行状态,需要先启动容器docker start container_id
1 2 3 4 5 6 7 8 9 10 11
|
[root@c7-dev ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aefe7162ed16 centos "bash" 22 minutes ago Exited (0) 3 seconds ago hungry_franklin [root@c7-dev ~]# [root@c7-dev ~]# docker start aefe aefe [root@c7-dev ~]# docker attach aefe
[root@c7-dev ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aefe7162ed16 centos "bash" 20 minutes ago Up 16 seconds hungry_franklin
|
使用运行的容器执行命令
docker exec *container_id* command
1 2 3 4 5
|
[root@c7-dev ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aefe7162ed16 centos "bash" 15 minutes ago Up 15 minutes hungry_franklin [root@c7-dev ~]# docker exec aefe date Wed Dec 12 14:04:12 UTC 2018
|
查看容器
docker ps
docker ps -a
docker ps -aq
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
[root@c7-dev ~]# docker run -it -d centos bash aefe7162ed163028c36741c26545dc0f1967ada0c985ce32cee5cf79666d2a3b [root@c7-dev ~]# docker create -it --name myubun ubuntu 3ba687940aed4a65bfc0656ea23ab627eab71ec4c3bd796ab107674503dd6f72 [root@c7-dev ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aefe7162ed16 centos "bash" 45 seconds ago Up 45 seconds hungry_franklin [root@c7-dev ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3ba687940aed ubuntu "/bin/bash" 9 seconds ago Created myubun aefe7162ed16 centos "bash" 47 seconds ago Up 47 seconds hungry_franklin [root@c7-dev ~]# docker ps -aq 3ba687940aed aefe7162ed16
|
停止容器
docker stop *container_id*
1 2 3 4 5 6 7
|
[root@c7-dev ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aefe7162ed16 centos "bash" 18 minutes ago Up 18 minutes hungry_franklin [root@c7-dev ~]# docker stop aefe aefe [root@c7-dev ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
删除容器
docker rm *container_id*
1 2 3 4 5 6 7 8 9
|
[root@c7-dev ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3ba687940aed ubuntu "/bin/bash" 16 minutes ago Created myubun aefe7162ed16 centos "bash" 17 minutes ago Up 17 minutes hungry_franklin [root@c7-dev ~]# docker rm myubun myubun [root@c7-dev ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aefe7162ed16 centos "bash" 17 minutes ago Up 17 minutes hungry_franklin
|
仓库相关
登录/退出仓库
docker [login/logout] [仓库地址]
1 2 3 4 5 6 7
|
[root@c7-dev ~]# docker login daocloud.io Username: gandoufu Password: Login Succeeded
[root@c7-dev ~]# docker logout daocloud.io Removing login credentials for daocloud.io
|
外部访问容器
先下载一个training/webapp镜像,用于测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
[root@c7-dev ~]# docker run -d -P training/webapp python app.py e8c1832a9814d61c61faf3d472b40c1164cd410caad855415f3bc56668f0cc2a [root@c7-dev ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e8c1832a9814 training/webapp "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:32768->5000/tcp tender_cori [root@c7-dev ~]# docker port e8c 5000/tcp -> 0.0.0.0:32768 [root@c7-dev ~]# docker top e8c1 UID PID PPID C STIME TTY TIME CMD root 1781 1767 0 10:19 ? 00:00:00 python app.py
[root@c7-dev ~]# docker run -d -p 8000:5000 --name flask training/webapp python app.py fef819097329bf7eb90fcf868a4a047b39e62b300c7e30105c38d1adf7fbf10e [root@c7-dev ~]# docker port fef8 5000/tcp -> 0.0.0.0:8000
|
通过webapp镜像创建运行容器,在容器内运行一个简单的web应用,端口为5000。
参数说明:
-P 会使用宿主机的一个随机端口映射到容器内的5000端口;外部访问ip+随机端口就可以访问容器内的外部应用
-p 指定外部端口与内部端口映射关系。外部端口:内部端口
硬件资源相关
显示容器硬件资源使用情况
docker stats [OPTIONS] [CONTAINER...]
1 2 3
|
[root@c7-dev ~]# docker stats --no-stream CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 3e7563aef10e 0.03% 10.9 MiB / 991.7 MiB 1.10% 2.59 kB / 2.22 kB 0 B / 0 B 1
|
如果不加--no-stream参数,会实时刷新显示资源使用情况。
更新容器的硬件资源限制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
# 创建容器的时候,限制内存 [root@c7-dev ~]# docker run -it -d -m 100M --memory-swap -1 --name mycent centos 32d70771e7c88b70caaca4c8e7428421a0906dde6358d77441104a6162032447 [root@c7-dev ~]# docker stats --no-stream 32d7 CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 32d7 0.00% 380 KiB / 100 MiB 0.37% 648 B / 648 B 0 B / 0 B 1
# 更新内存限制 [root@c7-dev ~]# docker update -m 200M --memory-swap -1 32d7 32d7 [root@c7-dev ~]# [root@c7-dev ~]# [root@c7-dev ~]# docker stats --no-stream 32d7 CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 32d7 0.00% 380 KiB / 200 MiB 0.19% 648 B / 648 B 0 B / 0 B 1
[root@c7-dev ~]# docker update -m 400M 32d7 Error response from daemon: Cannot update container 32d70771e7c88b70caaca4c8e7428421a0906dde6358d77441104a6162032447: Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same time
|
注意:指定限制内存大小并且设置 memory-swap 值为 -1,表示容器程序使用内存受限,而 swap 空间使用不受限制(宿主 swap 支持使用多少则容器即可使用多少。如果 –memory-swap 设置小于 –memory则设置不生效,使用默认设置)。
docker run -it --rm -m 100M ubuntu-stress:latest /bin/bash
如果不添加–memory-swap选项,则表示容器中程序可以使用100M内存和100Mswap内存,默认情况下,–memory-swap 会被设置成 memory 的 2倍。-m 为物理内存上限,而 –memory-swap 则是 memory + swap 之和,当压测值是 –memory-swap 上限时,则容器中的进程会被直接 OOM kill。
Docker命令参考表
docker命令选项列表
| 选项 | 说明 | 其他 |
| –config [string] |
客户端本地配置文件路径 |
默认为 ~/.docker |
| -D, –debug |
启用调试模式 |
|
| –help |
打印用法 |
|
| -H, –host list |
通过socket访问指定的docker守护进程(服务端) |
unix:// , fd:// , tcp:// |
| -l, –log-level [string] |
设置日志级别 (debug 、info 、warn 、error 、fatal) |
默认为 info |
| –tls |
启用TLS加密 |
|
| –tlscacert [string] |
指定信任的CA根证书路径 |
默认为 ~/.docker/ca.pem |
| –tlscert [string] |
客户端证书路径 |
默认为 ~/.docker/cert.pem |
| –tlskey [string] |
客户端证书私钥路径 |
默认为 ~/.docker/key.pem |
| –tlsverify |
启用TLS加密并验证客户端证书 |
|
| -v, –version |
打印docker客户端版本信息 |
用于管理的子命令列表
| 选项 | 说明 |
| container |
管理容器 |
| image |
管理镜像 |
| network |
管理容器网络(默认为bridge、host、none三个网络配置) |
| plugin |
管理插件 |
| system |
管理系统资源。其中, docker system prune 命令用于清理没有使用的镜像, 容器, 数据卷以及网络 |
| volume |
管理数据卷 |
| swarm |
管理Swarm模式 |
| service |
管理Swarm模式下的服务 |
| node |
管理Swarm模式下的docker集群中的节点 |
| secret |
管理Swarm模式下的敏感数据 |
| stack |
Swarm模式下利用compose-file管理服务 |
基础子命令列表
| 选项 | 说明 |
| attach |
进入运行中的容器, 显示该容器的控制台界面。注意, 从该指令退出会导致容器关闭 |
| build |
根据 Dockerfile 文件构建镜像 |
| commit |
提交容器所做的改为为一个新的镜像 |
| cp |
在容器和宿主机之间复制文件 |
| create |
根据镜像生成一个新的容器 |
| diff |
展示容器相对于构建它的镜像内容所做的改变 |
| events |
实时打印服务端执行的事件 |
| exec |
在已运行的容器中执行命令 |
| export |
导出容器到本地快照文件 |
| history |
显示镜像每层的变更内容 |
| images |
列出本地所有镜像 |
| import |
导入本地容器快照文件为镜像 |
| info |
显示 Docker 详细的系统信息 |
| inspect |
查看容器或镜像的配置信息, 默认为json数据 |
| kill |
-s 选项向容器发送信号, 默认为SIGKILL信号(强制关闭) |
| load |
导入镜像压缩包 |
| login |
登录第三方仓库 |
| logout |
退出第三方仓库 |
| logs |
打印容器的控制台输出内容 |
| pause |
暂停容器 |
| port |
容器端口映射列表 |
| ps |
列出正在运行的容器, -a 选项显示所有容器 |
| pull |
从镜像仓库拉取镜像 |
| push |
将镜像推送到镜像仓库 |
| rename |
重命名容器名 |
| restart |
重启容器 |
| rm |
删除已停止的容器, -f 选项可强制删除正在运行的容器 |
| rmi |
删除镜像(必须先删除该镜像构建的所有容器) |
| run |
根据镜像生成并进入一个新的容器 |
| save |
打包本地镜像, 使用压缩包来完成迁移 |
| search |
查找镜像 |
| start |
启动关闭的容器 |
| stats |
显示容器对资源的使用情况(内存、CPU、磁盘等) |
| stop |
关闭正在运行的容器 |
| tag |
修改镜像tag |
| top |
显示容器中正在运行的进程(相当于容器内执行 ps -ef 命令) |
| unpause |
恢复暂停的容器 |
| update |
更新容器的硬件资源限制(内存、CPU等) |
| version |
显示docker客户端和服务端版本信息 |
| wait |
阻塞当前命令直到对应的容器被关闭, 容器关闭后打印结束代码 |
| daemon |
这个子命令已过期, 将在Docker 17.12之后的版本中移出, 直接使用dockerd |
run命令常用选项
| 选项 | 说明 |
| -d |
后台运行容器, 并返回容器ID;不指定时, 启动后开始打印日志, Ctrl + C 退出命令同时会关闭容器 |
| -i |
以交互模式运行容器, 通常与 -t 同时使用; |
| -t |
为容器重新分配一个伪输入终端, 通常与 -i 同时使用 |
| –name “anyesu-container” |
为容器指定一个别名, 不指定时随机生成 |
| -h docker-anyesu |
设置容器的主机名, 默认随机生成 |
| –dns 8.8.8.8 |
指定容器使用的DNS服务器, 默认和宿主一致 |
| -e docker_host=172.17.0.1 |
设置环境变量 |
| –cpuset=”0-2” or –cpuset=”0,1,2” |
绑定容器到指定CPU运行 |
| -m 100M |
设置容器使用内存最大值 |
| –net bridge |
指定容器的网络连接类型, 支持 bridge / host / none / container 四种类型 |
| –ip 172.18.0.13 |
为容器分配固定ip(需要使用自定义网络) |
| –expose 8081 –expose 8082 |
开放一个端口或一组端口, 会覆盖镜像设置中开放的端口 |
| -p [宿主机端口]:[容器内端口] |
宿主机到容器的端口映射, 可指定宿主机的要监听的ip, 默认为 0.0.0.0 |
| -P |
注意是大写的, 宿主机随机指定一组可用的端口映射容器 expose 的所有端口 |
| -v [宿主机目录路径]:[容器内目录路径] |
挂载宿主机的指定目录(或文件)到容器内的指定目录(或文件) |
| –add-host [主机名]:[ip] |
为容器hosts文件追加host, 默认会在hosts文件最后追加 [主机名]:[容器ip] |
| –volumes-from [其他容器名] |
将其他容器的数据卷添加到此容器 |
| –link [其他容器名]:[在该容器中的别名] |
添加链接到另一个容器, 在本容器hosts文件中加入关联容器的记录, 效果类似于 --add-host |