docker的基本命令

Docker的常用命令

一、帮助命令


1
2
3
docker version # 显示docker的版本
docker info
docker 命令 --help # 万能命令

二、镜像命令


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
# 查看镜像
docker images # 列出所有镜像
docker images -a
docker images -aq # 只显示镜像id
# 搜索镜像
docker search --filter=STARS=3000 #搜索镜像star大于3000
# 下载镜像
docker pull 镜像[:tag] # 如果不写tag 默认是 latest
[root@localhost ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载,docker image的核心 联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
# 删除镜像
docker rmi -f 容器id # 删除指定的镜像
docker rmi -f 容器id 容器id 容器id # 删除多个的镜像
docker rmi -f $(docker images -aq) # 删除全部镜像

三、容器命令

新建容器并启动

1
2
3
4
5
6
7
8
9
10
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字 tomcat01 tomcat02 用来区分容器
-d 后台运行方式
-it 使用交互式运行 进入容器查看内容
-p 指定容器的端口 -p 8080:8080
—P 主机端口:容器端口
-p 容器端口
容器端口
-P 随机端口

列出所有的运行的容器

1
2
3
4
5
6
7
8
9
10
11
12
# docker ps 命令
# 列出当前正在运行的容器
-a # 列出当前正在运行的容器+带历史运行过的容器
-n=? # 最近创建过的容器
-q # 只显示容器的编号
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -aq
1a8af1ce6330
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a8af1ce6330 centos "/bin/bash" 12 minutes ago Exited (127) About a minute ago zealous_bartik

退出容器

1
2
exit #直接容器停止并退出
Ctrl + P + Q #容器不停止退出

删除容器

1
2
3
docker rm 容器id       			# 删除指定容器
docker rm -f $(docker ps -aq) # 删除全部容器
docker ps -a -q|xargs docker run # 删除全部容器(linux命令)

启动和停止容器的操作

1
2
3
4
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id

四、常用其他命令

后台启动容器
1
2
3
4
5
# docker run -d 镜像名
[root@localhost ~]# docker run -d centos
# 问题docker ps ,发现 centos 停止了
# 常见的坑, docker 容器使用后台运行,就必须要有一个前台进程,docker 发现没有应用,就会自动停止
# nginx 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
1
2
3
4
5
6
7
8
9
10
11
12
docker logs
# 自己编写一段shell脚本
[root@localhost ~]# docker run -d centos /bin/sh -c "while true; do echo test;sleep 1;done"
# 查看当前在运行的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9916a0298bfd centos "/bin/sh -c 'while t…" 19 seconds ago Up 18 seconds condescending_curie
113e7bdad55e centos "/bin/bash" 12 minutes ago Up 12 minutes serene_pasteur
# 显示日志
-tf
--tail number # 要显示日志的条数
[root@localhost ~]# docker logs -f -t --tail 10 113e7bdad55e
查看容器中进程信息
1
2
3
4
# 命令 docker top 容器id
[root@localhost ~]# docker top 9916a0298bfd
UID PID PPID C STIME
root 180675 180655 0 20:05 root 183113 180675 0 20:44
查看镜像的元数据
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
204
205
206
207
208
209
# 命令 docker inspect 容器id
[root@localhost ~]# docker inspect 9916a0298bfd
[
{
"Id": "9916a0298bfd3fb37d142bdd8bc056a5c943f8aa3c08bc7e1bb75081ee2a3ed0",
"Created": "2022-03-23T00:05:18.49632074Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo test;sleep 1;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 180675,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-03-23T00:05:19.263635448Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/9916a0298bfd3fb37d142bdd8bc056a5c943f8aa3c08bc7e1bb75081ee2a3ed0/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/9916a0298bfd3fb37d142bdd8bc056a5c943f8aa3c08bc7e1bb75081ee2a3ed0/hostname",
"HostsPath": "/var/lib/docker/containers/9916a0298bfd3fb37d142bdd8bc056a5c943f8aa3c08bc7e1bb75081ee2a3ed0/hosts",
"LogPath": "/var/lib/docker/containers/9916a0298bfd3fb37d142bdd8bc056a5c943f8aa3c08bc7e1bb75081ee2a3ed0/9916a0298bfd3fb37d142bdd8bc056a5c943f8aa3c08bc7e1bb75081ee2a3ed0-json.log",
"Name": "/condescending_curie",
"RestartCount": 0,
"Driver": "overlay2",
"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,
"CgroupnsMode": "host",
"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": {
"LowerDir": "/var/lib/docker/overlay2/2db2e17cdb47f8a05997664e4e31dc8f59b611e2d23388bc52b56c4407d27cc3-init/diff:/var/lib/docker/overlay2/e75ba16da0fef020c7930a9b6190dbd33a83a8324702c144c689c5cd4e323146/diff",
"MergedDir": "/var/lib/docker/overlay2/2db2e17cdb47f8a05997664e4e31dc8f59b611e2d23388bc52b56c4407d27cc3/merged",
"UpperDir": "/var/lib/docker/overlay2/2db2e17cdb47f8a05997664e4e31dc8f59b611e2d23388bc52b56c4407d27cc3/diff",
"WorkDir": "/var/lib/docker/overlay2/2db2e17cdb47f8a05997664e4e31dc8f59b611e2d23388bc52b56c4407d27cc3/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "9916a0298bfd",
"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 test;sleep 1;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20210915",
"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": "f28f51fd2c85ab7e8ba88827ec901c9ef4b517428747bd1cdf5196810db622c7",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/f28f51fd2c85",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "41b020afb72dc9602f5a030e56d816692170c2f0427377829da822e62976732a",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "d91d646c67beba9f1d4aa5cfa191bad1f24cf153ae1c6e3a37cf34599502a27f",
"EndpointID": "41b020afb72dc9602f5a030e56d816692170c2f0427377829da822e62976732a",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
}
}
}
]
进入当前正在运行的容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id bashShell
# 测试
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9916a0298bfd centos "/bin/sh -c 'while t…" About an hour ago Up About an hour condescending_curie
113e7bdad55e centos "/bin/bash" About an hour ago Up About an hour serene_pasteur
[root@localhost ~]# docker exec -it 9916a0298bfd /bin/bash
[root@9916a0298bfd /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 00:05 ? 00:00:01 /bin/sh -c while true; do echo test;sleep 1;done
root 4061 0 0 01:12 pts/0 00:00:00 /bin/bash
root 4088 1 0 01:12 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 4089 4061 0 01:12 pts/0 00:00:00 ps -ef

# 方式二
docker attach 容器id
正在执行当前的代码...
# docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach # 进入容器正在执行的终端,不会启动新的进程
从容器内烤贝文件到主机上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

docker cp b4bb1f3f7685:/home/test.java /home
#进入docker容器内
[root@b4bb1f3f7685 /]# cd /home
[root@b4bb1f3f7685 home]# ls
# 创建java文件
[root@b4bb1f3f7685 home]# touch test.java
[root@b4bb1f3f7685 home]# ls
test.java
[root@b4bb1f3f7685 home]# exit
exit
docker cp 容器id:容器内部路径 目的的主路径
[root@localhost home]# docker cp b4bb1f3f7685:/home/test.java /home
[root@localhost home]# ls
shawn test.java

五、安装服务器软件

安装Tomcat
1
2
3
4
5
# 官方的使用
docker run -it --rm tomcat:9.0
# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到 docker run -it --rm 一般用来测试,用完就删除
#下载在启动
docker pull tomcat:9.0
安装es+kibana
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
# es 暴露的端口很多
# es 十分的耗内存
# es 的数据一般需要放置到安全目录 挂载
# --net somenetwork 网路配置

# 启动 elasticsearch
[root@localhost ~]# docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

# 启动了 linux就卡住了 docker stats 查看cpu的状态

# es 是十分耗内存的 1.xG 1核2G

# 查看 docker stats

# 测试一下es是否成功了
[root@localhost ~]# curl localhost:9200
{
"name" : "6620e2b536c4",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "9i4LLjxvTVKf46Hp1qHkqA",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
# 赶紧关闭,增加内存的限制,修改配置文件 -e 环境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -e "discovery.type=single-node" elasticsearch:7.6.2
可视化

docker 图形化界面管理工具!提供一个后台供我们操作

1
2
[root@localhost ~]# docker run -d -p 8090:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer