Rumah >Operasi dan penyelenggaraan >Nginx >Bagaimana untuk menggunakan dockerfile untuk membina imej nginx

Bagaimana untuk menggunakan dockerfile untuk membina imej nginx

WBOY
WBOYke hadapan
2023-05-14 20:13:104197semak imbas

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 , hanya masukkan arahan dalam persekitaran bash Fail docker dibenarkan untuk menggunakan run untuk tidak lebih daripada 127 lapisan, jika anda menggunakan run sekali. gunakan ' ' untuk memecahkan baris , gunakan '&&' untuk melaksanakan arahan seterusnya. Format ini biasanya digunakan;

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 = untuk mengatasi

 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 : Tetapkan arahan untuk memeriksa kesihatan bekas

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:

Bagaimana untuk menggunakan dockerfile untuk membina imej nginx

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
exit
rrree

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam