跳到主要内容

Docker的容器

镜像(Image) 和 容器(Container) 是 Docker 最基本的概念, 上一节已经简单介绍了一下镜像, 这一节再把容器的部分补上

Docker 的容器是运行时的一个实例, 其通过镜像创建, 两者之间的关系有点像 OOP 中的 实例 的关系, 容器可以被启动, 停止, 重启, 复制, 或者删除等操作

Docker 的容器看起来像是一个虚拟机, 但其本质上还是宿主机执行的一个进程, 只不过拥有独属于自己的命名空间, 可以视作和原来的环境是隔离的

Docker 的容器和镜像一样也是分层的, 相当于是将镜像作为基础层, 然后再之上加了一个数据层, 用于存储在容器运行过程中产生的数据以及其他杂七杂八的变更

创建容器

可以使用 docker create 命令创建容器, 其语法如下

docker create --name aname nginx:alpine

不过这种方式一般没啥人用, 因为一般都是通过 docker run 命令来创建容器, 其会自动创建并启动容器, 非常方便快捷省事

docker run --name aname nginx:alpine

按照以上命令创建并且启动容器之后可以看到nginx程序启动时的输出信息, 那些都是容器的输入内容

列出容器

在创建完容器之后我们可以通过 ps 命令来查看当前运行的容器

docker ps
CONTAINER ID   IMAGE             COMMAND      CREATED        STATUS      PORTS     NAMES

不过 ps 命令只能看到当前运行的容器, 如果没有只在运行的容器, 那就啥都看不到, 想要查看所有容器, 可以使用 docker ps -a 命令

docker ps -a
CONTAINER ID   IMAGE                       COMMAND                   CREATED         STATUS                      PORTS                    NAMES
6ba2202366f4 nginx:alpine "/docker-entrypoint.…" 3 minutes ago Exited (0) 2 minutes ago aname

这边可以看到, 我们刚才创建的容器 aname 已经存在了, 但是状态是已退出, 所以之前只是使用 docker ps 时无法查看到运行中的容器信息

启动已停止的镜像

上面我们可以看到 aname 容器状态已退出, 这时我们可以通过 docker start 命令来启动容器

docker start aname
docker ps
CONTAINER ID   IMAGE                       COMMAND                   CREATED        STATUS              PORTS     NAMES
6ba2202366f4 nginx:alpine "/docker-entrypoint.…" 2 days ago Up About a minute 80/tcp aname
提示

其实也可以直接使用 docker restart aname 来重启容器, 效果是一样的, 而且在实际使用的时候 restart 可能会更加常用一点

停止容器

可以通过 docker stop 命令来停止容器

docker stop aname

删除容器

当容器不再需要时, 可以通过 docker rm 命令来删除容器, 这个命令看起来和删除镜像很像, 不过 rm 命令是用来删除容器的, 而 rmi 命令是用来删除镜像的

docker rm aname

删除容器后会将容器在运行时生成的数据层也一起删除, 所以在删除容器之前最好先想清楚有没有需要保存下来的数据