目录

学习 Docker(2)-容器基本操作

docker run

该命令用于在新容器中运行 image,IMAGE 可以为 image 的名称或者 ID。

1
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • -p --publish 映射指定端口;
  • -P --publish-all 映射容器暴露的所有端口到随机端口;
  • -i-t 两者常常配合使用前者开启 STDIN,后者分配一个 TTY。共同使用可以进入容器的 shell;退出时,ctrl+pctrl+q,可以保持容器在后台运行不终止。
  • --name 指定容器名称;
  • -d --detach 在后台运行 container,并输出容器的 ID;
  • —-rm 容器停止后自动删除容器。

-p 参数映射端口有以下几种形式:

  • -p 80 映射容器的 TCP 80 端口到宿主机随机端口;
  • -p 8080:80 映射容器的 TCP 80 端口到宿主机的 8080 端口;
  • -p 127.0.0.1:8080:80 映射容器的 TCP 80 端口到宿主机的 8080 端口,并监听 127.0.0.1;
  • -p 8080:80/udp 映射 UDP 端口;

举例说明:

1
docker run -p 80:80 nginx

使用 nginx 镜像新建一个 container,在前台运行 nginx,将容器的 80 端口映射到宿主机的 80 端口。访问 http://localhost/ 就能够看到 nginx 的欢迎页面,使用 ctrl+c 终止运行。

如果命令执行时本地不存在镜像,会直接从 Docker Hub 拉取镜像。

docker ps

列出容器。

1
docker ps [OPTIONS]
  • -a 列出所有容器,不加该参数只会列出运行中的容器。
  • -q 只列出容器 ID。
  • --no-trunc 显示完整的容器信息,包括完整的 ID,运行的命令等;

docker start

启动一个或多个已经停止的容器。

1
docker start [OPTIONS] CONTAINER [CONTAINER...]

docker rm

删除一个或者多个容器。默认情况下不能删除正在运行的容器。

1
docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • -f 强制删除容器(使用 SIGKILL),该参数可以删除正在运行的容器。

docker ps 组合删除所有容器的命令:

1
docker rm $(docker ps -a)

docker attach

将本地 STDIN,STDOUT 和 STDERR 附加到正在运行的容器。

1
docker attach [OPTIONS] CONTAINER

适用于连接在后台运行的容器的 shell 等。比如:

1
docker run -it ubuntu bash

ctrl+pctrl+q 退出后,容器仍然在后台运行,需要再次进入容器 shell 的时候,就可以使用本命令。

docker logs

查看容器日志。

1
docker logs [OPTIONS] CONTAINER
  • —-tail n 输出末尾 n 行,默认为 all,即输出日志全部内容。
  • -f 同 tail 命令的 -f 参数,实时输出最新日志内容;
  • -t 输出日志时添加时间戳。

docker stop

停止正在运行的一个或多个容器。发送 SIGTERM 信号给容器中的主进程,超过等待时间后会再发送 SIGKILL 信号。

1
docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • -t 设置等待时间,默认 10 秒。

docker kill

杀掉正在运行的一个或多个容器。直接发送 SIGKILL 信号。

1
docker kill [OPTIONS] CONTAINER [CONTAINER...]

docker top

查看容器中正在运行的进程。

1
docker top CONTAINER [ps OPTIONS]

docker exec

在运行的容器中运行命令。

1
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • -i-t-d 选项同 docker run

docker cp

在宿主机和 Docker 容器之间拷贝文件。

1
2
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

- 代表标准输入输出。

docker port

展示容器的所有端口映射或特定端口映射。

1
docker port CONTAINER [PRIVATE_PORT[/PROTO]]

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
b650456536c7        busybox:latest      top                 54 minutes ago      Up 54 minutes       0.0.0.0:1234->9876/tcp, 0.0.0.0:4321->7890/tcp   test
$ docker port test
7890/tcp -> 0.0.0.0:4321
9876/tcp -> 0.0.0.0:1234
$ docker port test 7890/tcp
0.0.0.0:4321
$ docker port test 7890/udp
2014/06/24 11:53:36 Error: No public port '7890/udp' published for test
$ docker port test 7890
0.0.0.0:4321

docker inspect

展示容器的底层信息。比如容器的 IP 地址,运行的命令等等。

1
docker inspect [OPTIONS] NAME|ID [NAME|ID...]

docker stats

实时展示容器资源使用量,包括 CPU、内存、网络、磁盘等。

1
docker stats [OPTIONS] [CONTAINER...]

结果:

1
2
3
4
5
6
CONTAINER ID        NAME            CPU %       MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
d384e1e2bab2        container1      0.07%       310.4MiB / 738.3MiB   42.05%              2.14MB / 58.6kB     72.8MB / 16.8MB     7
18097b8fd0ce        container2      0.14%       67.96MiB / 738.3MiB   9.20%               75.9kB / 74.9kB     78.8MB / 1.61MB     2
34840174a49b        container2      0.05%       14.93MiB / 738.3MiB   2.02%               59.8kB / 2.14MB     58.1MB / 12.7MB     30
75f1f2a10ab4        container2      0.13%       632KiB / 738.3MiB     0.08%               1.01kB / 0B         1.77MB / 266kB      4
e1e70fe93c75        container3      0.11%       43.36MiB / 738.3MiB   5.87%               75.9kB / 74.9kB     54.5MB / 999kB      85