Docker的容器
Posted 张松任
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker的容器相关的知识,希望对你有一定的参考价值。
容器是一个打包了应用和服务的环境,是一个轻量级的虚拟机,每一个容器都由一组特定的应用和必要的依赖库组成。
容器的管理操作
容器常见的命令:查看、创建、启动、终止和删除
创建容器
docker create
docker run
二者的区别在于docker create创建的容器处于停止状态,docker run 创建的容器处于启动状态
用docker create创建一个停止状态的容器
[[email protected] ~]# docker create centos:6.7 Unable to find image ‘centos:6.7‘ locally 6.7: Pulling from centos 3690474eb5b4: Pull complete 3624df1f7cf0: Pull complete 505dff91e9c8: Pull complete 2352e8cfa843: Pull complete a8b4df3be85c: Pull complete Digest: sha256:1fbc7ab8bd38dcb1c5b9608ac5358dbc1d3718b8e85c69bf5224d72e5f6d2e22 Status: Downloaded newer image for centos:6.7 a4cca9f1f77695ef11912963ec60b15e2fb4663c50792583c2e4fe2c375a35b6 [[email protected] ~]# [[email protected]ocker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a4cca9f1f776 centos:6.7 "/bin/bash" 10 seconds ago clever_pasteur [[email protected] ~]#
创建成功后,Docker会返回容器的ID,如上述中的:a4cca9f1f77695ef11912963ec60b15e2fb4663c50792583c2e4fe2c375a35b6。ID是可以唯一标识一个容器,每个容器的ID都是唯一的。
指定系统直接加centos,如果想要设置版本则需要centos:6.7
提示:Unable to find image ‘centos:6.7‘ locally,则是因为当执行docker run命令后,docker现在本地找指定的系统的镜像,如果找不到就会到共有的仓库Docker Hub中继续搜索,找到后下载并保存在本地
容器的文件系统是在只读的镜像文件上增加一层可读写的文件层,这样可以保证镜像不变而只记录改变的数据,这对容器的共享和传输都非常有利。
docker ps 可以查看正在运行的容器
docker ps –a 可以查看所有容器
docker run 相当于docker create 然后在使用docker start启动容器
使用docker run 命令可以创建两种类型的容器:
后台型、交互型容器
交互型容器:运行在前台,通常会指定有交互的控制台,给容器输入,也可以得到容器的输出。创建该容器的终端被关闭,在容器内部使用exit命令或者调用了doker stop/docker kill命令后,容器会变成停止状态
后台型容器:运行在后台,创建启动之后就与终端无关。即便终端关闭了,该后台容器也依然存在,只有调用docker stop 或docker kill命令后,容器会变成停止状态
创建交互型容器
[[email protected] ~]# docker run -i -t --name=inspect_shell centos:6.7 /bin/bash [[email protected] /]#
参数说明:
1、-i用于打开容器的标准输入(STDIN)
2、-t表示建立一个命令行终端
上述的两个标志就表示创建了一个交互shell,是创建交互容器的基本设置
3、--name表示为容器指定一个名字,如果不指定系统将随机产生一个名字
4、centos表示要使用的镜像,:6.7表示要用的linux版本
这样创建的交互容器通过ctrl+d或者exit命令退出该容器
容器只是停止并没有销毁,只是不再是运行状态
创建后台型容器
通过参数-d 既可以实现创建后台型容器
[[email protected] ~]# docker run --name daemon_while -d centos:6.7 /bin/bash -c "while true;do echo hello world;sleep 1;done" 35872eb5410af88fca93ab37aa38b79dfea1badbac91c90907bbbfa01e61f24e [[email protected] ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35872eb5410a centos:6.7 "/bin/bash -c ‘while 15 seconds ago Up 14 seconds daemon_while [[email protected] ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35872eb5410a centos:6.7 "/bin/bash -c ‘while 17 seconds ago Up 16 seconds daemon_while 285ee5d386cf centos:6.7 "/bin/bash" 9 minutes ago Exited (0) About a minute ago inspect_shell a4cca9f1f776 centos:6.7 "/bin/bash" About an hour ago clever_pasteur [[email protected] ~]#
这里也可以验证docker ps 以及docker ps –a的区别
docker ps 显示的为正在运行的容器
docker ps –a 显示所有的容器
docker ps的其他参数:
docker ps –l 显示最后创建的容器
docker ps –n=x显示最后创建的x个容器
docker ps –a –q 显示所有的容器名并只显示id
关于docker ps命令输入解释:
- CONTAINER ID :唯一标识容器的ID,是一个64位的十六进制数
- IMAGE:创建容器时使用的镜像
- COMMAND:容器最后运行的命令
- CREATED:创建容器的时间
- STATUS:容器的状态。如果是运行状态,则类似Up 16 seconds
如果是停止状态,则是类似Exited (0) About a minute ago,其中0是容器退出的错误代码,0为正常退出,其他数字则表示容器内部出现错误
- PORTS:对外开放的端口
- NAMES:容器名。和容器ID一样都可以唯一标识一个容器,同一台宿主主机上不允许有相同的容器存在,否则会冲突
启动容器
docker start 容器名/ID
容器运行过程中,总会有各种问题导致容器异常退出。默认情况下容器是不会重启的,为了让容器能够自动重启需要用—restart参数
--restart标志会检查容器的退出码,并决定是否需要重启
--restart=always:表示不管返回什么代码,Docker都会尝试重启容器
--restart=on-failure:5 :表示接收到一个非0的返回代码时最多可以重启5次
终止容器
交互型容器退出容器的方法:
ctrl+d
exit
交互型容器以及后台型容器都可以通过stop命令退出
docker stop 容器名/ID
强制退出:docker kill
删除容器
删除容器:docker rm 容器名 注意:这个命令无法删除正在运行的容器
强制删除:docker rm –f 容器名
如果想要删除所有的容器,可以:
docker rm `docker ps –a -q`
容器内信息获取和命令执行
依附容器
先启动交互型容器:docker start 容器名
然后从宿主机进入到容器中
docker attach 容器名
注意:这里执行过docker attach 容器名 后,需要多按一次回车才会进入到容器的shell交互界面
这里切记:attach是无法进入到后台型容器的
后台型容器本身就不接受用户交互输入
查看容器日志
docker logs –f 容器名 可以查看容器的日志
参数:
-tail 可以查看输入日志的行数
-f 将只需输入最新的日志
查看容器进程
docker top 容器名 可以查看容器中的进程
查看容器信息
docker inspect用于查看容器的配置信息,包含容器名、环境变量、运行命令,主机配置、网络配置合数据卷配置等
容器内执行命令
[[email protected] ~]# docker exec -d centos touch /home/fan.txt
通过docker attach centos进入容器可以查看创建的文件是否存在
如果想要交互型的执行命令可以通过
[[email protected] ~]# docker exec -t -i centos /bin/bash
然后就可以交互性的执行命令
容器的导入和导出
Docker的导入和导出分别由import命令和export命令完成
导出
[[email protected] ~]# docker export centos>my_centos.tar [[email protected] ~]# ls anaconda-ks.cfg install.log install.log.syslog my_centos.tar [[email protected] ~]#
导入
[[email protected] ~]# cat my_centos.tar|docker import - imported:centos 4ef3250d4123fea1bb6c01b2436479889f90b434cee23ac62aad7a75a2956fa5 [[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE imported centos 4ef3250d4123 47 seconds ago 190.6 MB centos 6.7 a8b4df3be85c 3 months ago 190.6 MB
res和tag分别表示生成的镜像和标记
同时可以通过网络导入镜像
docker import url res:tag
以上是关于Docker的容器的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Rider 调试使用 docker 容器和 docker-compose 构建的 .net 核心应用程序。容器退出代码 139
vscode 远程连接 docker 容器进行 C++ 代码调试实践