[TOC]

0x00 docker 命令一览

Docker 命令有两大类,客户端命令和服务端命令。

  • 前者是主要的操作接口 :docker
  • 后者用来启动 Docker Daemon(守护进程): dockerd

客户端命令:

1
2
3
4
#Usage:
$docker [OPTIONS] COMMAND [arg...]
$docker daemon [ --help | ... ] #二级命令的帮助
$docker [ --help | -v | --version ]


–help - Docker命令参数的帮助文档
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#选项
Options:
--config=~/.$docker Location of client config files #客户端配置文件的位置
-D, --debug=false Enable debug mode #启用Debug调试模式
-H, --host=[] Daemon socket(s) to connect to #守护进程的套接字(Socket)连接
-h, --help=false Print usage #打印使用帮助
-l, --log-level=info Set the logging level #设置日志级别
--tls=false Use TLS; implied by--tlsverify #
--tlscacert=~/.$docker/ca.pem Trust certs signed only by this CA #信任证书签名CA
--tlscert=~/.$docker/cert.pem Path to TLS certificate file #TLS证书文件路径
--tlskey=~/.$docker/key.pem Path to TLS key file #TLS密钥文件路径
--tlsverify=false Use TLS and verify the remote #使用TLS验证远程
-v, --version=false Print version information and quit #打印版本信息并退出


#命令
Commands:
attach Attach to a running container #当前shell下attach连接指定运行镜像
build Build an image from a $dockerfile #通过$dockerfile定制镜像
commit Create a new image from a container's changes #提交当前容器为新的镜像
cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container #创建一个新的容器,同run 但不启动容器
diff Inspect changes on a container's filesystem #查看$docker容器变化
events Get real time events from the server#从$docker服务获取容器实时事件
exec Run a command in a running container#在已存在的容器上运行命令
export Export a containers filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import)
history Show the history of an image #展示一个镜像形成历史
images List images #列出系统当前镜像
import Import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export)
info Display system-wide information #显示系统相关信息
inspect Return low-level information on a container or image #提取出容器或者镜像最顶层的元数据
kill Kill a running container #kill指定$docker容器
load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save)
login Register or log in to a $docker registry#注册或者登陆一个$docker源服务器
logout Log out from a $docker registry #从当前$docker registry退出
logs Fetch the logs of a container #输出当前容器日志信息
pause Pause all processes within a container#暂停容器
port List port mappings or a specific mapping for the CONTAINER #查看映射端口对应的容器内部源端口
ps List containers #列出容器列表
pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to a registry #推送指定镜像或者库镜像至$docker源服务器
rename Rename a container # rename 重命名一个容器
restart Restart a running container #重启运行的容器
rm Remove one or more containers #移除一个或者多个容器
rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
run Run a command in a new container #创建一个新的容器并运行一个命令
save Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)
search Search the $docker Hub for images #在$docker
hub中搜索镜像
start Start one or more stopped containers#启动容器
stats Display a live stream of container(s) resource usage statistics #统计容器使用资源
stop Stop a running container #停止容器
tag Tag an image into a repository #给源中镜像打标签
top Display the running processes of a container #查看容器中运行的进程信息
unpause Unpause all processes within a container #取消暂停容器
version Show the $docker version information#查看容器版本号
wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值
Run '$docker COMMAND --help' for more information on a command. #运行$docker命令在帮助可以获取更多信息

#后台运行
ctrl + p + ctrl + q

基础实例:

1
2
# 实例1.客户端指定Docker deamon守护进程
docker -H docker.weiyigeek.top:2375


info - docker守护进程全局参数信息

描述:利用 docker info 命令 Docker Client && Docker Server 信息一览:

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
$docker info
Client:
# DEBUG模式未启动
Debug Mode: false

