系列二章二小节,发现概念性的知识看得人并不多,csdn的一篇解决问题的博文,却涨粉近400+,有点意思~
本章内容
操作Docker容器
本文实操全部基于Ubuntu 20.04
同样,容器也是Docker重要的核心成员之一,Docker容器简单来说是一个运行实例,和上节的镜像(静态的只读文件)相比,容器是运行时的可写文件。
创建容器
一、新建容器
使用命令docker create
命令可以创建一个容器,执行命令如下。
再次输入docker ps -a
命令,可以看到我们刚刚创建的容器,执行命令如下。
容器被create
命令创建会处于停止状态,我们可以使用docker start
来启动它;create
命令附加参数较多,这里只列举部分常用的。
附加参数 | 备注 |
---|---|
-d | 是否后台(守护态)运行容器,默认为否。 |
–net | 指定容器的网络模式。 |
-p | 指定映射本地端口。 |
-v | 主机文件卷挂载到容器内。 |
-w | 指定容器的默认工作目录。 |
-e | 指定容器的环境变量。 |
–env-file | 同上,这个是指定从某个文件中读取环境变量。 |
–like | 连接到其他的容器,可以使IP或容器名。 |
–name | 指定容器别名。 |
–m | 指定容器的使用内存,单位可以使b、k、m或g。 |
–ulimit | 限制容器的最大文件数、最大进程数。 |
※ 这里只是列举了一些比较常用的附加参数,实际上create
和run
的附加参数特别多,如果有想了解的大家可以选择阅读《Docker技术入门与实战》或官网文档阅读了解。
二、启动容器
使用命令docker start
可以启动一个已经创建好的容器或已经停止的容器,执行命令如下。
三、新建并启动容器
使用命令docker run
可以直接创建容器并启动,相当于上边俩个命令的结合,docker run
命令会使Docker在后台检测该运行镜像是否存在于本地镜像仓库,不存在就会从公共或配置好的个人镜像仓库拉取并下载,同时会分配一个文件系统给容器,并在只读镜像层外挂载一层可读写层,然后从宿主机的网桥接口中桥接一个虚拟接口,从地址池配置一个IP地址给到容器,最后执行指定的应用程序,执行完毕自动终止,推荐! 执行命令如下。
很多时候,容器需要后台运行也就是所谓的守护状态运行,这时,可以添加-d
参数来实现,容器启动后都会返回一个唯一ID。
当然,并不是每一次的docker run
会使容器正常运行,如果因为命令无法正常运行,就会导致容器直接终止或退出,下方列举一些非正常运行的错误码。
- 127:该错误码指容器内命令无法找到。
- 126:该错误码指启动容器的命令无法执行,最常见于权限不够。
- 125:该错误码指Docker daemon执行错误,常见于执行了非Docker所支持的命令。
※ 演示命令不适用于生产环境,生产环境一定要挂载数据目录,防止容器或服务器重启导致配置丢失,尤其是数据库服务这些,不挂载数据目录,会导致数据丢失,读者一定要格外留心注意。
四、停止容器
使用命令docker stop
可以停止一个正在运行中的容器,也可以通过docker kill
来停止一个正在运行中的容器,俩者区别在于前者会先向容器发送sigterm信号,等待一段超时时间(默认10秒)后,再发送sigkill信号来停止容器,而后者会直接发送sigkill信号来强行停止容器,推荐前者! ,执行命令如下。
或
有细心读者会疑惑,有了启动,有了停止,没有重启这个操作吗?有!我们可以执行docker restart
来重新启动该容器。
五、进入容器
后台启动的容器,我们是无法看到容器中的信息的,也无法进行操作,这时我们可以执行命令docker attach
或docker exec
,此处不推荐采用前者进入容器,因为attach
命令打开的窗口是阻塞的,当某个窗口因命令阻塞时,其他窗口将无法执行操作,所有窗口都会同步显示,不是很方便实际使用与操作,这里推荐后者exec
,执行命令如下。
这里介绍一下-it
附加参数:
- -i:打开标准输入接受用户输入的命令。
- -t:分配一个伪终端。
※ 指定-it
附加参数来保持标准输入打开,并且分配一个伪终端是常用的进入容器方式。
六、删除容器
使用docker rm
可以删除已经停止的容器,执行命令如下。
有读者可能疑惑,不能强制删除容器吗?可以的,添加-f
附加参数,Docker会先发送sigkill信号给容器,停止容器,然后强行删除,这里不推荐这种方式,就不做演示了,其他附加参数:
- -v:删除该容器挂载的数据卷
- -l:删除容器的连接,该容器并不会被删除。
- -f:是否强制删除容器。
七、导出容器
使用docker export
可以导出容器为一个文件,不关心容器是否正在运行,只要是已经创建好的,都可以通过该命令导出为一个文件,常常用于应用迁移,执行命令如下。
通常添加-o
附加参数来指定导出的文件名,docker export mynginx > mynginx.tar
同理。
八、导入容器
使用docker import
可以将上述导出的容器文件导入为镜像,执行命令如下。
这与上篇操作镜像中的docker load
命令及其相似,都是导入为一个镜像,俩者区别是load
是将镜像存储文件导入为镜像,而import
是将容器快照导入为镜像,import
会将容器快照文件的历史数据与元数据信息全部丢弃,但可以在导入时重新指定标签等元数据信息,而load
会保存完整的记录,不能再导入时重新指定标签等元数据信息,体积更大。
☆ 参考文献:
《Docker技术入门与实战》 第2版
《Docker技术入门与实战》 第3版
◎ 文中所用到的资源链接:
【SIGINT,SIGKILL,SIGTERM信号区别,各类信号总结】https://blog.csdn.net/WJSZMD/article/details/89331751
您的点赞、评论、收藏、转发、关注是对我持续创作的最大帮助~