后台启动容器

1
2
3
4
# docker run -d 容器名            
# 问题 使用docker ps 的时候发现启动的容器直接停止了
# 常见的坑 docker容器使用后台运行,就必须要有一个前台的进程,docker发现没有应用,就会自动停止
# nginx: 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

1
2
3
4
# 自己编写一个shell脚本 让你的进程一直在运行
docker run -d centos /bin/sh -c "while true;do echo 刘富贵666;sleep 2;done"
# 查看日志
docker logs -tf --tail number(查看日志的数量) 容器的id

查看容器中进程的进程详细信息

1
2
3
4
5
# 语法 docker top 容器id
root@again:~# docker top 7767f30883a1
UID PID PPID C STIME TTY TIME CMD
root 8601 8584 0 14:54 ? 00:00:00 /bin/sh -c while true;do echo 刘富贵666;sleep 2;done
root 8889 8601 0 15:00 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 2

查看镜像的元数据

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
210
211
# docker inspect 容器id

# 执行结果
docker inspect root@again:~# docker top 7767f30883a1
[
{
"Id": "7767f30883a125851fbac95ead97a98e7ab95f39bc9520b64d47c14829a5a20c",
"Created": "2020-10-26T06:54:43.42262062Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo 刘富贵666;sleep 2;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 8601,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-10-26T06:54:43.79458595Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
"ResolvConfPath": "/var/lib/docker/containers/7767f30883a125851fbac95ead97a98e7ab95f39bc9520b64d47c14829a5a20c/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/7767f30883a125851fbac95ead97a98e7ab95f39bc9520b64d47c14829a5a20c/hostname",
"HostsPath": "/var/lib/docker/containers/7767f30883a125851fbac95ead97a98e7ab95f39bc9520b64d47c14829a5a20c/hosts",
"LogPath": "/var/lib/docker/containers/7767f30883a125851fbac95ead97a98e7ab95f39bc9520b64d47c14829a5a20c/7767f30883a125851fbac95ead97a98e7ab95f39bc95a20c-json.log",
"Name": "/agitated_hugle",
"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,
"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": {
"LowerDir": "/var/lib/docker/overlay2/fe1f93611c38de59e0b0e36b853d71cc5cb4070b715adaa65e56aa2e61c5de1a-init/diff:/var/lib/docker/overlay2/d746bc6c681f401b91ae7f167af59d8539c275fbb07b8eec/diff",
"MergedDir": "/var/lib/docker/overlay2/fe1f93611c38de59e0b0e36b853d71cc5cb4070b715adaa65e56aa2e61c5de1a/merged",
"UpperDir": "/var/lib/docker/overlay2/fe1f93611c38de59e0b0e36b853d71cc5cb4070b715adaa65e56aa2e61c5de1a/diff",
"WorkDir": "/var/lib/docker/overlay2/fe1f93611c38de59e0b0e36b853d71cc5cb4070b715adaa65e56aa2e61c5de1a/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "7767f30883a1",
"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 刘富贵666;sleep 2;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200809",
"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": "7a6251459ed17b3d80bda3df80f540d6ac868d9b898034f3579b2aa671a0ecb6",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/7a6251459ed1",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "96e063b1a9fa7ffefe385ea6099871daabec4e9e0a0c20e7238bcabfebd53122",
"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": "b7b4c742dee5db72fc41b5cd4e4914c1060e7026e3b455d329bba56e90934290",
"EndpointID": "96e063b1a9fa7ffefe385ea6099871daabec4e9e0a0c20e7238bcabfebd53122",
"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
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#方式一

# 我们的容器通常都是使用后台方式运行的,需要进入容器,修改一些配置
# 执行命令以交互模式运行
docker exec -it 容器id /bin/bash
#执行结果
root@again:~# docker exec -it 7767f30883a1 /bin/bash
[root@7767f30883a1 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@7767f30883a1 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:54 ? 00:00:00 /bin/sh -c while true;do echo ?????????666;sleep 2;done
root 648 0 0 07:16 pts/0 00:00:00 /bin/bash
root 663 1 0 07:16 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 2
root 664 648 0 07:16 pts/0 00:00:00 ps -ef

#方式二

# 正在执行当前的的代码
docker attach 容器id

# 方式一 和 二的区别
# docker exec 开启一个新的终端(常用)
# 连接现有的正在执行的终端,不会启动新的进程

进入正在运行的命令并且不用进入容器就执行容器中的命令(意思就是不想进入容器执行命令咋办)

1
2
3
4
5
6
7
8
9
10
11
12
# 示例代码

[root@fugui001 nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b689cae35273 sky0429/nginx:final "/bin/bash" 34 seconds ago Up 32 seconds 8080/tcp, 0.0.0.0:9998->80/tcp nginx02

# 我们可以使用 -c 用引号引起来就是不用进入容器来进行操作
[root@fugui001 nginx]# docker exec b689cae35273 /bin/bash **-c 'cd /usr/local/nginx/sbin && ./nginx'**

[root@fugui001 nginx]# docker exec b689cae35273 /bin/bash **-c "cd /usr/local/nginx/sbin && ./nginx -v"**
nginx version: nginx/1.8.0
[root@fugui001 nginx]#

从容器内拷贝文件到虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
docker cp 容器id:容器内要拷贝内容的路径 目的的主机路径

#测试结果 注意退出容器,数据不会丢失
root@again:~# docker cp 7767f30883a1:/home/aacc.java /home
root@again:~# cd /home/
root@again:/home# ll
total 20
drwxr-xr-x 5 root root 4096 Oct 26 15:39 ./
drwxr-xr-x 23 root root 4096 Oct 13 14:02 ../
-rw-r--r-- 1 root root 0 Oct 26 15:37 aacc.java
drwxr-xr-x 5 999 root 4096 Oct 13 14:02 mariadb/
drwxr-xr-x 3 root root 4096 Sep 26 15:25 mtproxy/
drwxr-xr-x 6 root001 root001 4096 Oct 26 14:52 root001/