启动守护式容器
使用某个镜像的后台模式启动一个容器
docker run -d [镜像名]
以我们现有的centos镜像为例,我们发现使用这种模式启动运行一个镜像返回了实例信息,说明成功了。但是我们没有看到docker ps中有这个刚启动的实例。原因是我们没有以交互模式进入容器,而是通过后台启动,启动运行之后,这个容器已经运行完了,自己结束了。
用docker ps -a 进行查看,发现容器已经退出了:
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker run -d centos
a45a5db25de8d5cfd233e748d1c26609701f91c66b9f3bab72f2055cf189fe82
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
Docker容器后台运行,就必须在容器内有一个前台进程。容器运行的命令必须是那些一直挂起的命令(如top、tail),否则就会自动退出。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务,只要配置相应的service即可。例如 service nginx start
但是这样做,nginx为后台进程模式运行,就导致docker容器前台没有运行应用。这样的容器通过后台模式启动后,会立即结束,因为它无事情可做了。
所以最佳的解决方案是,将你要运行的程序在容器中以前台进程的形式运行。
(本文出自oschina博主happybks的博文:https://my.oschina.net/happyBKs/blog/3014246,转载请在文章开头显著位置注明正确出处)
查看容器日志
docker logs -f -t --tail [容器id]
-t 是加入时间戳
-f 跟随最新的日志打印
--tail 数字显示最后多少条
我们先想想弄一个什么进程到容器内的前台运行,能够持续运行不结束,以使得容器也不结束运行。
这里我们就用到了docker run的另一个参数-c,意思是启动容器后在容器内运行某个命令command,或者运行某个shell代码段。当然还需要制定用什么运行,比如运行shell代码块,需要指明\bin\sh
例如,我以后台模式运行一个镜像的实例,该容器正常启动,我查看docker容器进程,发现它虽然是后台模式启动但仍然活着,原因就是我们在启动容器的时候指定了容器内在容器启动后运行一个shell脚本,脚本内容是循环执行每两秒钟打印hello happyBKs,这个循环一直不结束,容器内的前台进程一直存在,容器也就不会结束一直活着。
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker run -d centos /bin/sh -c "while true;do echo hello happyBKs;sleep 2;done"
62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
62ba7bb94bcf centos "/bin/sh -c 'while t…" 6 seconds ago Up 4 seconds trusting_noyce
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
接下来我们来查看容器内的日志。
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker logs 62ba7bb94bcf
hello happyBKs
hello happyBKs
hello happyBKs
hello happyBKs
很长很长,此处省略很多行
hello happyBKs
hello happyBKs
hello happyBKs
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
如果你觉得太长了,如果你需要看日志的打印时间,如果你希望像linux命令那样动态查看日志更新的最后几行,请使用:
--tail 是将最新的、在末尾的n条打印出来。
-f 会让打印日志一直处于前台监控中,持续输出。此时行数会继续增加,不受--tail的约束。
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker logs -t -f --tail 3 62ba7bb94bcf
2019-02-24T13:27:46.490080464Z hello happyBKs
2019-02-24T13:27:48.492482165Z hello happyBKs
2019-02-24T13:27:50.494961946Z hello happyBKs
2019-02-24T13:27:52.497321137Z hello happyBKs
2019-02-24T13:27:54.499800502Z hello happyBKs
2019-02-24T13:27:56.502329416Z hello happyBKs
^C
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
这里顺便提一下,我们用启动时传入的命令或者shell代码,会在docker ps中体现:
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
62ba7bb94bcf centos "/bin/sh -c 'while t…" 10 minutes ago Up 10 minutes trusting_noyce
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
查看容器内运行的进程
docker top [容器id]
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker top 62ba7bb94bcf
UID PID PPID C STIME TTY TIME CMD
root 31174 31156 0 21:21 ? 00:00:00 /bin/sh -c while true;do echo hello happyBKs;sleep 2;done
root 31875 31174 0 21:35 ? 00:00:00 sleep 2
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
查看容器的内部细节
docker inspect [容器id]
docker容器就像是一个同心卷儿,一层套一层。我们想要查看容器的详细信息,可以使用inspect命令。
具体的我们放到以后的文章中展开讲。
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker inspect 62ba7bb94bcf
[
{
"Id": "62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23",
"Created": "2019-02-24T13:21:02.490920581Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hello happyBKs;sleep 2;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 31174,
"ExitCode": 0,
"Error": "",
"StartedAt": "2019-02-24T13:21:03.913983396Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb",
"ResolvConfPath": "/var/lib/docker/containers/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23/hostname",
"HostsPath": "/var/lib/docker/containers/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23/hosts",
"LogPath": "/var/lib/docker/containers/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23-json.log",
"Name": "/trusting_noyce",
"RestartCount": 0,
"Driver": "btrfs",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"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,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "shareable",
"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,
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/asound",
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": null,
"Name": "btrfs"
},
"Mounts": [],
"Config": {
"Hostname": "62ba7bb94bcf",
"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 happyBKs;sleep 2;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20181205",
"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": "34abeb7aac0cb1347e69a5e4c95e7c8417e4ddd7c01662c91e06f25f11e5485b",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/34abeb7aac0c",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "cb0237dcf5c368cd4eeb85df53db991215b362d7a17a5bae4d8463f33a19b46a",
"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": "f862fd9cba11d2e4a151cad0e0d6cdbf8a9c967529a89151ee4bfd520d955acb",
"EndpointID": "cb0237dcf5c368cd4eeb85df53db991215b362d7a17a5bae4d8463f33a19b46a",
"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
}
}
}
}
]
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
进入正在运行的容器并以命令行进行交换
我们先将刚才的容器停了,然后重新启动一个。
以命令行的方式进行交互启动,docker run -it [镜像名] /bin/bash
/bin/bash是指以命令行方式交互,默认可以省略,即我们一直用的docker run -it [镜像名]
然后我们开始我们的示例操作:
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker kill 62ba7bb94bcf
62ba7bb94bcf
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker run -it centos /bin/bash
[root@a09b570600a7 /]#
[root@a09b570600a7 /]#
[root@a09b570600a7 /]# cd tmp/
[root@a09b570600a7 tmp]# ll
total 4
-rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP
-rw------- 1 root root 0 Dec 5 01:36 yum.log
[root@a09b570600a7 tmp]#
[root@a09b570600a7 tmp]#
[root@a09b570600a7 tmp]# touch happybks.txt
[root@a09b570600a7 tmp]# echo "hi happyBKs" >> happybks.txt
[root@a09b570600a7 tmp]# ll
total 8
-rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt
-rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP
-rw------- 1 root root 0 Dec 5 01:36 yum.log
[root@a09b570600a7 tmp]#
[root@a09b570600a7 tmp]# neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
在启动容器中,我们以交互模式进入了容器命令行,我们偷偷在/tmp建了一个文件,并写入了一句话。然后我们不关闭容器的方式Ctrl+P,Q退出交互模式。
如果我们想再次进入容器进行命令操作怎么办呢?
方式1:进入正在运行的容器
docker attach [容器id]
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a09b570600a7 centos "/bin/bash" 15 minutes ago Up 15 minutes infallible_leavitt
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker attach a09b570600a7
[root@a09b570600a7 tmp]#
[root@a09b570600a7 tmp]# ll
total 8
-rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt
-rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP
-rw------- 1 root root 0 Dec 5 01:36 yum.log
[root@a09b570600a7 tmp]# cat happybks.txt
hi happyBKs
[root@a09b570600a7 tmp]#
[root@a09b570600a7 tmp]#
[root@a09b570600a7 tmp]#
[root@a09b570600a7 tmp]#
[root@a09b570600a7 tmp]# read escape sequence
neil@linux-famw:~>
neil@linux-famw:~>
如果你只是想操作一个命令,会不会觉得这样进入容器、输入命令、再Ctrl +PQ的方式太麻烦,还有一种在容器外宿主机上对正在运行的容器执行一个容器内命令的方法。
方式2:在宿主机执行一个容器内的命令
docker exec -t [容器id] [容器内的命令]
neil@linux-famw:~>
neil@linux-famw:~> docker exec -t a09b570600a7 ll
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"ll\": executable file not found in $PATH": unknown
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a09b570600a7 centos "/bin/bash" 24 minutes ago Up 24 minutes infallible_leavitt
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker exec -t a09b570600a7 ls -l /tmp
total 8
-rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt
-rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP
-rw------- 1 root root 0 Dec 5 01:36 yum.log
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker exec -t a09b570600a7 cat /tmp/happybks.txt
hi happyBKs
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
我们尝试了ls和cat命令,从宿主执行容器内的ls和cat命令都成功的将容器内的命令行返回内容 返回到了宿主机的命令行。但是我们发现一些linux的扩展命令有的并不支持,例如ll
这里需要说一下,其实docker exec命令并不是不能进入容器内,相反,它更为强大。我们可以用exec进入容器,就像之前attach一样。
顺便说一下,-it的-i是交互,-t是启动终端。如果你写-t,你也能进入容器内,但是你无法输入任何命令,现象有点像卡住了,其实是你命令没有启用交互-i造成的。
neil@linux-famw:~> docker exec -it a09b570600a7 /bin/bash
[root@a09b570600a7 /]#
[root@a09b570600a7 /]#
[root@a09b570600a7 /]# cd /tmp
[root@a09b570600a7 tmp]# ll
total 8
-rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt
-rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP
-rw------- 1 root root 0 Dec 5 01:36 yum.log
[root@a09b570600a7 tmp]#
两者的区别:
attach: 直接进入容器启动命令终端,不会启动新的进程
exec:是在容器中打开新的终端,并且可以启动新进程
从容器内拷贝文件到宿主机
加入你在正在运行的容器内运行产生了一些数据,希望吧数据拷贝出来。
docker cp [容器id]:[容器内路径] [目的主机路径]
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a09b570600a7 centos "/bin/bash" 42 minutes ago Up 42 minutes infallible_leavitt
neil@linux-famw:~>
neil@linux-famw:~> docker cp a09b570600a7:/tmp/happybks.txt ~/
neil@linux-famw:~> ll
总用量 20
drwxr-xr-x 23 neil users 4096 12月 31 13:31 anaconda3
drwxr-xr-x 2 neil users 6 7月 10 2018 bin
drwxr-xr-x 2 neil users 116 7月 21 2018 Desktop
drwxr-xr-x 3 neil users 85 10月 6 23:23 Documents
drwxr-xr-x 5 neil users 4096 2月 16 14:55 Downloads
drwxr-xr-x 3 neil users 63 12月 18 22:38 flink
drwxr-xr-x 2 neil users 6 10月 21 14:51 hadoop
-rw-r--r-- 1 neil users 12 2月 24 22:02 happybks.txt
drwxr-xr-x 6 neil users 296 1月 1 20:43 IDE
drwxr-xr-x 3 neil users 27 12月 23 18:41 IdeaProjects
drwxr-xr-x 10 neil users 4096 9月 24 10:10 midware
drwxr-xr-x 2 neil users 6 7月 10 2018 Music
drwxr-xr-x 3 neil users 24 1月 1 22:45 nltk_data
drwxr-xr-x 3 neil users 4096 2月 16 22:19 Pictures
drwxr-xr-x 2 neil users 6 7月 10 2018 Public
drwxr-xr-x 4 neil users 41 1月 12 11:51 PycharmProjects
drwxr-xr-x 3 neil users 16 8月 30 22:40 tempdata
drwxr-xr-x 2 neil users 6 7月 10 2018 Templates
drwxr-xr-x 2 neil users 6 7月 10 2018 Videos
neil@linux-famw:~>
neil@linux-famw:~> cat happybks.txt
hi happyBKs
neil@linux-famw:~>
相应地,我也可以将宿主机的文件用同样的命令拷贝到容器内的某个目录下。
docker cp [宿主机文件路径] [容器id]:[容器内路径]
neil@linux-famw:~>
neil@linux-famw:~> touch oschina.txt
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker cp oschina.txt a09b570600a7:/tmp
neil@linux-famw:~>
neil@linux-famw:~> docker exec -t a09b570600a7 ls -l /tmp
total 8
-rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt
-rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP
-rw-r--r-- 1 1000 users 0 Feb 24 14:50 oschina.txt
-rw------- 1 root root 0 Dec 5 01:36 yum.log
neil@linux-famw:~>
neil@linux-famw:~>
这里再顺便说一下,如果容器停止后,我们想查看刚才容器中的文件,依然可以启动容器查看。
neil@linux-famw:~>
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a09b570600a7 centos "/bin/bash" About an hour ago Up About an hour infallible_leavitt
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker kill a09b570600a7
a09b570600a7
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker ps -n 1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a09b570600a7 centos "/bin/bash" About an hour ago Exited (137) 45 seconds ago infallible_leavitt
neil@linux-famw:~>
neil@linux-famw:~> docker start a09b570600a7
a09b570600a7
neil@linux-famw:~>
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a09b570600a7 centos "/bin/bash" About an hour ago Up 5 seconds infallible_leavitt
neil@linux-famw:~>
neil@linux-famw:~> docker exec -t a09b570600a7 ls -l /tmp
total 8
-rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt
-rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP
-rw-r--r-- 1 1000 users 0 Feb 24 14:50 oschina.txt
-rw------- 1 root root 0 Dec 5 01:36 yum.log
neil@linux-famw:~>
neil@linux-famw:~>
注意事项的2亮点
1)被杀死的已经停止的容器依然可以通过docker cp拷贝文件。
2)被杀死的已经停止的容器依然不可以通过docker exec等方式执行容器命令或进入容器内。
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a09b570600a7 centos "/bin/bash" About an hour ago Up 2 minutes infallible_leavitt
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker kill a09b570600a7
a09b570600a7
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker ps -n 1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a09b570600a7 centos "/bin/bash" About an hour ago Exited (137) 56 seconds ago infallible_leavitt
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker cp a09b570600a7:/tmp/happybks.txt ~/
neil@linux-famw:~>
neil@linux-famw:~>
neil@linux-famw:~> docker cp a09b570600a7:/tmp/happybks.txt ~/happybks2.txt
neil@linux-famw:~> ll
总用量 24
drwxr-xr-x 23 neil users 4096 12月 31 13:31 anaconda3
drwxr-xr-x 2 neil users 6 7月 10 2018 bin
drwxr-xr-x 2 neil users 116 7月 21 2018 Desktop
-rw-r--r-- 1 neil users 0 2月 24 23:03 docker
drwxr-xr-x 3 neil users 85 10月 6 23:23 Documents
drwxr-xr-x 5 neil users 4096 2月 16 14:55 Downloads
drwxr-xr-x 3 neil users 63 12月 18 22:38 flink
drwxr-xr-x 2 neil users 6 10月 21 14:51 hadoop
-rw-r--r-- 1 neil users 12 2月 24 22:02 happybks2.txt
-rw-r--r-- 1 neil users 12 2月 24 22:02 happybks.txt
drwxr-xr-x 6 neil users 296 1月 1 20:43 IDE
drwxr-xr-x 3 neil users 27 12月 23 18:41 IdeaProjects
drwxr-xr-x 10 neil users 4096 9月 24 10:10 midware
drwxr-xr-x 2 neil users 6 7月 10 2018 Music
drwxr-xr-x 3 neil users 24 1月 1 22:45 nltk_data
-rw-r--r-- 1 neil users 0 2月 24 22:50 oschina.txt
drwxr-xr-x 3 neil users 4096 2月 16 22:19 Pictures
drwxr-xr-x 2 neil users 6 7月 10 2018 Public
drwxr-xr-x 4 neil users 41 1月 12 11:51 PycharmProjects
drwxr-xr-x 3 neil users 16 8月 30 22:40 tempdata
drwxr-xr-x 2 neil users 6 7月 10 2018 Templates
drwxr-xr-x 2 neil users 6 7月 10 2018 Videos
neil@linux-famw:~>
neil@linux-famw:~> docker exec -t a09b570600a7 ls -l /tmp
Error response from daemon: Container a09b570600a7a331350f0b08858593ed4303dba591148c91d8fdee7b9d1262f4 is not running
neil@linux-famw:~>
docker命令架构图
这些命令我们要有个结构化的了解。