本文主要简单介绍码头工人容器与前置进程的关系,以及如何编写Dockerfile/docker-compose。yml优雅的让容器可以常驻运行。
码头工人容器的生命周期是同容器中的前置进程相关在一起的,这也是我们平时可能会遇到一些容器只是运行几秒便自动结束的原因,因为容器中没有一个常驻的前置进程,前置进程运行结束后,容器便自动退出了。
比如码头工人hello world
#一闪而过输出一堆东西 码头工人运行——名称hello world hello world #可以看到hello world容器已经退出了 码头工人ps - >之前那怎样可以让容器不自动退出呢?如果我们想登入一个纯净的容器高山centos/ubuntu之类的,在其基础上安装一些服务组件,然后在提交成自己的镜像。
看网上有不少方法是创建容器时执行一个(真正的)时的死循环(当然,一睡下)或者用尾巴- f/dev/null一类的,反正就是以开启一个可以常驻的前置进程为目的。其实我们可以更优雅的使用码头工人容器的互动和tty参数来将sh/bash (* nix系统必有)命令作为前置命令开启,这样容器就不会自动退出了。
例如使用高山镜像做为基础镜像,创建一个高山系统小容器,让其可以常驻运行,以便我们登录交互执行某些命令。
#使用高山系统镜像创建容器 #我互动=true开启stdin # - t tty=true分配会话终端 # - d守护模式不加也可以不加就直接进入容器中了需要ctrl + p + q切出 #不能退出哟,退出相当于结束sh会话了容器会退出的 码头工人运行——阿尔卑斯高山sh - d -名字 #高山肯定在运行 码头工人ps #登入容器 码头工人exec -高山sh # apline使用的apk作为包管理 #安装个小火车 #后续可以使用码头工人commit - m“sl cmd高山”——“big_cat”高山big_cat/alpine_sl生成新的镜像 apk添加sl #退出容器注:- d启动的才可以,如果没有- d启动直接进入的sh终端则不能退出,否则容器也会退出 退出提交容器变更生成新的镜像
码头工人commit - m“sl cmd高山”——“big_cat”高山big_cat/alpine_sl 码头工人的图片 #有账号的话发布到码头工人上中心去 码头工人推big_cat/alpine_sl
#后续停止/启动容器时就不需要在指定——参数了 码头工人停止高山 码头工人开始高山提交容器变更生成新的镜像
码头工人commit - m“sl cmd高山”——“big_cat”高山big_cat/alpine_sl 码头工人的图片 #有账号的话发布到码头工人上中心去 码头工人推big_cat/alpine_sl以上命令其实是借助sh/bash会话终端作为前置进程,使得容器不会自动退出。
如果你觉得在创建容器时如此书写会很粗陋,没关系,我们可以将这些都推给docker-compose
docker-compose.yml版本:“3” 服务: big_cat_alpine: container_name: big_cat_alpine 图片:高山 stdin_open:真#我互动 tty:真# - t电传 特权:真 入口点(“上海”):#执行sh >之前创建容器,登入容器
docker-compose - d big_cat_alpine。/码头工人ps 码头工人exec - big_cat_alpine sh >之前通过docker-compose将那两个参数传入进的去,编排后启动服务容器。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
详解码头工人容器不自动退出结束运行的方法