Server:
# 容器数量与不同状态的数量
Containers: 1
Running: 0
Paused: 0
Stopped: 1
# 镜像数量
Images: 29
# 当前Docker版本
Server Version: 19.03.9
# 存储引擎
Storage Driver: overlay2
# 支持的文件系统建议使用xfs而非ext4
Backing Filesystem: xfs
Supports d_type: true
# 是否支持原生叠加Diff
Native Overlay Diff: true
# 日志引擎
Logging Driver: json-file
# Linux Control Groups 引擎:主要作用是限制、记录和隔离进程组(process groups)使用的物理资源(cpu、memory、IO 等)
Cgroup Driver: cgroupfs
# 插件
Plugins:
# 数据卷: local / nfs
Volume: local
# 网络选择:
Network: bridge host ipvlan macvlan null overlay
# 支持的日志引擎
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
# Swarm 集群状态
Swarm: inactive
# 容器运行时分类:目前使用最广泛的容器运行时。
Runtimes: runc
Default Runtime: runc
# 初始二进制文件
Init Binary: docker-init
# 容器版本:Containerd向docker提供运行容器的API,二者通过grpc进行交互
containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
# containerd最后会通过runc来实际运行容器。
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
# 初始化版本
init version: fec3683
# 安全选项
Security Options:
# seccomp(安全计算模式的缩写)是Linux内核的一种简单的沙箱机制。它是在Linux内核2中添加的。
seccomp
Profile: default
# 操作系统相关信息(系统版本、内核、架构、CPU、内存)、主机名称
Kernel Version: 5.7.0-1.el7.elrepo.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.943GiB
Name: k8s-yum-server
ID: XVC7:JFVY:NQO4:FH7N:KIWO:Q7XI:23GJ:6SZI:QLR5:5YLI:5HII:6LQT
# Docker 根目录
Docker Root Dir: /var/lib/docker
# 服务Debug选项
Debug Mode: false
# 默认images仓库
Registry: https://index.docker.io/v1/
Labels:
# 实验性
Experimental: false
# 私有仓库
Insecure Registries:
127.0.0.0/8
# 镜像Images仓库(优先级高)
Registry Mirrors:
https://xlx9erfu.mirror.aliyuncs.com/
# 启用在线恢复
Live Restore Enabled: false

获取指定信息:

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
$docker info -f "{{.Plugins|json}}" | jq .
{
"Volume": [
"local"
],
"Network": [
"bridge",
"host",
"ipvlan",
"macvlan",
"null",
"overlay"
],
"Authorization": null,
"Log": [
"awslogs",
"fluentd",
"gcplogs",
"gelf",
"journald",
"json-file",
"local",
"logentries",
"splunk",
"syslog"
]
}

由上反馈信息可以看出:

  • 使用的是overlay2存储驱动
  • docker的根目录是/var/lib/docker
  • 后端的文件系统是xfs


login - 连接并初始化hub仓库
lgout - 退出仓库连接
1
2
3
4
5
6
$docker login http://localhost:5000 #连接并初始化hub.docker.com仓库需要输入用户名和密码认证,然后存放于/root/.docker/config.json 文件中直接更改也行
$docker login -u 用户名 -p 密码 https://index.docker.io/
# 密码标准输入
$cat ~/my_password.txt | docker login --username foo --password-stdin

$docker logout


search - 公共镜像搜索
1
2
3
4
5
6
7
8
9
# 基础语法
$docker search [镜像名称] #搜索关于Archlinux镜像
# 支持的参数:
# --automated=false #仅仅显示自动创建的镜像(官方)
# --no-trunc=false #输出信息不截断显示
# -s,--stars=0 #指定仅显示评价为指定星级以上的镜像

# 基础实例
$docker search -s 10 ubuntu #搜索那些被收藏10次以上的ubuntu镜像


images - 本机镜像信息
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
$docker image ls   #列出本机已有镜像
$docker images -f [过滤] #列出本机已有镜像
# -q, --quiet Only show numeric IDs
# -f,--filter 过滤器参数
# --digests 镜像寻址识别符
# --format 以特定的格式显示 "table {{.ID}}} {{.Repository}}{{.Tag}}"

