亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

docker 新手向 - 防止容器自動(dòng)退出的解決方案

Miyang / 5969人閱讀

摘要:其實(shí)我們可以更優(yōu)雅的使用容器的和參數(shù)來將系統(tǒng)必有命令作為前置命令開啟常駐運(yùn)行,如此容器便不會(huì)自動(dòng)退出了。

本文主要簡單介紹 docker 容器與前置進(jìn)程的關(guān)系,以及如何編寫 Dockerfile/docker-compose.yml 優(yōu)雅的讓容器可以常駐運(yùn)行。

docker 容器的生命周期是同容器中的前置進(jìn)程相關(guān)在一起的,這也是我們平時(shí)可能會(huì)遇到一些容器只是運(yùn)行幾秒便自動(dòng)退出的原因:因?yàn)槿萜髦袥]有一個(gè)常駐的前置進(jìn)程,前置進(jìn)程運(yùn)行結(jié)束后,容器便自動(dòng)退出了。

比如 docker hello-world

# 一閃而過 輸出一堆東西
docker run --name hello-world hello-world
# 可以看到 hello-world 容器已經(jīng)退出了
docker ps -a

那怎樣可以讓容器不自動(dòng)退出呢?比如我們想登入一個(gè)純凈的 OS容器 alpine/centos/ubuntu 之類的,在其基礎(chǔ)上安裝一些服務(wù)組件,然后在 commit 成自己的鏡像。

看網(wǎng)上有不少方法是創(chuàng)建容器時(shí)執(zhí)行一個(gè) while(true) 的死循環(huán)(當(dāng)然,sleep 一下)或者用 tail -f /dev/null 一類的,反正就是以開啟一個(gè)可以常駐的前置進(jìn)程為目的。

其實(shí)我們可以更優(yōu)雅的使用 docker 容器的 interactive 和 tty 參數(shù)來將 sh/bash (*nix 系統(tǒng)必有)命令作為前置命令開啟常駐運(yùn)行,如此容器便不會(huì)自動(dòng)退出了。

例如使用 alpine 鏡像做為基礎(chǔ)鏡像,創(chuàng)建一個(gè) alpine 系統(tǒng)小容器,讓其可以常駐運(yùn)行,以便我們登錄交互執(zhí)行某些命令。

部分鏡像可能有自己的 entrypoint 命令作為容器的前置進(jìn)程,會(huì)無效化我們 run 時(shí)傳入的執(zhí)行 sh 的命令,需使用 --entrypoint="" 進(jìn)行覆蓋。如需涉及相關(guān)的訪問權(quán)限,也請(qǐng)加上 --privileges=true 選項(xiàng)。
# 使用 alpine 系統(tǒng)鏡像創(chuàng)建容器
# -i interactive=true 開啟 stdin
# -t tty=true 分配會(huì)話終端
# -d 守護(hù)模式 不加也可以 不加就直接進(jìn)入容器中了 需要 ctrl+p+q 切出,不能 exit,exit 相當(dāng)于結(jié)束前置的 sh 會(huì)話了 容器會(huì)退出的
docker run -it -d --name my_alpine alpine sh
# my_alpine 容器處于運(yùn)行狀態(tài) 
docker ps
# 登入容器
docker exec -it my_alpine sh
# 查看 sh 會(huì)話數(shù)量 你會(huì)發(fā)現(xiàn)我們 run 時(shí)開啟的 sh 正在其中
ps
# apline 使用的 apk 作為包管理
# 安裝個(gè)小火車
# 后續(xù)可以使用 docker commit -m "alpine with sl cmd" -a "big_cat" my_alpine big_cat/alpine_sl 生成新的鏡像
apk add sl
# 退出當(dāng)前sh會(huì)話 run 時(shí)開啟的 sh 依然會(huì)作為前置進(jìn)程保證容器的運(yùn)行
exit

提交容器變更生成新的鏡像

docker commit -m "alpine with sl cmd" -a "big_cat" my_alpine big_cat/alpine_sl
docker images
# 有賬號(hào)的話發(fā)布到 docker hub 上去
docker push big_cat/alpine_sl
# 后續(xù)停止/啟動(dòng)容器日常操作即可
docker stop alpine
docker start alpine

