目录
1. docker run—初始化运行一个容器,并退出容器
- 1. docker run---初始化运行一个容器,并退出容器
- 2. docker ps---查看有哪些容器
- 3. docker stop---停止容器
- 4. docker kill---强制停止容器
- 5. docker start---启动已经停止的容器
- 6. docker restart---重启容器
- 7. docker rm---删除容器
- 8. docker logs---查看容器内部的标准控制台输出的日志
- 9. docker top---查看容器内进程
- 10. docker insepect---查看容器信息
- 11. docker exec和docker attch
- 12. docker cp---容器和宿主机之间的文件拷贝
- 13. docker export---将容器的内容导出成一个tar归档文件【对应import】
- 14. docker import---从tar归档文件创建一个新的文件系统再导入为镜像【对应export】
- 15. docker stats---查看容器的cpu、内存使用情况
- 16. 其它命令
语法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[root@docker ~]# docker run --name="my-centos" -it centos /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
[root@d2006a693bda /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 02:41 pts/0 00:00:00 /bin/bash
root 15 1 0 02:43 pts/0 00:00:00 ps -ef
[root@d2006a693bda /]# [root@docker ~]#
[root@docker ~]#
参数说明:
- -name: 为容器指定一个名字,默认自动生成一个名字
- -i: 以交互模型运行容器,通常和
-t
配合使用 - -t: 为容器重新分配一个伪输入终端,通常和
-i
配合使用 - -d: 后台运行容器并返回容器ID。如果容器内部没有一个一直挂着的前台进程(比如top、tail),则容器启动后会直接退出
- -P: 大写P, 随机端口映射
- -p: 小写p, 指定端口映射。一般使用小写p
- /bin/bash:在容器内执行的命令,使用该shell进行交互式操作。也可以使用bash; 也可以省略
- 对于centos默认就是bash,且进入容器的目录是根目录
- 对于redis默认进入的是前台挂起的进程日志页面
- 如果redis使用bash命令,进入容器的目录是/data目录
小写p端口映射规则如下:
指定参数说明-p hostPort:containerPort端口映射:-p 8080:80-p ip:hostPort:containerPort配置监听地址: -p 10.0.0.100:8080:80-p ip::containerPort随机分配端口:-p 10.0.0.100::80-p hostPort:containerPort:tcp指定协议:-p 8080:80:udp-p 81:80 -p 443:443指定多个退出容器说明:
- exit:使用run运行的容器,exit退出,容器直接停止
- ctrl + p + q: 使用run运行的容器,ctrl + p + q退出,容器不停止
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2006a693bda centos "/bin/bash" 6 minutes ago Up 6 minutes my-centos
9599602023b5 hello-world "/hello" 16 hours ago Exited (0) 16 hours ago nice_gates
[root@docker ~]#
参数说明:
- -a: 列出所有容器,包含运行的和退出的
- -l: 列出最近创建的一个容器
- -n: 列出最近创建的n个容器
- -q: 只列出容器ID
[root@docker ~]# docker stop my-centos
my-centos
[root@docker ~]#
4. docker kill—强制停止容器
[root@docker ~]# docker kill d2006a693bda
d2006a693bda
[root@docker ~]#
5. docker start—启动已经停止的容器
[root@docker ~]# docker start d2006a693bda
d2006a693bda
[root@docker ~]#
6. docker restart—重启容器
[root@docker ~]# docker restart d2006a693bda
d2006a693bda
[root@docker ~]#
7. docker rm—删除容器
方式一:
[root@docker ~]# docker rm -f $(docker ps -qa)
d2006a693bda
9599602023b5
[root@docker ~]#
方式二:
[root@docker ~]# docker ps -qa | xargs docker rm -f
bac246f1235e
c65e14ccc6c4
[root@docker ~]#
8. docker logs—查看容器内部的标准控制台输出的日志
这里我们以redis为列进行讲解。我们先以交互式模式运行第一个redis,之后按ctrl + p + q退出
[root@docker ~]# docker run -it redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
a2abf6c4d29d: Pull complete
c7a4e4382001: Pull complete
4044b9ba67c9: Pull complete
c8388a79482f: Pull complete
413c8bb60be2: Pull complete
1abfd3011519: Pull complete
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Status: Downloaded newer image for redis:latest
1:C 26 Apr 2022 04:48:52.215 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 26 Apr 2022 04:48:52.215 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 26 Apr 2022 04:48:52.215 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 26 Apr 2022 04:48:52.216 * monotonic clock: POSIX clock_gettime
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.2.6 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 1
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
1:M 26 Apr 2022 04:48:52.218 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 26 Apr 2022 04:48:52.218 # Server initialized
1:M 26 Apr 2022 04:48:52.218 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 26 Apr 2022 04:48:52.218 * Ready to accept connections
[root@docker ~]#
接着以后台模式运行第二个redis,然后使用docker logs 容器ID
查看容器内部标准控制台打印的日志
[root@docker ~]# docker run -d redis
11fba37fbb4d0e8882a0fa644eaca3e710fc4c881c819fe1f733f3d086759393
[root@docker ~]#
[root@docker ~]# docker logs 11fba37fbb4d
1:C 26 Apr 2022 04:50:32.168 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 26 Apr 2022 04:50:32.168 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 26 Apr 2022 04:50:32.168 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 26 Apr 2022 04:50:32.169 * monotonic clock: POSIX clock_gettime
1:M 26 Apr 2022 04:50:32.170 * Running mode=standalone, port=6379.
1:M 26 Apr 2022 04:50:32.170 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 26 Apr 2022 04:50:32.170 # Server initialized
1:M 26 Apr 2022 04:50:32.170 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 26 Apr 2022 04:50:32.170 * Ready to accept connections
[root@docker ~]#
如果使用docker run -it redis bash
启动容器,再使用docker logs 容器ID
是查看不到日志的,因为对于该容器来说,redis的启动日志并没有通过标准控制台进行输出
[root@docker ~]# docker top 86d45d8209ec
UID PID PPID C STIME TTY TIME CMD
polkitd 14593 14573 0 12:59 ? 00:00:00 redis-server *:6379
[root@docker ~]#
10. docker insepect—查看容器信息
[root@docker ~]# docker inspect b6ee89d23b1f
[
{
"Id": "b6ee89d23b1f762603126b8ba53ee8b934c3f002f41193b3a693413064849225",
"Created": "2022-04-26T05:01:04.532844359Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 14698,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-04-26T05:01:04.758802369Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/b6ee89d23b1f762603126b8ba53ee8b934c3f002f41193b3a693413064849225/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/b6ee89d23b1f762603126b8ba53ee8b934c3f002f41193b3a693413064849225/hostname",
"HostsPath": "/var/lib/docker/containers/b6ee89d23b1f762603126b8ba53ee8b934c3f002f41193b3a693413064849225/hosts",
"LogPath": "/var/lib/docker/containers/b6ee89d23b1f762603126b8ba53ee8b934c3f002f41193b3a693413064849225/b6ee89d23b1f762603126b8ba53ee8b934c3f002f41193b3a693413064849225-json.log",
"Name": "/cool_goldstine",
"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/29e69afc77c1d80c1d986bf1f9447bf391e07881424ab3291a3b5ebbe0c4c532-init/diff:/var/lib/docker/overlay2/03347db72813a597e9cb514cf7c0930087669a19f316a823867a166a38969bf8/diff",
"MergedDir": "/var/lib/docker/overlay2/29e69afc77c1d80c1d986bf1f9447bf391e07881424ab3291a3b5ebbe0c4c532/merged",
"UpperDir": "/var/lib/docker/overlay2/29e69afc77c1d80c1d986bf1f9447bf391e07881424ab3291a3b5ebbe0c4c532/diff",
"WorkDir": "/var/lib/docker/overlay2/29e69afc77c1d80c1d986bf1f9447bf391e07881424ab3291a3b5ebbe0c4c532/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "b6ee89d23b1f",
"Domainname": "",
"User": "",
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"Tty": true,
"OpenStdin": true,
"StdinOnce": true,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"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": "f6ba5d13cad3d32c5d0b1adb94f40aab8e277bcb5a8448eccbd805d6bfb29c9a",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/f6ba5d13cad3",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "4934990df63f0c636b2be5a6e8671a9c4aef4e73f3e8bf0e3d75b6b4e90b63d1",
"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": "3f3f5aea8b21be3aa6f084c852b9f488f1794e2d016ac9e59660720290948bdd",
"EndpointID": "4934990df63f0c636b2be5a6e8671a9c4aef4e73f3e8bf0e3d75b6b4e90b63d1",
"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
}
}
}
}
]
[root@docker ~]#
11. docker exec和docker attch
docker exec进入容器会启动一个新的进程和终端,使用exit退出不会停止容器 语法如下:
[root@docker ~]# docker exec --help
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container
Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables
--env-file list Read in a file of environment variables
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: [:])
-w, --workdir string Working directory inside the container
[root@docker ~]#
- -d: 后台的方式运行一个命令
使用如下:
[root@docker ~]# docker exec -it 37b8b4b5cf95 redis-cli
127.0.0.1:6379> exit
[root@docker ~]#
如果是docker run -it redis bash
运行的redis是连接不上的
docker attach 容器ID
进入redis容器不会启动新的进程
- 如果是
docker run -it redis
启动的容器,进入的是标准控制台输出的那个页面,但是没有之前的日志。可以使用ctrl + p +q退出。也可以使用ctrl + c强制退出,但是会停止容器。不能使用exit退出 - 如果是
docker run -it redis bash
启动的容器,进入的是shell交互式命令行。可以使用ctrl + p + q退出。也可以使用exit退出,但是会停止容器
[root@docker ~]# docker attach f397009bce0c
^C1:signal-handler (1650955094) Received SIGINT scheduling shutdown...
1:M 26 Apr 2022 06:38:14.672 # User requested shutdown...
1:M 26 Apr 2022 06:38:14.672 * Saving the final RDB snapshot before exiting.
1:M 26 Apr 2022 06:38:14.674 * DB saved on disk
1:M 26 Apr 2022 06:38:14.674 # Redis is now ready to exit, bye bye...
[root@docker ~]#
12. docker cp—容器和宿主机之间的文件拷贝
拷贝宿主机的文件到容器
[root@docker ~]# docker cp test.txt b4c453f3dde4:/opt
[root@docker ~]#
拷贝容器的文件到宿主机
[root@docker ~]# docker cp b4c453f3dde4:/opt/test.txt .
[root@docker ~]#
13. docker export—将容器的内容导出成一个tar归档文件【对应import】
[root@docker ~]# docker export b4c453f3dde4 > my-centos.tar.gz
[root@docker ~]# ls
anaconda-ks.cfg my-centos.tar.gz
[root@docker ~]#
14. docker import—从tar归档文件创建一个新的文件系统再导入为镜像【对应export】
[root@docker ~]# cat my-centos.tar.gz | docker import - bulut/my-centos:8.8
sha256:0eacfd2d9f2138284195f5caebdf5447b57c6e6bf5162ea04ff0c0828f512b5b
[root@docker ~]#
[root@docker ~]# docker images | grep my-centos
bulut/my-centos 8.8 0eacfd2d9f21 11 seconds ago 231MB
[root@docker ~]#
15. docker stats—查看容器的cpu、内存使用情况
[root@docker ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
6c9481f64359 agitated_brattain 0.00% 1.41MiB / 972.3MiB 0.15% 656B / 0B 0B / 15.4kB 2
16. 其它命令
命令英文描述中文描述buildBuild an image from a Dockerfile通过Dockerfile构建镜像commitCreate a new image from a container changes将容器打包成镜像createCreate a new container创建一个新的容器,同run,但不启动容器diffInspect changes on a container’s filesystem查看docker容器的filesystem变化eventsGet real time events from the server从docker服务获取容器实时事件historyShow the history of an image展示一个镜像的形成历史loadLoad an image from a tar archive从一个tar包中加载一个镜像【对应save】loginRegister or Login to the docker registry server注册或者登陆一个docker镜像服务器logoutLog out from a Docker registry server从当前Docker registry登出portLookup the public-facing port which is NAT-ed to PRIVATE_PORT查看映射端口对应的容器内部源端口pausePause all processes within a container暂停容器pullPull an image or a repository from the docker registry server从docker镜像源服务器拉取指定镜像或者库镜像pushPush an image or a repository to the docker registry server推送指定镜像或者库镜像至docker镜像源服务器saveSave an image to a tar archive保存一个镜像为一个tar包【对应load】tagTag an image into a repository给镜像源中镜像打标签unpauseUnpause a paused container取消暂停容器waitBlock until a container stops, then print its exit code一直等待,指定容器停止,然后打印exit code