# 基础实例
$docker image ls # 查看本地所有镜像
$docker images # 查看docker镜像效果同上

$docker images -f since=mongo:3.2 #看到在mongo:3.2 之后建立的镜像
$docker images -f before=mongo:3.2 #看到在mongo:3.2 之前建立的镜像
$docker images -f label=com.example.version=0.1 #如果镜像构建时,定义了 LABEL ,还可以通过 LABEL 来过滤。
$docker images --format "{{.ID}}: {{.Repository}}" #直接列出镜像结果,并且只包含镜像ID和仓库名
# d06214a03e27: onlyoffice/documentserver
# 0301fb9a773e: ldapaccountmanager/lam
# e340e61b03c4: osixia/phpldapadmin
# 4c780dfa5f5e: osixia/openldap

docker images -q -f "dangling=true" #只显示悬空镜像数字id
docker image ls -q -f "dangling=true" #效果同上
# 30a048249000
# b38cf44fda73

docker images --digests alpine #显示镜像内容寻址识别符
# REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
# osixia/openldap latest sha256:9cf1631238e606cf8b58e4654b26e6eba7182eadafefffa662cd9784ea811eda 4c780dfa5f5e 9 months ago 275MB
# $docker inspect 4c7 | grep -a5 "9cf1631238e6" # 对应着内容识别符
# "RepoDigests": [
# "osixia/[email protected]:9cf1631238e606cf8b58e4654b26e6eba7182eadafefffa662cd9784ea811eda"
# ],

docker image rmi hello-docker #删除指定的hello-docker镜像

docker image prune #虚悬镜像清理
# WARNING! This will remove all dangling images.
# Are you sure you want to continue? [y/N] y
# Deleted Images:
# deleted: sha256:30a048249000dd36561bffaa9fecc7690a45ef12096849c77afd4543b0d2d9b0


pull - 镜像拉取
push - 镜像上传
1
2
3
4
5
6
7
# 基础语法
$docker pull username/[repository[:tag]] #获取Hub镜像如果不指定TAG将默认选择仓库中最新颁布的镜像
$docker push dockerHub用户/[images[:tag]] #上传镜像到docker hub仓库

# 基础示例
docker push WeiyiGeek/alpine-app:v1.0
docker push hub.WeiyiGeek.cn:5000/alpine-app:v1.0


history - 镜像修改信息查看
1
2
$docker history docker.io/mysql:5.7            #查看镜像修改记录
$docker history --no-trunc docker.io/mysql:5.7 #查看镜像修改记录具体信息(不截断显示)


commit - 容器修改提交
1
2
3
4
5
6
7
8
9
# 基础语法
$docker commit [option-选项] ContainerId [Repository[:Tag]]
$docker commit -m "xx" -a "oo" ContainerID(被修改过的ID) [Repository[:Tag]]
# -a,--author="作者"
# -m,--message="更改信息"
# -p,--pause=ture 提交时暂停容器Container运行

# 基础示例
docker commit -a "WeiyiGeek" -m "create /tmp/demo directory" alpine test:1.2 #防止悬空镜像加上镜像名称


tag - 镜像标签修改
1
2
3
4
5
6
# 基础语法
$docker tag 原仓库[:标签] 新仓库名[:标签] #为本地镜像添加一个新标签 [注意仓库名称必须小写]
$docker tag <image id> username/name:devel #修改镜像的标签

# 实际案例
docker tag alpine:latest hub.weiyigeek.top:5000/alpine-app:v8.5


container - 容器查看与管理
1
2
3
$docker container ls -a  #查看列出运行的容器
$docker container stop onlyoffice #停止正在运行的容器 docker stop 容器名称 效果相同
$docker container rm -v onlyoffice #删除已停止的容器机器和删除与容器关联的匿名卷 docker rm -v 容器名称 效果相同


ps - 容器相关信息进行查看

基础语法:

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
--format 为格式化输出。格式化选项(-format) 使用go模板来美化打印容器输出

