[TOC]
0x01 Docker 命令结构图示
Docker 官方命令学习文档: https://docs.docker.com/engine/reference/commandline/cli/
0x02 Docker 常用命令一览
Docker 命令有两大类,客户端命令和服务端命令。
- 前者是主要的操作接口 :docker
- 后者用来启动 Docker Daemon(守护进程): dockerd
客户端命令:
[TOC]
Docker 官方命令学习文档: https://docs.docker.com/engine/reference/commandline/cli/
Docker 命令有两大类,客户端命令和服务端命令。
客户端命令:
[TOC]
Docker 官方命令学习文档: https://docs.docker.com/engine/reference/commandline/cli/
Docker 命令有两大类,客户端命令和服务端命令。
客户端命令:1
2
3
4#Usage:
$docker [OPTIONS] COMMAND [arg...]
$docker daemon [ --help | ... ] #二级命令的帮助
$docker [ --help | -v | --version ]
1 | #选项 |
基础实例:1
2# 实例1.客户端指定Docker deamon守护进程
docker -H docker.weiyigeek.top:2375
描述:利用 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
28$ docker info --format '{{json .}}'
$ 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"
]
}
由上反馈信息可以看出:
1 | $docker login http://localhost:5000 #连接并初始化hub.docker.com仓库需要输入用户名和密码认证,然后存放于/root/.docker/config.json 文件中直接更改也行 |
1 | # 基础语法 |
1 | $docker image ls #列出本机已有镜像 |
1 | # 基础语法 |
1 | $ docker history docker.io/mysql:5.7 #查看镜像修改记录 |
1 | # 基础语法 |
1 | # 基础语法 |
1 | $docker container ls -a #查看列出运行的容器 |
基础语法: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
18
19
20# 实例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的容器
# 4.配合用法匹配并重启容器
docker ps | grep -v pause | grep -E "etcd|scheduler|controller|apiserver" | awk '{print $1}' | awk '{print "docker","restart",$1}' | bash
1 | $docker attach [names] #采用 ps -a NAMES 进入容器 |
1 | $docker stats #查看容器监控资源信息(cpu 内存 网络流量等) |
1 | $docker top <container id|name> |
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
1 | # 基础语法 |
1 | $docker create -it repository[:tag] #创建容器但处于停止状态 |
1 | $docker start -a -i <container id|name> # 启动指定容器 |
1 | $docker kill <cantainer id> #强行终止容器可以直接发送SIGKILL信号来终止容器 |
1 | $docker save -o 保存文件名.tar [repository[:tag]] #将镜像文件打包存出到磁盘 |
1 | $docker rename my-nginx new-nginx |
1 | # 基础语法 |
基础实例1
2
3
4
5
6
7docker -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进行查看)
1 | # 基础语法 |
基础语法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Usage: 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
2
3# 更新故障重启策略
$docker update --restart=[always|no|on-failure|unless-stopped] 容器ID|容器名称 #推荐方式
$docker update --restart=[always|no|on-failure] 容器ID|容器名称 #更改容器启动模式
基础示例: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拷贝到容器
基础语法: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 #查看某时间段日志
基础语法:1
2
3
4
5
6
7Usage: 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
11
12
13# 示例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
# 示例3.删除全部已经停止的融容器
docker rm $(docker ps -f status=exited -q)
基础语法:1
2
3
4
5
6
7Usage: 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 #数据卷信息
基础语法:1
2
3
4#-t 指定仓库名和版本号
#-f 指定docker文件
#--target 指定构建xxx阶段
#--no-cache=true 构建阶段不使用缓存,即映像层不复用
基础实例:1
$docker build --target=builder -t weiyigeek/repo:version -f DockerFile . #dockerfile编译,非常注意上下文
基础语法: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
基础实例: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
基础实例: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.排空节点上的集群容器
docker@master-01:~$docker node update --availability drain j5auh1zg6qzvmzkf80wvpl9hr
基础实例: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.
基础示例:1
2
3
4
5
6# 示例1.获取service实例的Ip
[root@swarm-manager-node ~]$ 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
49$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) #删除没有运行的虚悬镜像(<none>)
# sha256:42260aae5eec1968898dea3494787dc272bf1eb6124e167acd941ac39fa78000
$docker rmi $(docker images -q -f "dangling=true") #删除没有运行的虚悬镜像(<none>)
# 42260aae5eec
# 数据卷
$docker volume ls #列出数据卷。
$docker volume create --driver local --name esdata2 # 采用 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 容器名字
你好看友,欢迎关注博主微信公众号哟! ❤
这将是我持续更新文章的动力源泉,谢谢支持!(๑′ᴗ‵๑)
温馨提示: 未解锁的用户不能粘贴复制文章内容哟!
方式1.请访问本博主的B站【WeiyiGeek】首页关注UP主,
将自动随机获取解锁验证码。
Method 2.Please visit 【My Twitter】. There is an article verification code in the homepage.
方式3.扫一扫下方二维码,关注本站官方公众号
回复:验证码
将获取解锁(有效期7天)本站所有技术文章哟!
@WeiyiGeek - 为了能到远方,脚下的每一步都不能少
欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】
或者个人公众号【WeiyiGeek】
联系我。
更多文章来源于【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】, 个人首页地址( https://weiyigeek.top )
专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注、转个发、赞个助】,这将对我的肯定,我将持续整理发布更多优质原创文章!。
最后更新时间:
文章原始路径:_posts/虚拟云容/云容器/Docker/n1.Docker常用命令参数一览表.md
转载注明出处,原文地址:https://blog.weiyigeek.top/2019/5-6-461.html
本站文章内容遵循 知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议