Docker 常用命令总结 Docker 常用命令总结

Docker 常用命令总结
Docker 常用命令总结

 Docker 常用命令总结
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] 设置日志级别 (debuginfowarnerrorfatal) 默认为 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
Docker 常用命令总结
Docker 常用命令总结

Docker 常用命令总结
Docker 常用命令总结