Docker容器
Posted wshenjin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker容器相关的知识,希望对你有一定的参考价值。
启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。
新建启动
docker run
常用选项:
- -t:选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
- -i:则让容器的标准输入保持打开
- -d:以后台方式启动容器
例如启动一个centos容器:
[[email protected]_Machine_192.168.31.130 ~]# docker run -tid centos
354861680ae5cdd0b807ad70f0968afa2a7717c8c55f0271cd76c95f905cf4ae
[[email protected]_Machine_192.168.31.130 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
354861680ae5 centos "/bin/bash" 4 seconds ago Up 4 seconds competent_jang
容器启动后回到docker host 的终端并 返回该容器的 ID。
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
其他常用的选项:
- --name:指定容器名称,默认随机分配
- -v, --volume:挂载volume
- --ip :指定IP地址
具体参考 docker run --help
重启终止状态的容器
docker start [id|name] 或者 docker container start [id|name]
我们先停止刚刚创建的centos容器,再启动
[[email protected]_Machine_192.168.31.130 ~]# docker stop 354861680ae5
354861680ae5
[[email protected]_Machine_192.168.31.130 ~]# docker start 354861680ae5
354861680ae5
[[email protected]_Machine_192.168.31.130 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
354861680ae5 centos "/bin/bash" 8 minutes ago Up 8 seconds competent_jang
用docker stop [id|name] 或者 docker container stop[id|name] 命令停止正在运行的容器,用docker start [id|name] 或者 docker container start [id|name]命令停止终止状态的容器
查看容器
docker container ls 或者docker ps
查看运行中的容器docker container ls 或者docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
354861680ae5 centos "/bin/bash" 14 minutes ago Up 6 minutes competent_jang
034b2c372153 registry "/entrypoint.sh /etc…" 3 weeks ago Up About an hour 127.0.0.1:5000->5000/tcp musing_shockley
查看所有的容器docker container ls -a 或者docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
354861680ae5 centos "/bin/bash" 14 minutes ago Up 6 minutes competent_jang
58a473f60b3c my_redis_server:v3.2.7 "/usr/local/redis/bi…" 6 days ago Exited (255) 6 days ago 6001/tcp infallible_meitner
1c8a8bbf61e9 centos "/bin/bash" 7 days ago Exited (255) 6 days ago zealous_bose
277daebf58a7 my_nginx_server:v1.13.11 "/usr/local/nginx/sb…" 12 days ago Exited (255) 6 days ago 80/tcp inspiring_heisenberg
75d87a4c17a0 centos "/bin/bash" 13 days ago Exited (255) 6 days ago wonderful_goodall
034b2c372153 registry "/entrypoint.sh /etc…" 3 weeks ago Up About an hour 127.0.0.1:5000->5000/tcp musing_shockley
终止容器
docker stop [id|name] 或 docker container stop[id|name]
[[email protected]_Machine_192.168.31.130 ~]# docker container stop 354861680ae5
354861680ae5
此外,当 Docker 容器中应用终结时,容器也自动终止。
进入容器
docker attach或 docker exec
常用的方式:
docker exec -it <container> bash|sh
attach 与 exec 主要区别:
- attach 直接进入容器 启动命令 的终端,不会启动新的进程。
- exec 则是在容器中打开新的终端,并且可以启动新的进程。
- 如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。
容器导出导入
导出
docker export
[[email protected]_Machine_192.168.31.130 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58a473f60b3c my_redis_server:v3.2.7 "/usr/local/redis/bi…" 6 days ago Up About a minute 6001/tcp infallible_meitner
[[email protected]_Machine_192.168.31.130 ~]# docker export 58a473f60b3c > my_redis_server:v3.2.7.tar
导入
docker import 或 docker load
[[email protected]_Machine_192.168.31.130 ~]# cat my_redis_server:v3.2.7.tar | docker import - me/my_redis_server:v3.2.7
sha256:a2d3c452841fac44bd6bed3006f48dca2e5f5e68b76d207fd14619063fc251e6
[[email protected]_Machine_192.168.31.130 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
me/my_redis_server v3.2.7 a2d3c452841f 3 seconds ago 281MB
不用docker import my_redis_server:v3.2.7.tar 直接导入,是因为本地镜像库已经有了my_redis_server:v3.2.7 这个镜像了。
import 与 load区别:
想要清楚的了解docker load
与docker import
命令的区别,就必须了解镜像与容器的区别:
- 镜像:用来启动容器的只读模板,是容器启动所需的rootfs,类似于虚拟机所使用的镜像。
- 容器:Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
镜像是容器的基础,可以简单的理解为镜像是我们启动虚拟机时需要的镜像,容器时虚拟机成功启动后,运行的服务。
想要了解docker load
与docker import
命令的区别,还必须知道docker save
与docker export
命令:
docker save images_name
:将一个镜像导出为文件,再使用docker load
命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export
命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。docker export container_id
:将一个容器导出为文件,再使用docker import
命令将容器导入成为一个新的镜像,但是相比docker save
命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。
以上是关于Docker容器的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Rider 调试使用 docker 容器和 docker-compose 构建的 .net 核心应用程序。容器退出代码 139
vscode 远程连接 docker 容器进行 C++ 代码调试实践