提交容器變更生成新的鏡像

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
docker images
# 有賬號(hào)的話發(fā)布到 docker hub 上去
docker push big_cat/alpine_sl

以上命令其實(shí)是借助 sh/bash 會(huì)話終端作為前置進(jìn)程,使得容器不會(huì)自動(dòng)退出。

如果你覺得在創(chuàng)建容器時(shí)如此書寫會(huì)很粗陋,沒關(guān)系,我們可以將這些都推給 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"] # 執(zhí)行 sh

創(chuàng)建容器 & 登入容器

docker-compose up -d big_cat_alpine ./
docker ps
docker exec -it big_cat_alpine sh

通過 docker-compose 將那兩個(gè)參數(shù)傳入進(jìn)去,編排后啟動(dòng)服務(wù)容器。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/28079.html

相關(guān)文章

  • 寫給docker新手文章

    摘要:為什么要用對(duì)開發(fā)者來說啟動(dòng)速度快傳統(tǒng)虛擬機(jī)需要數(shù)分鐘的啟動(dòng)時(shí)間秒秒鐘啟動(dòng)。開發(fā)者只需要代碼到版本管理即可,接下來的自動(dòng)測(cè)試,自動(dòng)構(gòu)建,自動(dòng)部署都交給吧更輕松的擴(kuò)展。 1. 前言 相見恨晚用來形容我對(duì)docker的熱愛再合適不過了,自從用了docker,開發(fā)環(huán)境也不安裝了,系統(tǒng)想換就換了,部署更是一鍵部署,再也不用擔(dān)心在這臺(tái)機(jī)器上跑的好好的,其它機(jī)器有問題了... 寫這篇文章,也是為do...

    svtter 評(píng)論0 收藏0
  • 01-Docker新手入門初見篇

    摘要:了解開源的容器平臺(tái)用于分享管理容器的平臺(tái)使用客戶端服務(wù)器架構(gòu)模式。守護(hù)進(jìn)程會(huì)處理復(fù)雜繁重的任務(wù),例如建立運(yùn)行發(fā)布你的容器。客戶端和守護(hù)進(jìn)程之間通過或者進(jìn)行通信。 Step1:了解Docker 開源的容器平臺(tái):Golang https://github.com/docker/dockerDocker Hub: 用于分享、管理 Docker 容器的 Docker SaaS 平臺(tái) -- D...

    oujie 評(píng)論0 收藏0
  • 數(shù)人云工程師手記 | 新手快速入門Docker最新版管理工具

    摘要:在之前公眾號(hào)的數(shù)人云工程師手記基于的集群管理開發(fā)實(shí)踐對(duì)的服務(wù)發(fā)現(xiàn)及負(fù)載均衡有詳細(xì)的介紹。服務(wù)名稱為服務(wù)命名,必須為英文或數(shù)字。 本文是數(shù)人云9月22日線上微信群分享的文章實(shí)錄。數(shù)人云容器管理面板Crane開源以來,很多小伙伴對(duì)它還不是非常了解,數(shù)人云工程師金鑫從Crane技術(shù)背景、環(huán)境準(zhǔn)備和使用步驟等方面為大家做了詳細(xì)的介紹,并整理大家常見的問題逐一進(jìn)行了解答。 引言 Docker1....

    Tangpj 評(píng)論0 收藏0
  • Swoft 新手教程 - 通過 Docker 搭建一個(gè)開發(fā)環(huán)境

    摘要:前言是一個(gè)在之上構(gòu)建的一個(gè)高性能協(xié)程全??蚣?,而在里面是一個(gè)高級(jí)技能,所以在相關(guān)的環(huán)境安裝上也給許多人造成了很大的困擾,更是如此,本文將通過以一種極其簡單的方式解決運(yùn)行環(huán)境和開發(fā)環(huán)境的部署。 showImg(https://segmentfault.com/img/bVbeknK?w=512&h=197); 本系列文章將從使用層面介紹 Swoft 框架的使用及業(yè)務(wù)開發(fā),面向初中級(jí)的 P...

    tinysun1234 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<