【docker基础】: 容器的运行

356 阅读4分钟

容器运行相关操作

容器运行分两种情况,一种是容器未创建,一种是容器已创建。

容器未创建

使用命令创建并运行容器: docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
例子: docker run -it ubuntu /bin/bash

docker run 后面可以添加选项,添加一些特殊设置。下面是常用option。

常用options:

  • -d: 后台运行容器,并返回容器ID。在后台运行的一般是数据库之类的不需要交互的容器
  • -p: 端口映射,将其运行在虚拟容器的端口,并将其映射到你的主机端口
  • -i: 允许你对容器的标准输入进行交互。
  • -t: 为容器重新分配一个伪输入终端。通常与-i合在一起使用。
  • --name: 为容器指定名字,不能重复
  • -P: 为容器分配一个高端口
  • --rm: 容器退出后立即删除容器。这种必须前台运行,否则会直接删除容器
  • -v : 绑定一个卷,格式为:-v 卷主机路径:容器内路径。(持久化要使用,暂时用不到)

实例演示:

  1. 后台运行Ubuntu: docker run -d ubuntu

  2. 容器8080端口映射到主机80端口: docker run -p 80:8000 ubuntu

  3. 交互运行Ubuntu: docker run -it ubuntu

  4. 为ubuntu容器指定name: docker run -it --name ubuntu

  5. 为nginx服务器启动一个容器分配随机端口 :docker run -P -d nginx, 使用docker ps查看端口映射。

  6. 退出后删除Ubuntu实例: docker run -it --rm ubuntu

image.png 这个表示将容器80端口暴露到主机的32769端口。

command命令

我们可以看到docker run -it ubuntu /bin/bash, 后面是可以添加命令的,这个命令会在创建容器后在容器中运行。

举个例子: docker run -it ubuntu /bin/bash, 执行bash命令,可以使其切换到bash命令行工具。

小贴士:

如果我们执行: docker run -it ubuntu echo "hhh", 它在打印完hhh后该容器将会关闭,这是为啥呢?

docker 在启动容器时,默认会以当前 shell 命令为容器的 PID 1 进程。

也就是说,当 shell 命令(如 ls)执行完毕后,PID 1 进程就退出了。

而当PID 1 进程退出的时候,整个容器也会随之退出。

所以我们要想不关闭容器,需要后面选择持久化的命令。(比如/bin/bash, /bin/sh)

更详细的参数介绍参照官网:Docker run reference | Docker Documentation

容器已创建

如果容器已经创建,我们就不要使用docker run命令了,因为额run命令每次使用都会重新创建一个容器。

查看容器

启动容器之前,我们需要知道我们有哪些容器。
我们可以使用命令: docker ps 查看正在运行的容器,
还有: docker ps -a,查看所有的容器:

image.png

启动容器

在查看容器小节中,我们可以看到最左边容器的ID,我们启动它就需要使用它的ID
启动容器的命令: docker start [OPTIONS] CONTAINER [CONTAINER...]

例子: docker start 866c21ad9342

docker start 后面可以添加选项,
例子: docker start <Container ID>

下面是一些常见的option:

  • --attach , -a : 附加 STDIN、STDOUT 和 STDERR ,通常与 -i 一起使用。
  • --interactive , -i : 允许你使用 Docker 模拟 tty ,使容器处于交互模式。
  • --detach , -d : 在后台运行容器。
  • --signal , -s : 使用一个信号来停止容器。格式为:SIGNAME 或 SIGNUM 。

例子: docker start -a -i <Container ID>, 进入交互状态。

重启容器

重启容器命令: docker restart [OPTIONS] CONTAINER [CONTAINER...]

  • --signal  -s : 这个意思是发送你指定的信号,容器收到后开始重启。
  • --time , -t : 等待时间,表示在等待时间内重启,否则关闭容器

举例: docker restart --time 5 <Container ID> ,如果五秒内容器未重启,则容器被关闭。

关闭容器

关闭容器的命令: docker stop [OPTIONS] CONTAINER [CONTAINER...]

options:

  • --signal , -s: 指定关闭容器的信号
  • --time , -t: 多少秒内关闭容器,否则强行关闭

例子: docker stop -t 5 <Container ID/> , 五秒内容器未关闭,则被强制关闭

容器启动之后才能使用的exec操作

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

该命令为容器启动之后才能执行的,它主要是为了对某容器进行命令的执行。

比如: docker exec -it <Container ID> /bin/sh -c "echo a && echo b"

注意: 这里的-c是必须要书写的,因为不写-c,第一条命令 /bin/sh会被读取为命令,后面的命令将不会被执行。

小贴士:

大家可能会发现即使使用了-it也不会进入交互式界面。官网原话:

The command started using docker exec only runs while the container’s primary process (PID 1) is running, and it is not restarted if the container is restarted.

只有主进程仍然运行的情况,才会不退出交互式界面。意思就是执行完echo a && echo b后,该进程无任务可做,就退出该exec命令了。


上面就是容器运行的基本操作,下一章介绍镜像的创建:【docker基础】: 镜像构建 - 掘金 (juejin.cn)