# 补充说明:
# 过滤器:过滤标志(-f或-filter)格式为key=value,如果超过一个过滤,就传递多个标志(如-filter "foo=bar" -filter "bif=baz")
id (容器的id)
label
name(容器名称)
exited (整数-容器退出状态码,只有在使用-all才有用)
status 容器状态(created,restarting,running,paused,exited,dead)
ancestor ([:],or) 过滤从指定镜像创建的容器
before (容器的名称或id),过滤在给定id或名称之后创建的容器
isolation (default process hyperv) (windows daemon only)
volume (数据卷名称或挂载点),--过滤挂载有指定数据卷的容器
network192.(网络id或名称),过滤连接到指定网络的容器

# go模板
.ID 容器的ID
.Image 镜像的ID
.Command 容器启动的命令
.CreatedAt 创建容器的时间点
.RunngingFor 从容器创建到现在过去的时间
.Ports 暴露的端口
.Status 容器的状态
.Size 容器硬盘的大小
.Names 容器的名称
.Label 指定label的值
.Mounts 挂载到这个容器的数据卷名称


基础实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 实例1.显示本机上的所有容器ID运行的容器ID信息
$docker ps -aq --no-trunc
# -a 可以列出所有容器
# -l 可以列出最后一次运行的容器-历史运行
# -q 可以列出容器ID
#--no-trunc #显示完整的容器ID

# 实例2.基础用法
docker ps -aq #显示所有容器的ID
# 25d2d645bfc9
# dc1cc7e934aa
# f07e2b606e62
# 4a1a157c5e70

# 3.
docker ps -q -f status=exited #显示状态为已退出的容器
docker container ps -f "name=myimg" #过滤容器名字为myimg的容器


attach - 容器附加top信息查看
1
$docker attach [names]  #采用 ps -a NAMES 进入容器


stats - 容器监控资源信息查看
1
2
3
$docker stats  #查看容器监控资源信息(cpu 内存 网络流量等)
# CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
# 89bc1cc2018b nostalgic_easley 0.02% 64KiB / 1.795GiB 0.00% 1.31kB / 0B 0B / 0B 1


top - 查看容器进程信息
1
2
3
$docker top <container id|name>  
# UID PID PPID C STIME TTY TIME CMD
# root 15890 15873 0 09:36 pts/0 00:00:00 top


port - 容器端口查看
1
$docker port [容器名称] [内部端口]  #查看映射端口

基础示例:

1
2
3
4
5
6
7
# 示例1
docker port ldap-account-manager
# 80/tcp -> 0.0.0.0:8081

# 示例2
docker port ldap-account-manager 80
# 0.0.0.0:8081


inspect - 镜像与容器相关信息查看
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
# 基础语法
$docker inspect [image id|image name|CONTAINER ID | CONTAINER NAME] #获取镜像或者容器的详细信息

# (1) 参数`-f`获取单个属性返回JSON采用go模板语法
$docker inspect -f {{".Architecture"}} 550 #(images Id 前面3位)
$docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID or NAME>

# (2) 获取一个实例的MAC地址
$docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID

# (3) 获取绑定的映射的宿主机与虚拟机目录
$docker inspect data-volume -f 'Source:{{(index .Mounts 0).Source}}{{println}}Destination:{{(index .Mounts 0).Destination}}'
$docker inspect data-volume-1 -f '{{printf "Source:%s ---- Destination:%s" (index .Mounts 0).Source (index .Mounts 0).Destination}}'
# Source:/tmp/mnt_isolation ---- Destination:/tmp/tar/tmp/container/folder


# (4) 列出所有端口绑定
$docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' dc1
# 80/tcp -> 8081

# (5)主机信息
docker inspect --format 'Hostname:{{ .Config.Hostname }} Name:{{.Name}} IP:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dc1
# Hostname:dc1cc7e934aa Name:/ldap-account-manager IP:172.18.0.2

