docker + 管理的对象(比如容器,镜像) + 具体操作(比如创建,启动,停止,删除) |
示例:
docker image pull nginx
拉取一个叫nginx的docker image镜像。
docker container stop web
停止一个叫web的docker container容器。
基础命令:
docker version
查看版本信息和client/server信息。
|
docker info
查看本机容器和镜像相关的信息,比如有多少容器和镜像,正在运行的有多少,停止的有多少等。
|
read-only
文件。read-write
的层 (称之为 container layer
, 容器层)。操作 | 命令(全) | 命令(简) |
---|---|---|
容器的创建 | docker container run <image name> | docker run <image name> |
容器的列出(up) | docker container ls | docker ps |
容器的列出(up和exit) | docker container ls -a | docker ps -a |
容器的停止 | docker container stop <name or ID> | docker stop <container name or ID> |
容器的删除 | docker container rm <name or ID> | docker rm <container name or ID> |
docker container rm不能删除一个正在运行的容器,如果要强制删除,可以使用 |
示例:
$ docker container run nginx $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 343fd4031609 nginx "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 80/tcp xenodochial_clarke $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 343fd4031609 nginx "/docker-entrypoint.…" 14 seconds ago Up 13 seconds 80/tcp xenodochial_clarke $ docker container stop 34 34 $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 343fd4031609 nginx "/docker-entrypoint.…" 29 seconds ago Exited (0) 5 seconds ago xenodochial_clarke d9095daa8bcf nginx "/docker-entrypoint.…" 28 minutes ago Exited (0) 28 minutes ago suspicious_shamir $ docker container rm 34 34 $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d9095daa8bcf nginx "/docker-entrypoint.…" 28 minutes ago Exited (0) 28 minutes ago suspicious_shamir $ |
docker container stop $(docker container ps -q)
。docker container rm $(docker container ps -aq)
。示例:
$ docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cd3a825fedeb nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 80/tcp mystifying_leakey 269494fe89fa nginx "/docker-entrypoint.…" 9 seconds ago Up 8 seconds 80/tcp funny_gauss 34b68af9deef nginx "/docker-entrypoint.…" 12 seconds ago Up 10 seconds 80/tcp interesting_mahavira 7513949674fc nginx "/docker-entrypoint.…" 13 seconds ago Up 12 seconds 80/tcp kind_nobel |
方法1:
$ docker container rm cd3 269 34b 751 |
方法2:
$ docker container stop $(docker container ps -q) cd3a825fedeb 269494fe89fa 34b68af9deef 7513949674fc $ docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cd3a825fedeb nginx "/docker-entrypoint.…" 30 seconds ago Exited (0) 2 seconds ago mystifying_leakey 269494fe89fa nginx "/docker-entrypoint.…" 32 seconds ago Exited (0) 2 seconds ago funny_gauss 34b68af9deef nginx "/docker-entrypoint.…" 35 seconds ago Exited (0) 2 seconds ago interesting_mahavira 7513949674fc nginx "/docker-entrypoint.…" 36 seconds ago Exited (0) 2 seconds ago kind_nobel $ |
也可以使用 |
|
使用docker contianer run --rm
,容器运行完之后即自动删除。
↓
↓
|
首先是docker --help
,用于查看全部的帮忙选项,输出如下:
|
接下来是针对某个命令的帮助文档,比如查看容器命令相关的文档,可以使用docker container --help
,如下:
|
还可以继续查看下一级命令的帮助文档,比如使用docker container run --help
查看运行容器的相关选项,如下:
|
测试用例:
docker container run -p 80:80 nginx docker container run -p 80:80 -d nginx |
|
docker container run -it
创建一个容器并进入交互式模式。
➜ ~ docker container run -it busybox sh / # / # / # ls bin dev etc home proc root sys tmp usr var / # ps PID USER TIME COMMAND 1 root 0:00 sh 8 root 0:00 ps / # exit |
docker container exec -it
在一个已经运行的容器里执行一个额外的command。
➜ ~ docker container run -d nginx 33d2ee50cfc46b5ee0b290f6ad75d724551be50217f691e68d15722328f11ef6 ➜ ~ ➜ ~ docker container exec -it 33d sh # # # ls bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # # exit ➜ ~ |
以下是在Ubuntu20.04中演示,因Windows环境下的Docker和Linux具有一些差异。 |
➜ ~ docker container run -d nginx 57fe4033dd7e1e620a0b6a7b83b85d4f8f98772f0ce585624c384de254826fd0 ➜ ~ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 57fe4033dd7e nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 80/tcp festive_proskuriakova ➜ ~ docker container top 57f UID PID PPID C STIME TTY TIME CMD root 7646 7625 0 12:14 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 7718 7646 0 12:14 ? 00:00:00 nginx: worker process ➜ ~ ➜ ~ ➜ ~ ps -aef --forest UID PID PPID C STIME TTY TIME CMD root 1 0 0 May14 ? 00:00:00 /init root 157 1 0 May14 ? 00:00:00 /init root 523 157 0 May14 ? 00:02:32 \_ /usr/bin/dockerd -p /var/run/docker.pid root 545 523 0 May14 ? 00:25:55 | \_ containerd --config /var/run/docker/containerd/containerd.toml --log-level info root 7625 157 0 12:14 ? 00:00:00 \_ /usr/bin/containerd-shim-runc-v2 -namespace moby -id 57fe4033dd7e1e620a0b6a7b83b85d4f8f98772f0ce585624c384de254826fd0 -address /var/run/d root 7646 7625 0 12:14 ? 00:00:00 \_ nginx: master process nginx -g daemon off; systemd+ 7718 7646 0 12:14 ? 00:00:00 \_ nginx: worker process root 6442 1 0 May18 ? 00:00:00 /init root 6443 6442 0 May18 ? 00:00:00 \_ /init penxiao 6444 6443 0 May18 pts/2 00:00:01 \_ -zsh penxiao 7770 6444 0 12:15 pts/2 00:00:00 \_ ps -aef --forest ➜ ~ ➜ ~ pstree -halps 7718 init,1 └─init,157 └─containerd-shim,7625 -namespace moby -id 57fe4033dd7e1e620a0b6a7b83b85d4f8f98772f0ce585624c384de254826fd0 -address /var/run/docker/containerd/containerd.sock └─nginx,7646 └─nginx,7718 |
容器其实是进程,也就是说,通过容器启动nginx,实际上nginx进程就是位于宿主机上,基于可以在宿主机上用ps命令查到,但是,这个nginx进程的进程号有些要注意,对于宿主机来说,它有一个进程号,但是在容器里,这个进程其实是另一个进程号。这可以通过docker container run -it busybox sh来验证,进到busybox容器里执行sh,再执行ps,可以看到当前sh的进程号,换到另一个终端,通过docker container ps可以查到另一个进程号,这两个是不一样的。 |
$ docker container run -d --publish 80:80 --name webhost nginx