Docker

Docker 命令

Docker帮助命令

1
2
3
4
5
6
7
8
# 查看docker版本
> docker version

# 显示全系统信息
> docker info

# 显示 docker 的命令 及 功能说明
> docker --help

Docker 镜像命令

docker images

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 列出本机上的dokcer镜像
> docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
franklin5/lanproxy-client latest 824f595c81b3 2 years ago 550MB
siwatinc/ubuntu-playground latest 0b38ddad1c4c 2 years ago 262MB

# REPOSITORY 镜像仓库名称
# SIZE 镜像大小
# TAG 镜像当前版本,不同的版本可以在机器上共存
# IMAGE ID 镜像ID
# CREATED镜像最后更新时间

# 拉取指定版本
> docker pull tomcat:8.5

参数说明

-a

1
2
3
# 下面两个命令输出一样, -a 是默认选项
> docker images
> docker images -a

-q

显示镜像id,输出本机上所有的镜像id

1
2
3
> docker images -q
824f595c81b3
0b38ddad1c4c

镜像搜索命令

从镜像源网站搜索镜像

1
> docker search mysql

镜像拉取命令

从镜像源网站搜索镜像

1
> docker pull mysql

镜像删除命令

从镜像源网站搜索镜像。被删除的镜像必须不被容器依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
# 几种删除方式
> docker rmi 0b
> docker rmi 0b38ddad1c4c
> docker rmi franklin5/lanproxy-client
# 批量删除
> docker rmi 0b 82
> docker rmi 0b38ddad1c4c 824f595c81b3

# 全部删除镜像
# 有镜像id重复时(lastest与version相同)会不能删除
> docker rmi $(docker images -q)

> docker rmi -f $(docker images -q)

Docker 容器命令

启动容器命令

启动容器后,容器必须存在一个前台进程。如果不是运行挂起的命令,容器会自动退出。

1
> docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

参数说明

–name

指定容器名称

1
> docer run --name lanproxy-client franklin5/lanproxy-client

-d

后台运行容器,并返回容器ID,也启动守护式容器

1
> docer run -d --name lanproxy-client franklin5/lanproxy-client

-i,-t

-i以交互式模式运行容器,通产关于-t同时使用
-t为荣期重新分配一个伪输入终端

1
2
3
# 启动centos并进入/bin/bash目录
# 容器运行后,当前命令行会切换到容器交互终端
> docker run -it centos /bin/bash

-p

-p 宿主机端口:容器内部端口,可以理解为将容器内部的端口映射到宿主机的端口。这样就可以通过暴露的宿主机端口来访问docker容器

1
2
3
4
# eg: 8080为宿主机端口,9999为容器内部端口
# 比如容器内 tomcat运行在 9999端口
# 这时就可以在宿主机通过http://localhost:8080访问 tomcat
> docker run -it -p 8080:9999 centos /bin/bash

列出容器

docker ps 默认列出当前正在运行的容器

1
2
3
4
5
> docker ps [OPTIONS]
# 列出所有容器
> docker ps -a
# 列出所有容器id
> docker ps -aq

退出容器

1
2
# 退出并且关闭容器
> exit

Ctrl+P+Q 退出不关闭容器

启动/重启容器

操作已经run过的容器,可以通过run时指定的名称或者run时生成的ID来操作指定容器

1
2
3
4
5
> docker start 容器名称/ID
> docker restart 容器名称/ID
# eg
> docker start centos
> docker start 0b38ddad1c4c

停止容器

1
> docker stop 容器名称

删除/批量删除容器

如果需要删除正在运行的容器,需要使用-f参数

1
2
3
4
5
6
> docker rm 容器名称/ID
> docker rm -f 容器名称/ID
# 批量删除容器
> docker rm 0b38ddad1c4c 1g38ddad1c66
# 全部删除容器
> docker rm -f $(docker ps -aq)

查看容器日志

docker logs 容器ID/容器名称

1
2
3
4
5
6
7
8
9
10
11
# 先运行一个容器
> docker run -d --name centos01 centos /bin/sh -c "while true;do echo hello ^-^;sleep 2;done"

> docker logs centos01

# -t 加入时间戳
# -f 跟随最新的日志打印。这个会阻塞命令行,按Ctrl+C退出
> docker logs -tf centos01

# [--tail 数字n] 显示最后n条日志
> docker logs -tf --tail 10 centos01

查看容器内部正在运行的进程

1
> docker top 容器ID/容器名称

查看容器内部细节

docker inspect 容器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
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
> docker inspect centos01
[
{
"Id": "4ecb98ae217b218c440a7f4d898df1bc57cd2973a8ee16b839c425916a560741",
"Created": "2021-02-10T06:32:02.977247793Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hello ^-^;sleep 2;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 24695,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-02-10T06:32:03.485242521Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
"ResolvConfPath": "/var/lib/docker/containers/4ecb98ae217b218c440a7f4d898df1bc57cd2973a8ee16b839c425916a560741/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/4ecb98ae217b218c440a7f4d898df1bc57cd2973a8ee16b839c425916a560741/hostname",
"HostsPath": "/var/lib/docker/containers/4ecb98ae217b218c440a7f4d898df1bc57cd2973a8ee16b839c425916a560741/hosts",
"LogPath": "/var/lib/docker/containers/4ecb98ae217b218c440a7f4d898df1bc57cd2973a8ee16b839c425916a560741/4ecb98ae217b218c440a7f4d898df1bc57cd2973a8ee16b839c425916a560741-json.log",
"Name": "/centos01",
"RestartCount": 0,
"Driver": "btrfs",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Capabilities": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": null,
"Name": "btrfs"
},
"Mounts": [],
"Config": {
"Hostname": "4ecb98ae217b",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"while true;do echo hello ^-^;sleep 2;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20201204",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "14afbacd87e4fe863e5a0c1f178c8eb17bb5857ecba055f071675f430a9368c5",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/14afbacd87e4",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "4da2387a054e45620df86815a81709c18b8c92a685f872734c456e86552b3496",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "f5a30ff69277bc0f0a730fc604a4bbe5c7072a5269d0595208bf25973e9d3dbd",
"EndpointID": "4da2387a054e45620df86815a81709c18b8c92a685f872734c456e86552b3496",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]

以交互式命令行进入正在运行的容器

1
2
3
4
5
6
7
# 方式1
# 重新分配终端
> docker exec -it 容器名称/容器ID /bin/bash

# 方式2
# 附加到正在运行的终端。如果当前的终端是最后一个前台今晨,exit后,会退出容器。
> docker attach 容器名称/容器ID

复制容器文件到宿主机器

docker cp [-r] 容器名称/容器ID:容器内文件路径 目标宿主机路径

1
2
3
4
5
6
# 找到文件
> docker exec -it centos /bin/bash

# 复制文件
# 把容器centos01中的/var/log/anaconda/anaconda.log文件复制到宿主机/root/logs目录下
docker cp -r centos01:/var/log/anaconda/anaconda.log /root/logs

Docker镜像操作

  • 拉取一个base镜像
    > docker pull tomcat:8.5
  • 运行容器
    > docker run -d --name tomcat01 -p 8001:8080 tomcat
  • 修改容器内容
  • 提交修改,生成新的镜像
    格式: docker commit -m=’镜像描述’ -a=’作者名字’ 容器ID/容器名称 新镜像名称:[tag]
    > doc

Docker
https://jacksiongt.github.io/2021/04/30/Docker/
作者
Jacksion
发布于
2021年4月30日
许可协议