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