# (6) 获取JSON格式的分段
$docker inspect --format='{{json .Config.Env}}' dc1 | jq .
[
"PHPLDAPADMIN_HTTPS=false",
"PHPLDAPADMIN_LDAP_HOSTS=ldap-host",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"DEBIAN_FRONTEND=noninteractive",
"DEBUG="
]

# (7) swarm中获取获取service实例的Ip
$docker inspect ` docker service ps my-test -q` --format '{{range .NetworksAttachments}}{{.Addresses}}{{end}}' | cut -d '[' -f2|cut -d ']' -f1
# 10.255.0.7/16
# 10.255.0.8/16
# 10.255.0.9/16

# (8) 获取service示例的container ID (获取的是ID的全称,一般只要取ID前面12个字符就可以了)
$docker inspect ` docker service ps my-test -q` --format '{{ .Status.ContainerStatus.ContainerID }}'
# c6c18a74a465163757fe928fec9e633223200f92d1c59e5d2d77eabfaa5ae93a
# 5f558bb014ea3d3eef5c8d4bd70e2e3048d7fc6725538303be960ac658d93b32
# dde578bf60190a63ed5c8c


create - 创建容器
1
$docker create -it repository[:tag] #创建容器但处于停止状态


start - 启动容器
stop - 停止容器
pause - 暂停容器
unpause - 恢复容器
restart - 停止容器
1
2
3
4
5
6
7
8
$docker start -a -i <container id|name>   # 启动指定容器
# -a 参数 连接容器并打印输出或错误 -
# -i 参数 启动容器并进入交互模式

$docker stop <container id|name>  #停止容器
$docker restart <container id|name> #重启容器
$docker pause <container id|name> #暂停容器
$docker unpause <container id|name> #恢复容器
kill - 强行终止容器
1
$docker kill <cantainer id>  #强行终止容器可以直接发送SIGKILL信号来终止容器


save - 镜像导出 (带有原始layer信息)
load - 镜像导入
export - 容器导出 (不带原始layer信息且只有一层)
import - 容器导入
1
2
3
4
5
6
$docker save -o 保存文件名.tar  [repository[:tag]]  #将镜像文件打包存出到磁盘
$docker save [repository[:tag]] > 保存文件名 #将镜像文件打包存出到磁盘
$docker load -i 保存文件名.tar # --input 将打包的镜像文件进行载人
$docker load < 保存文件名.tar
$docker export <container id|name> >导出文件.tar #导出容器
$docker import - repository[:tag] #导入容器


rename - 容器名称重命名
1
$docker rename my-nginx new-nginx


run - 运行容器
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
# 基础语法
$docker run [组织名称]/<镜像名称>:[镜像标签]
# run参数使用解析如下:#
# -e 参数指定环境变量 VARIABLE=VALUE 也可采用 -env-file=FILE 设置文件
# -i 让容器的标准输入保持打开
# -t 让$docker分配一个伪终端ptty,并绑定到容器的标准输入上
# -d 即--detach参数即可后台运行,用户无法看到容器中的信息
# -c 运行一段shell命令 "while true;do echo 正在运行; sleep 1;done"
# -h HOSTNAME 或者 --hostname=HOSTNAME 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
# -v 设置宿主机映射到容器中的目录
# --rm 添加这个标记,容器会在停止后立即删除自身 (注意:与-d不能同时使用)
# --name 使用--name web 标记可以为容器重新命名
# --restart always|no|on-failure 容器出错自动重启(Docker 自启时候也启动)
# --network | --net=bridge|none|container:NAME_or_ID|host 配置容器的桥接模式
# --volumes-from [数据卷名称] #挂载的已存在的数据卷
# --mount #挂载数据卷到容器之中 type=bind,source=/src/webapp,target=/opt/webapp,readonly

