Docker image存放在registry中,并且是只读的。以它为模版,我们可以创建自己的container。container是image的运行的实例,相同的镜像可以创建出多个不同的容器,就像编程思想中的类与对象的关系。
image可以变得很大,因此我们需要对它进行分层以减小它的体积,每一层都会对image添加额外的功能和定制。
Docker中管理image常用的命令:
- docker search - 在registry中查找名字中包含特定关键字的image,例如:docker search apache
- docker pull - 下载image到本地,例如:docker pull ubuntu:16.04
- docker images - 列出所有设备本地registry中的image
- docker rmi - 删除一个image,例如:docker rmi ubuntu:14:04
- docker history - 显示image的历史记录,例如:docker history apacheweb
Docker container是image的一个运行实例。需要注意的是,container内部生成的数据的生命周期是和container绑定在一起的,如果我们停止容器,数据将会丢失。当然,Docker中有一些方法可以持久化数据,比如使用volume。
Docker中管理container常用的命令:
- docker run - 创建并启动容器
- docker create - 创建一个容器但不启动它,返回容器ID作为输出
- docker ps - 列出正在运行的容器
- docker stop - 停止容器
- docker start - 启动容器
- docker restart - 重启容器
- docker rm - 删除容器
- docker kill - 向容器发送SIGKILL信号
- docker attach - 连接正在运行的容器并返回其交互式的shell
- docker logs - 列出容器中发生的事件
- docker top - 列出容器中正在运行的进程
下面列举一些使用案例:
docker run -d --name dbserver somerepo/mysql
基于somerepo/mysql镜像创建并启动一个名为dbserver的容器,并在后台运行它。
docker create -t -i centos
创建一个基于centos镜像的容器,并返回它的容器ID。
docker ps
列出所有运行的容器并显示其详细信息。
docker stop d962431b81cb
停止容器ID为d962431b81cb的容器。
docker start d962431b81cb
启动容器ID为d962431b81cb的容器。
docker kill dbserver
向名称为dbserver的容器发送SIGKILL信号。
docker top dbserver
列出名称为dbserver的容器中正在运行的进程。
请注意:
- 在使用容器ID作为参数的命令中可以使用容器ID或容器名称。
- 容器中可能会包含恶意代码,因此请确保镜像的来源和运行的程序可信。
- 可以使用Ctrl + P + Q退出容器,而不会杀死它,然后使用docker attach命令再次连接到容器。
- 当stop/kill容器时,容器中生成的任何数据都将丢失。
- 最好在创建容器时使用--name选项给容器命名,这会使得后续执行容器相关命令时更加地方便。