Rumah > Artikel > Operasi dan penyelenggaraan > Bagaimana untuk menggunakan dockerfile untuk membina imej nginx
Pengenalan kepada dockerfile
Docker boleh membina imej secara automatik dengan membaca kandungan dockerfile Fail docker ialah fail teks yang mengandungi semua arahan yang perlu dilaksanakan semasa proses binaan. Ia juga boleh difahami bahawa fail docker ialah skrip yang ditafsirkan oleh program docker Ia terdiri daripada arahan satu demi satu. Setiap arahan sepadan dengan perintah di bawah sistem Linux. Dockerfile mempunyai format penulisan sendiri dan arahan yang disokong Program docker menyelesaikan kebergantungan antara arahan ini, serupa dengan makefile.
Program docker akan membaca fail docker dan menjana imej tersuai mengikut arahan. Berbanding dengan kotak hitam seperti imej, skrip yang jelas seperti dockerfile lebih mudah diterima oleh pengguna Ia jelas menunjukkan bagaimana imej dijana. Dengan fail docker, apabila kami perlu menyesuaikan keperluan tambahan kami sendiri, kami hanya perlu menambah atau mengubah suai arahan pada fail docker dan menjana semula imej, menghapuskan masalah menaip arahan.
Kaedah docker untuk membina imej: commit, dockerfile
1. Gunakan commit untuk membina imej:
Commit dibina berdasarkan asal imej Tujuan menggunakan kaedah ini untuk membina imej adalah untuk menyimpan beberapa maklumat konfigurasi dan maklumat yang diubah suai dalam imej. Bersamaan dengan syot kilat imej.
2. Gunakan dockerfile untuk membina imej:
Dockerfile ialah imej (disesuaikan) yang diperlukan untuk membina dengan cepat.
Arahan fail Docker:
daripada: Tentukan imej asas (daripada adalah arahan yang diperlukan dan mestilah arahan pertama).
run: digunakan untuk melaksanakan arahan baris arahan. Format asasnya:
Format Shell: jalankan
format exec: jalankan , kaedah ini adalah seperti format dalam panggilan fungsi; >Salin: Salin fail. Format asasnya:
Format 1: salin
Format 2: salin ["
tambah: Salinan fail yang lebih maju, menambah beberapa fungsi berdasarkan salinan Jika pakej yang dimampatkan disalin, ia akan dinyahmampat secara langsung dan No perlu menggunakan run untuk nyahmampat;
cmd: arahan permulaan kontena. Format asasnya:
Format Shell: cmd
Format Exec: cmd ["executable file", "Parameter 1", "Parameter 2"...]
Format senarai parameter: cmd ["Parameter 1", "Parameter 2"...], selepas menentukan arahan titik masuk, gunakan cmd untuk menentukan parameter khusus
Titik masuk: titik masuk. Format asasnya dibahagikan kepada exec dan shell,
Tujuan titik masuk adalah sama seperti cmd, iaitu untuk menentukan program dan parameter permulaan kontena. Entrypoint boleh diganti semasa operasi, tetapi ia lebih menyusahkan daripada cmd dan perlu ditentukan melalui parameter --entrypoint of docker run. Apabila titik masuk ditentukan, makna cmd berubah Daripada menjalankan perintahnya secara langsung, kandungan cmd dihantar ke arahan titik masuk sebagai parameter. Apabila dilaksanakan, ia menjadi:
env: Tetapkan pembolehubah persekitaran. (Anda boleh menggunakan pembolehubah yang digunakan di sini) Format asasnya:
Format 1: env
Format 2: env
arg: Bina parameter. Kesan parameter binaan dan env adalah sama Kedua-duanya menetapkan pembolehubah persekitaran. Perbezaannya ialah pembolehubah persekitaran yang dibina oleh arg tidak akan wujud apabila bekas dijalankan pada masa hadapan. Format asasnya:
Format 1: arg
Format 2: Nilai lalai ini boleh digunakan dalam binaan docker arahan binaan - - build-arg
volume: Tentukan volum tanpa nama. Format asasnya:
Format 1: volum ["
Format 2: volum
Dedah: Dedahkan port. Arahan pendedahan mengisytiharkan port yang disediakan oleh bekas masa jalan Apabila memulakan bekas, port tidak akan dibuka kerana pengisytiharan ini. Format asasnya:
Format 1: dedahkan
workdir: Tentukan direktori kerja. Format asasnya:
Format 1: workdir
Pengguna: Tentukan pengguna semasa. pengguna membantu anda bertukar kepada pengguna yang ditentukan. Format asasnya:
Format 1: pengguna
pemeriksaan kesihatan: Pemeriksaan kesihatan untuk menentukan sama ada status bekas itu normal. Format asasnya:
Format 1: healthcheck [pilihan] cmd
Format 2: healthcheck tiada: Jika imej asas mempunyai arahan pemeriksaan kesihatan , gunakan format ini untuk menyekat arahan pemeriksaan kesihatannya
Bina imej nginx:
Buat direktori dan tulis fail docker dalam direktori:
[root@docker ~]# mkdir mynginx [root@docker ~]# cd mynginx/ [root@docker mynginx]# pwd /root/mynginx [root@docker mynginx]#
Muat turun pakej kod sumber nginx ke direktori yang dibuat (direktori mynginx):
[root@docker ~]# wget -p /root/mynginx/ http://nginx.org/download/nginx-1.15.2.tar.gz
Tulis fail docker:
[root@docker mynginx]# vi dockerfile
Kandungannya adalah seperti berikut:
from centos run ping -c 1 www.baidu.com run yum -y install gcc make pcre-devel zlib-devel tar zlib add nginx-1.15.2.tar.gz /usr/src/ run cd /usr/src/nginx-1.15.2 \ && mkdir /usr/local/nginx \ && ./configure --prefix=/usr/local/nginx && make && make install \ && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \ && nginx run rm -rf /usr/src/nginx-1.15.2 expose 80
Jalankan arahan docker untuk membina imej:
[root@docker mynginx]# docker build -t nginx:v3 . sending build context to docker daemon 1.029mb step 1/7 : from centos ---> 5182e96772bf step 2/7 : run ping -c 1 www.baidu.com ---> using cache ---> 2f70f8abaf2a step 3/7 : run yum -y install gcc make pcre-devel zlib-devel tar zlib ---> using cache ---> dbdda4b7ae6f step 4/7 : add nginx-1.15.2.tar.gz /usr/src/ ---> using cache ---> 18ace6285668 step 5/7 : run cd /usr/src/nginx-1.15.2 && mkdir /usr/local/nginx && ./configure --prefix=/usr/local/nginx && make && make install && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ && nginx ---> using cache ---> 99629488ede9 step 6/7 : run rm -rf /usr/src/nginx-1.15.2 ---> using cache ---> 869fbad71879 step 7/7 : expose 80 ---> using cache ---> 384bed72ea6f successfully built 384bed72ea6f successfully tagged nginx:v3
Menghasilkan dua berjaya bermakna binaan berjaya!
Mulakan imej tersuai:
Gunakan imej docker untuk melihat imej terbina:
Mulakan imej tersuai:
[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3 ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858 [root@docker ~]# docker ps -a container id image command created status ports names ecaafe119044 nginx:v3 "/bin/bash" 3 seconds ago up 2 seconds 0.0.0.0:80->80/tcp nginx
Nota: Pada masa ini, tidak kira bagaimana anda memulakan bekas, ia akan tetap berada dalam keadaan keluar.
Selepas pelbagai penyelesaian, saya akhirnya mengetahui di mana masalahnya. Ternyata apabila bekas bermula, ia dimulakan di latar belakang yang sepadan dengan utas Ia sudah dimulakan pada permulaan, tetapi selepas ia melaksanakan arahan, ia keluar dan tidak berjalan di latar belakang, jadi gunakan parameter -dit. untuk membiarkannya Jalankan sahaja di latar belakang.
[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3 ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858 [root@docker ~]# docker ps -a container id image command created status ports names ecaafe119044 nginx:v3 "/bin/bash" 3 seconds ago up 2 seconds 0.0.0.0:80->80/tcp nginx
Walau bagaimanapun...
Masalah berlaku lagi pada masa ini Walaupun sudah selesai, antara muka halaman web nginx tidak dapat diakses dan sambungan telah ditolak! ! ! !
[root@docker ~]# curl 192.168.100.22 curl: (7) failed connect to 192.168.100.22:80; 拒绝连接 [root@docker ~]# elinks --dump 192.168.100.22 elinks: 拒绝连接
Kemudian, selepas bertanya kepada Baidu, fq dan Google, akhirnya saya menemui masalahnya. Ternyata anda hanya perlu menggunakan exec untuk memasuki bekas dan memulakan nginx.
[root@docker ~]# docker exec -it nginx bash [root@ecaafe119044 /]# nginx [root@ecaafe119044 /]# exit exitrrree
Atas ialah kandungan terperinci Bagaimana untuk menggunakan dockerfile untuk membina imej nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!