# -c|--cpu-shares[=0] #调整容器使用 CPU 的权重
# --cpus decimal #cpu的数量
# --cpuset-cpus="0" #允许执行的cpu (0-3,0,1)
# --cpuset-mems="0" #允许执行的MEMs (0-3,0,1)
# --cpu-period=1000000 #限制CPU CFS(完全公平调度程序)周期
# --cpu-quota=950000 #限制CPU CFS(完全公平调度程序)配额
# --cpu-rt-period 1000000 #以微秒为单位限制CPU实时周期
# --cpu-rt-runtime 950000 #以微秒为单位限制CPU实时运行时


# -m|--memory[=MEMORY] #调整容器使用内存的大小 # -m 128m 指定容器运行内存为128m
# --memory-swap=125M #交换内存的限制

# --entrypoint 在容器中执行指定的应用
# --dns=IP_ADDRESS 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
# --dns-search=DOMAIN 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
# --link=CONTAINER_NAME:ALIAS 添加到另一个容器的连接

基础实例

1
2
3
4
5
6
7
docker -H docker.weiyigeek.top:2375 run -itd alpine sh    #指定守护进程运行alpine容器进行交互式界面
docker run --name hello hello-world "while true;do echo 正在运行; sleep 1;done" #运行hello-world镜像,产生一个容器名称hello实例(也可以通过镜像id前三位运行)
docker run -d -p 5000:5000 -restart always --name docker-repository registry /bin/sh -C "echo hello word" #守护态运行容器,当重启docker守护进程时容器将自动启动
docker run --entrypoint htpasswd registry -Bbn testuser testpassword #在registry中执行htpasswd且-Bbn为参数;
docker run -it --rm host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu #为运行的容器指定dns服务器

docker run -ti --name test --ulimit nproc=65535 centos:7 #在启动前来指定容器中ulimit nproc大小(ulimt -u进行查看)


exec - 在已运行的容器中执行命令
1
2
3
4
5
6
7
# 基础语法
$docker exec -it <Container-id> /bin/bash #$docker exec 至1.3版本起可以在容器中运行命令

# 基础实例
docker exec -it openldap bash
# [email protected]:/# whoami
# root


update - 更新一个或多个容器的配置

基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Usage:  docker update [OPTIONS] CONTAINER [CONTAINER...]
Options:
--blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int Limit the CPU real-time period in microseconds
--cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
-c, --cpu-shares int CPU shares (relative weight)
--cpus decimal Number of CPUs
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--kernel-memory bytes Kernel memory limit
-m, --memory bytes Memory limit
--memory-reservation bytes Memory soft limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--pids-limit int Tune container pids limit (set -1 for unlimited)
--restart string Restart policy to apply when a container exits

基础示例:

1
$docker update --restart=[always|no|on-failure] 容器ID|容器名称 #更改容器启动模式


cp - 容器与宿主机文件复制

基础示例:

1
2
$docker cp containerID[names]:/home/1.php /opt/php/   #把容器的1.php拷贝到宿主机opt目录
$docker cp opt/php/config.php container[ID|names]:/home/ #把宿主机的config.php拷贝到容器


logs - 容器日志持续查看

基础语法:

1
2
3
4
5
6
# -f, --follow     跟踪实时日志
# -t, --timestamps 显示时间戳
# --details 显示更多的信息
# --tail string 从日志末尾显示多少行日志, 默认是all
# --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
# --until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

基础示例:

1
2
3
4
$docker logs -f <Container-id>      #获取容器的输出信息 -f 不间断的显示容器日志
$docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID #查看指定时间后的日志,只显示最后100行
$docker logs --since 30m CONTAINER_ID #查看最近30分钟的日志
$docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID #查看某时间段日志


rmi - 本地镜像删除
rm - 删除本地已已停止的容器

基础语法:

1
2
3
4
5
6
7
Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] # 只有 -f | --no-prune 两个参数

# 参数:
# -f,--force=false 强制终止并删除一个运行中的容器[默认会发生SIGKILL信号]
# -l,--link=false 删除容器连接但保留容器
# -v,--volumes=false 同时删除容器挂载的数据卷

基础示例:

