Docker -- 容器操作

Docker之容器操作

启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

新建并启动

所需的命令主要为 docker run

例如,下面的命令输出一个 “Hello World”,之后终止容器。

1
2
docker run ubuntu:18.04 /bin/echo 'Hello world'
Hello world

下面的命令则启动一个 bash 终端,允许用户进行交互。

1
2
docker run -t -i ubuntu:18.04 /bin/bash
root@af8bae53bdd3:/#

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

启动已终止容器

利用 docker container start 命令,直接将一个已经终止的容器启动运行。

守护态运行

使用命令docker run -d启动容器,即使容器在后台运行。使用 -d 参数启动后会返回一个唯一的 id,这和bash中command &命令类似。

两个有用的命令

  • 查看容器信息
1
2
3
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77b2dc01fe0f ubuntu:18.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute agitated_wright
  • 获取容器的输出信息
1
docker container logs [container ID or NAMES]

进入容器

容器进入后台运行后,如何再次进入该容器?

使用 docker attach 命令或 docker exec 命令,推荐使用docker exec,原因如下:

  • 使用docker attach进入容器后,若再次退出,会导致该后台容器stop
  • 而使用docker exec 进入容器后,若再次退出,不会导致后台容器stop,容器会依旧后台运行
1
2
3
4
5
docker run -dit ubuntu
69d137adef7a8a689cbcb059e94da5489d3cddd240ff675c640c8d96e84fe1f6

docker exec -it 69d1 bash
root@69d137adef7a:/#

终止容器

使用 docker container stop 来终止一个运行中的容器。此外,当 Docker 容器中指定的应用终结时,容器也自动终止。

终止状态的容器可以用 docker container ls -a 命令看到

1
2
3
4
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba267838cc1b ubuntu:18.04 "/bin/bash" 30 minutes ago Exited (0) About a minute ago trusting_newton
98e5efa7d997 training/webapp:latest "python app.py" About an hour ago Exited (0) 34 minutes ago backstabbing_pike

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

1
2
3
4
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7691a814370e ubuntu:18.04 "/bin/bash" 36 hours ago Exited (0) 21 hours ago test
docker export 7691a814370e > ubuntu.tar

这样将导出容器快照到本地文件。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,例如

1
2
3
4
cat ubuntu.tar | docker import - test/ubuntu:v1.0
docker image ls
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB

此外,也可以通过指定 URL 或者某个目录来导入,例如

1
docker import http://example.com/exampleimage.tgz example/imagerepo

删除容器

可以使用 docker container rm 来删除一个处于终止状态的容器。例如

1
2
docker container rm  trusting_newton
trusting_newton

如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器

清理所有处于终止状态的容器

docker container ls -a 命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用下面的命令可以清理掉所有处于终止状态的容器。

1
docker container prune