Docker基础篇(三)——容器的操作
Docker基础篇(三)——容器的操作
前言:
阅读这篇文章我能学到什么?
这篇介绍容器有关的操作。
1 创建容器
1.1 创建但不运行
根据指定镜像创建容器,但不运行该容器。
指定镜像名称创建容器。-it
表示该容器启用交互式终端。
1 | docker create -it --name container_name image_name:tag |
指定镜像名称创建容器。
1 | docker create -it --name container_name image_id |
1.2 创建并运行
根据指定镜像创建容器,且运行该新容器。
指定镜像名称创建容器。 -it
表示该容器启用交互式终端。
1 | docker run -it --name container_name image_name:tag /bin/bash |
在容器终端中执行 exit
将推出容器的运行。更多的指令可选项见以下。
选项 | 功能描述 | 示例 |
---|---|---|
-i |
保持标准输入(STDIN)开启,支持交互操作 | -i (常与 -t 联用) |
-t |
分配伪终端(TTY) | -t (与 -i 结合启动交互式容器) |
-d |
后台运行容器(守护模式) | -d (如运行 Nginx 服务) |
--name |
指定容器名称 | --name my-container |
-p |
端口映射(主机端口:容器端口) | -p 8080:80 (映射 Web 服务) |
-v |
挂载数据卷(主机目录:容器目录) | -v /host/data:/container/data |
--rm |
容器停止后自动删除 | --rm (临时测试场景) |
2 查看容器
查看本地容器。会列出容器的ID、关联的镜像名、创建的时间、容器状态、容器名称。
1 | docker ps -a |
3 删除容器
根据名称删除容器。
1 | docker rm container_name |
根据ID删除容器。
1 | docker rm container_id |
4 容器导出镜像
将容器直接导出为镜像tar文件,不会带有镜像的历史记录和分层信息,文件内容比较小。
根据容器名称导出。
1 | docker export -o tar_name.tar container_name |
根据容器ID导出。
1 | docker export -o tar_name.tar container_id |
5 导入镜像
导入 docker export
导出的tar文件的镜像,这种方式导入的镜像不带有完整的镜像信息,因此这种方式导入时可指定镜像的新名称。
1 | docker import tar_name.tar image_name:tag |
6 修改容器名
根据容器名称修改名称。
1 | docker rename container_name_old container_name_new |
根据容器ID修改名称。
1 | docker rename container_id container_name_new |
7 提交镜像
将容器的当前状态提交为新的容器。 -a
表示作者名, -m
表示提交log,这两项是可选的。容器提交创建镜像后,该容器关联的镜像不会改变,不会变为关联新镜像。
根据容器名称提交创建镜像。
1 | docker commit -a "Author" -m "comment" container_name image_name:tag |
根据容器ID提交创建镜像。
1 | docker commit -a "Author" -m "comment" container_id image_name:tag |
查看镜像最新一层的修改作者。
根据镜像名称查看作者。
1 | docker inspect --format='{{.Author}}' image_name:tag |
根据镜像ID查看作者。
1 | docker inspect --format='{{.Author}}' image_id |
8 启动容器
启动已存在的容器。
根据容器名称启动。
1 | docker start -ai container_name |
根据容器ID启动。
1 | docker start -ai container_id |
如果想启动并在后台运行容器,则无需开启交互终端,去掉 -ai
选项即可,容器的状态会显示在状态栏一列,通过 docker ps -a
指令查看。
9 停止容器
根据容器名称停止容器运行。
1 | docker stop container_name |
根据容器ID停止容器运行。
1 | docker stop container_id |
10 重启容器
根据容器名称重启容器运行。
1 | docker restart container_name |
根据容器ID重启容器运行。
1 | docker restart container_id |
11 暂停容器
根据容器名称暂停容器运行。
1 | docker pause container_name |
根据容器ID暂停容器运行。
1 | docker pause container_id |
11 接触暂停容器
根据容器名称解除暂停容器运行。
1 | docker unpause container_name |
根据容器ID解除暂停容器运行。
1 | docker unpause container_id |
12 进入已经运行的容器
根据容器名称进入已经运行的容器。
1 | docker exec -it container_name /bin/bash |
根据容器ID进入已经运行的容器。
1 | docker exec -it container_id /bin/bash |
13 挂载目录
13.1 新建容器并挂载
可以将本地电脑的目录挂载到容器中,挂载后任意一边的修改都会实时同步到另一边,非常适合本地编写代码,然后修改实时同步到容器中,在容易中进行编译调试(通常编译或运行环境在容器中)。
根据容器名称通过 docker run
指令挂载目录。注意,容器这段的路径必须写绝对路径,比如 ~
这样的相对路径是不允许的。
1 | docker run -v local_path:container_path --name container_name -it image_name:tag /bin/bas |
根据容器ID通过 docker run
指令挂载目录。
1 | docker run -v local_path:container_path --name container_name -it image_id /bin/bas |
同理, docker create
指令也类似。
根据容器名称通过 docker create
指令挂载目录。
1 | docker create -v local_path:container_path --name container_name -it image_name:tag /bin/bas |
根据容器ID通过 docker create
指令挂载目录。
1 | docker create -v local_path:container_path --name container_name -it image_id /bin/bas |
13.2 已有容器挂载
14 目录复制
14.1 本地复制到容器
将指定的本地目录整个复制到容器指定路径下。
通过容器名称指定。
1 | docker cp local_path container_name:container_path |
通过容器ID指定。
1 | docker cp local_path container_id:container_path |
14.2 容器复制到本地
将指定的容器目录整个复制到本地指定路径下。
通过容器名称指定。
1 | docker cp container_name:container_path local_path |
通过容器ID指定。
1 | docker cp container_id:container_path local_path |