Untuk memastikan bekas Docker berjalan dan tidak keluar, terdapat banyak cara untuk melakukannya. Dalam artikel ini, kami akan membincangkan beberapa kaedah yang biasa digunakan serta kebaikan dan keburukannya.
Docker menyediakan pilihan --restart
untuk memulakan semula bekas secara automatik apabila bekas keluar secara tidak normal. Terdapat tiga nilai pilihan, iaitu no
, on-failure
dan always
, yang masing-masing sepadan dengan tiada restart, restart pada exit abnormal dan selalu restart. Contoh khusus:
docker run --restart=always IMAGE_NAME
Kelebihan menggunakan pilihan --restart
ialah ia mudah dan mudah digunakan Anda hanya perlu menambah pilihan pada baris arahan. Tetapi jika ralat berlaku dalam bekas, ia akan terus dimulakan semula sehingga bekas itu dihentikan secara manual. Ini boleh menyebabkan ketidakstabilan kod dan kehilangan data.
Docker Compose ialah alat yang boleh mentakrif dan menjalankan berbilang bekas Docker. Ia boleh menerangkan hubungan antara bekas dan parameter permulaan melalui fail yml. Tambahkan konfigurasi berikut dalam fail docker-compose.yml
:
version: '3' services: app: build: . restart: always
Kemudian anda boleh menggunakan perintah docker-compose
untuk memulakan bekas: Pilihan
docker-compose up -d
restart: always
memberitahu Docker untuk memulakan semula secara automatik bekas apabila bekas keluar secara tidak normal. Kelebihan kaedah ini ialah ia boleh menguruskan berbilang bekas, yang mudah dan pantas, tetapi masih terdapat masalah kontena dimulakan semula sepanjang masa.
Menggunakan proses daemon ialah cara yang boleh dipercayai untuk memastikan bekas Docker daripada keluar. Mulakan proses daemon dalam bekas, dan kemudian biarkan bekas Docker berjalan di bawah pengawasan proses daemon. Jika terdapat masalah dengan bekas, daemon akan memulakan semula bekas.
Berikut ialah contoh menggunakan supervisor
daemon untuk memulakan perkhidmatan Node.js:
supervisord.conf
, tambah kandungan berikut: npm install -g supervisor
[supervisord] nodaemon=true [program:app] command=supervisor app.js directory=/app autostart=true autorestart=true user=root
Jana imej dan mulakan bekas :
RUN apt-get update && apt-get install -y supervisor COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
Kelebihan menggunakan daemon ialah anda boleh mengawal kelakuan bekas secara fleksibel, tetapi ia memerlukan beberapa kerja konfigurasi tambahan dan anda perlu memulakan daemon, yang mengambil beberapa sumber sistem.
Gunakan sistem pemantauan luaran untuk memantau bekas Docker dan mulakan semula bekas apabila pengecualian berlaku, membolehkan anda mengawal kelakuan bekas dengan lebih fleksibel. Apabila bekas tidak normal, sistem pemantauan boleh mengambil beberapa tindakan, seperti mengeluarkan penggera, merakam log, memulakan semula bekas, dsb.
Sebagai contoh, anda boleh menggunakan systemd
untuk memantau bekas Docker:
mydocker.service
, dengan kandungan berikut: docker build -t IMAGE_NAME . docker run -d IMAGE_NAME
Fail ini mentakrifkan bekas bernama myapp
. Apabila masalah berlaku dengan bekas, systemd
akan memulakan semula bekas secara automatik. Gunakan arahan systemctl
untuk mendayakan perkhidmatan ini:
[Unit] Description=My Docker Container [Service] ExecStart=/usr/bin/docker start -a myapp Restart=always RestartSec=10s ExecStop=/usr/bin/docker stop -t 2 myapp [Install] WantedBy=default.target
Kelebihan menggunakan pemantauan luaran ialah ia lebih fleksibel dan boleh menggunakan pelbagai sistem pemantauan pihak ketiga, tetapi ia memerlukan konfigurasi dan kerja penyelenggaraan tambahan.
Secara amnya, terdapat banyak cara untuk memastikan bekas Docker berjalan untuk masa yang lama, masing-masing mempunyai kebaikan dan keburukan tersendiri. Pilihan khusus harus berdasarkan keperluan sebenar. Apabila memulakan bekas, anda juga harus mempertimbangkan kestabilan dan keselamatan operasi kontena, dan menggunakan alat automasi yang sesuai untuk mengurangkan operasi manual.
Atas ialah kandungan terperinci buruh pelabuhan tidak pernah keluar dari bekas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!