1
2
3
4
5
6
7
8
9
10
# 示例1
$docker rm <container id|name> #删除容器删除依赖该镜像的容器ID,前3位即可
$docker rm -vf [<image id>|<repository> #删除容器以及数据卷
$docker rmi [<image id>|<repository> ] #删除镜像 镜像id|仓库名称
$docker rmi -f <images id>   #不建议强行删除正在容器中运行的镜像文件

# 示例2
docker rmi -f test1:1.1
Untagged: test:1.1
Deleted: sha256:b38cf44fda73f18ffe7a32047d206d5bb974d10b2f64515c4de25cfa3dbe2b47


volume - 数据卷创建与管理

基础语法:

1
2
3
4
5
6
7
Usage:  docker volume COMMAND
#COMMAND
# create Create a volume
# inspect Display detailed information on one or more volumes
# ls List volumes
# prune Remove all unused local volumes
# rm Remove one or more volumes

基础示例:

1
2
3
$docker volume create my-vol #创建一个数据卷
$docker volume ls #查看数据线卷
$docker volume inspect 5be64caf #数据卷信息


build - 基于Dockerfile镜像构建

基础语法:

1
2
3
4
#-t 指定仓库名和版本号
#-f 指定docker文件
#--target 指定构建xxx阶段
#--no-cache=true 构建阶段不使用缓存,即映像层不复用

基础实例:

1
$docker build --target=builder -t weiyigeek/repo:version -f DockerFile .  #dockerfile编译,非常注意上下文


network - 容器网络设置

基础语法:

1
#-d 参数指定 Docker 网络类型,有 bridge 、 overlay(用于Swarm mode)

基础示例:

1
2
3
4
5
6
7
8
9
10
# 示例0.Docker网卡查看与网络类型详情
docker network
docker network inspect $(docker network ls -q)

# 示例1.创建指定类型的网络
$docker network create -d bridge [网络名称]

# 示例2.命令会在所连接的容器中创建新的网卡,以完成其与所指定网络的连接。
$docker network connect
$docker network connect frontend c2


swarm - 集群初始操作及其管理

基础实例:

1
2
3
4
5
# 建立swarm集群管理端
docker swarm init --advertise-addr 10.20.172.122

# 工作端加入到swarm集群中
docker swarm join --token SWMTKN-1-0w8bvf8gzw5hct845izbv38qvl45385r19p4gwo0v8fuwie68g-603ibqyz4od3mmnw1gmbahd8v 10.10.107.245:2377


node - 集群中机器节点查看

基础实例:

1
2
3
4
5
6
7
8
9
# 1.节点信息一览以及swarm控制者查看
$ docker node ls
# ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
# tqulwewuzrgayabjomy3xw55u * node2 Ready Active Leader(领导者) 19.03.12
# 7vp6qrabwp7ee2dkq0d1bf11l worker-01 Ready Active 19.03.12


# 2.排空节点上的集群容器
[email protected]:~$docker node update --availability drain j5auh1zg6qzvmzkf80wvpl9hr


stack - 集群中应用构建管理以及查看

基础实例:

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
# 1.在swarm集群中部署各个应用
docker stack deploy -c docker-compose.yml swarm-python-web

# 2.swarm 集群信息与swarm-python-web服务应用信息
docker stack ls
# NAME SERVICES ORCHESTRATOR
# swarm-python-web 1 Swarm

# 3.应用信息服务查看
docker stack services swarm-python-web
# ID NAME MODE REPLICAS IMAGE PORTS
# bzeeucg6n6s1 swarm-python-web_web replicated 5/5 python-web:latest *:80->8080/tcp

# 4.应用启动后的集群中各个节点里运行的容器状态
docker stack ps swarm-python-web
# ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
# xv3doqj787ae swarm-python-web_web.1 python-web:latest worker-02 Running Running 5 minutes ago
# njkppsnrf4nc swarm-python-web_web.2 python-web:latest worker-01 Running Running 5 minutes ago

# 5.删除在集群中部署的应用以及退出集群:
$docker stack rm $(docker stack ls --format "{{.Name}}")
Removing service swarm-python-web_web
Removing network swarm-python-web_webnet

# 6.控制节点或者工作节点退出swarm集群
docker swarm leave --force
Node left the swarm.


service - 查看swarm集群中的相关信息

基础示例:

1
2
3
4
5
6
# 示例1.获取service实例的Ip
[[email protected] ~]$ docker service ps my-test
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
t71gqufekv2o my-test.1 172.16.60.214:5000/kevin_nginx:latest swarm-node2 Running Running 16 seconds ago
9cuq2yf10d60 my-test.2 172.16.60.214:5000/kevin_nginx:latest swarm-manager-node Running Running 16 seconds ago
srt2yo817kpv my-test.3 172.16.60.214:5000/kevin_nginx:latest swarm-node1 Running Running 16 seconds ago

基础命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

#镜像容器查看#

#数据卷资源共享#

#镜像仓库删除#

#镜像导入导出#

#容器自动更新设置(不自启)

#容器日志查看#

#网络建设#

#系统清理#
$docker image prune # 删除 dangling 或所有未被使用的镜像 <none> 这样的镜像文件
$docker container prune # 删除所有退出状态的容器
$docker volume prune # 删除未被使用的数据卷(#无主的数据卷可能会占据很多空间,要清理请使用以下命令)
$docker system prune #清除容器缓存(包括停止的容器)

实际案例:

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
46
47
48
$docker container ls  当前正在运行的容器
$docker ps #列出正在运行的容器(如果创建容器中没有进程正在运行,容器就会立即停止)
$docker ps -a # 列出所有运行过的容器记录
$docker save centos > /opt/centos.tar.gz # 导出$docker镜像至本地
$docker load < /opt/centos.tar.gz #导入本地镜像到$docker镜像库
$docker stop `$docker ps -aq` # 停止所有正在运行的容器
$docker rm `$docker ps -aq` # 一次性删除所有容器记录
$docker rm $(docker ps -q -f status=exited) #删除已退出的镜像
$docker rmi `$docker images -aq` # 一次性删除所有本地的镜像记录
$docker rmi $(docker images --filter "dangling=true" -q --no-trunc) #
$docker rmi $(docker images -q -f "dangling=true") #删除没有运行的虚悬镜像(<none>)

#数据卷
$docker volume ls #列出数据卷。
$docker volume rm $(docker volume ls -qf dangling=true)

$docker network ls #网络连接类型以及ID

删除容器:docker container rm $(docker container ls -a -q)
删除镜像:docker image rm $(docker image ls -a -q)
删除数据卷:docker volume rm $(docker volume ls -q)
删除网络:network rm $(docker network ls -q)

#执行这个命令前系统中所有的容器都已停止,那么这个命令就会移除所有的资源
$ docker system prune --all --force --volumns
#首先使用最简单的方法,清理当前未运行的所有$docker容器,写入到用户的 ~/.bashrc 文件中就可以了!
alias docker-clean-unused='docker system prune --all --force --volumes'
alias docker-clean-all='docker stop $(docker container ls -a -q) && docker system prune --all --force --volumes'
$ docker system df -v #列出每个镜像,容器,数据卷,缓存占用的磁盘空间;

Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
test 1.2 30a048249000 43 minutes ago 7.374MB 7.374MB
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
39e4f473e34f test1 "top -b sh" 0 0B 56 minutes ago Exited (1) 56 minutes ago unruffled_bhabha
Local Volumes space usage:

VOLUME NAME LINKS SIZE
a4974599165f539b98fd57fc53ccc073a7e8cdf4cd36cbc5e349fb8d4f6a1325 0 2.51MB


#docker 容器自启动设置
docker run -–restart=always
#假如此时你的容器已经启动可以通过update命令进行修改,两种方式都可以;
docker update -–restart=always redis
docker update -restart=no mysql8.x
docker container update --restart=always 容器名字


Docker 命令结构图示

WeiyiGeek.命令一张图表示

WeiyiGeek.命令一张图表示