本文主要简单介绍 docker 容器与前置进程的关系,以及如何编写 Dockerfile/docker-compose.yml 优雅的让容器可以常驻运行。
docker 容器的生命周期是同容器中的前置进程相关在一起的,这也是我们平时可能会遇到一些容器只是运行几秒便自动结束的原因:因为容器中没有一个常驻的前置进程,前置进程运行结束后,容器便自动退出了。
比如 docker hello-world
# 一闪而过 输出一堆东西 docker run --name hello-world hello-world # 可以看到 hello-world 容器已经退出了 docker ps -a
那怎样可以让容器不自动退出呢?如果我们想登入一个纯净的容器 alpine/centos/ubuntu 之类的,在其基础上安装一些服务组件,然后在 commit 成自己的镜像。
看网上有不少方法是创建容器时执行一个 while(true) 的死循环(当然,sleep 一下)或者用 tail -f /dev/null 一类的,反正就是以开启一个可以常驻的前置进程为目的。其实我们可以更优雅的使用 docker 容器的 interactive 和 tty 参数来将 sh/bash (*nix 系统必有)命令作为前置命令开启,这样容器就不会自动退出了。
例如使用 alpine 镜像做为基础镜像,创建一个 alpine 系统小容器,让其可以常驻运行,以便我们登录交互执行某些命令。
# 使用 alpine 系统镜像创建容器 # -i interactive=true 开启 stdin # -t tty=true 分配会话终端 # -d 守护模式 不加也可以 不加就直接进入容器中了 需要 ctrl+p+q 切出 # 不能 exit 哟, exit 相当于结束 sh 会话了 容器会退出的 docker run -it -d --name alpine alpine sh # alpine 肯定在运行 docker ps # 登入容器 docker exec -it alpine sh # apline 使用的 apk 作为包管理 # 安装个小火车 # 后续可以使用 docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl 生成新的镜像 apk add sl # 退出容器 注:-d 启动的才可以,如果没有 -d 启动直接进入的 sh终端 则不能退出,否则容器也会退出 exit
提交容器变更生成新的镜像
docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl docker images # 有账号的话发布到 docker hub 上去 docker push big_cat/alpine_sl
# 后续停止/启动容器时就不需要在指定 -it 参数了 docker stop alpine docker start alpine
提交容器变更生成新的镜像
docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl docker images # 有账号的话发布到 docker hub 上去 docker push big_cat/alpine_sl
以上命令其实是借助 sh/bash 会话终端作为前置进程,使得容器不会自动退出。
如果你觉得在创建容器时如此书写会很粗陋,没关系,我们可以将这些都推给 docker-compose
docker-compose.yml
version: '3' services: big_cat_alpine: container_name: big_cat_alpine image: alpine stdin_open: true # -i interactive tty: true # -t tty privileged: true entrypoint: ["sh"] # 执行 sh
创建容器 & 登入容器
docker-compose up -d big_cat_alpine ./ docker ps docker exec -it big_cat_alpine sh
通过 docker-compose 将那两个参数传入进去,编排后启动服务容器。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]