Rumah >Operasi dan penyelenggaraan >Docker >Bagaimana pekerja pelabuhan menghalang bekas daripada keluar secara automatik

Bagaimana pekerja pelabuhan menghalang bekas daripada keluar secara automatik

WBOY
WBOYasal
2022-03-08 10:40:215769semak imbas

Dalam docker, anda boleh menambah pra-proses pemastautin pada bekas supaya bekas tidak keluar secara automatik Anda boleh menggunakan parameter interaktif dan tty bekas docker untuk mendayakan arahan "sh/bash". sebagai arahan yang berpotensi dengan cara ini bekas tidak akan keluar secara automatik.

Bagaimana pekerja pelabuhan menghalang bekas daripada keluar secara automatik

Persekitaran pengendalian tutorial ini: sistem linux7.3, versi docker-1.13.1, komputer Dell G3.

Cara docker menghalang bekas daripada keluar secara automatik

Kitaran hayat bekas docker adalah berkaitan dengan pra-proses dalam bekas. Inilah sebabnya kami mungkin menghadapi beberapa bekas yang hanya dijalankan beberapa kali. Sebab mengapa ia tamat secara automatik dalam beberapa saat: Kerana tiada proses bahagian hadapan pemastautin dalam bekas, bekas itu keluar secara automatik selepas proses bahagian hadapan selesai dijalankan.

Contohnya, docker hello-world

# 一闪而过 输出一堆东西
docker run --name hello-world hello-world
# 可以看到 hello-world 容器已经退出了
docker ps -a

Bagaimanakah saya boleh menghalang bekas daripada keluar secara automatik? Jika kita ingin log masuk ke dalam bekas tulen seperti alpine/centos/ubuntu, pasang beberapa komponen perkhidmatan berdasarkannya, dan kemudian masukkannya ke dalam imej kita sendiri.

Melihat di Internet, terdapat banyak kaedah untuk melaksanakan gelung tak terhingga sementara(benar) (sudah tentu, tidur sebentar) atau gunakan tail -f /dev/null apabila mencipta bekas adalah untuk membuka bekas yang boleh Tujuan proses front-end penduduk. Malah, kita boleh menggunakan parameter interaktif dan tty bekas docker dengan lebih elegan untuk membuka perintah sh/bash (*nix system mesti ada) sebagai pra-perintah, supaya bekas itu tidak akan keluar secara automatik.

Sebagai contoh, gunakan imej alpine sebagai imej asas untuk mencipta bekas kecil sistem alpine supaya ia boleh dijalankan secara kekal supaya kita boleh log masuk dan melaksanakan arahan tertentu secara interaktif.

# 使用 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

Serahkan perubahan bekas untuk menjana imej baharu

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

Serahkan perubahan bekas untuk menjana imej baharu

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

Arahan di atas sebenarnya menggunakan sh/bash session Terminal berfungsi sebagai proses front-end supaya bekas tidak akan keluar secara automatik.

Jika anda fikir menulis dengan cara ini semasa membuat kontena akan menjadi kasar, tidak mengapa, kami boleh menolaknya untuk mengarang docker

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

Buat Bekas & Bekas Log Masuk

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

Lepaskan kedua-dua parameter tersebut melalui docker-compose, dan mulakan bekas perkhidmatan selepas orkestrasi.

Pembelajaran yang disyorkan: "tutorial video buruh pelabuhan"

Atas ialah kandungan terperinci Bagaimana pekerja pelabuhan menghalang bekas daripada keluar secara automatik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn