Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Apakah kaedah untuk memasang fail pemalam nginx di bawah Docker?

Apakah kaedah untuk memasang fail pemalam nginx di bawah Docker?

WBOY
WBOYke hadapan
2023-05-13 15:04:121773semak imbas

Tujuan fail pemalam:

  • Fail tidak terikat dengan fail imej docker Ia boleh diubah suai dan bekas boleh dimulakan semula digunakan dan tidak akan dipulihkan oleh imej

  • Fail seperti log dan maklumat lain yang direkodkan semasa menjalankan bekas boleh disimpan secara automatik pada storan luaran dan tidak akan hilang akibat dimulakan semula bekas

Terdapat dua cara untuk menjalankan bekas:

  • perintah larian docker

  • arahan docker-compose

Kaedah arahan docker run menggunakan parameter -v untuk melekapkan direktori hos luaran ke laluan dalam bekas, tentukannya melalui berbilang parameter -v, dan hanya laluan mutlak boleh digunakan; perintah docker-compose menggunakan Kaedah perkhidmatan adalah mudah untuk menerangkan dengan tepat, perkhidmatan boleh mengandungi berbilang bekas, dan konfigurasi pemasangan laluan luaran juga dikonfigurasikan melalui. Parameter -v. Kelebihannya ialah anda boleh menggunakan laluan relatif, yang tentunya relatif kepada laluan fail docker-compose.yml . Kelebihan lain ialah arahan untuk docker-compose untuk memulakan bekas adalah agak mudah.

Anggap bahawa struktur laluan pembungkusan imej adalah seperti berikut:

├── build.sh
├── docker-compose.yml
├── Dockerfile
├── mynginx.conf
├── nginx-vol
│   ├── conf.d
│   │   └── mynginx.conf
│   ├── html
│   │   └── index.html
│   └── logs
│       ├── access.log
│       └── error.log
└── run.sh

Fail Docker ialah fail konfigurasi untuk membina imej, dan kandungannya adalah seperti berikut:

FROM nginx
LABEL maintainer="xxx" email="<xxx@xxx.com>" app="nginx test" version="v1.0"
ENV WEBDIR="/data/web/html"
RUN mkdir -p ${WEBDIR}
EXPOSE 5180

Berdasarkan nginx, tentukan laluan fail data baharu sebagai /data/web/html, port terdedah ialah 5180.

Kompilasi imej baharu melalui arahan berikut:

docker build -t nginx:test-v1 .

Teg imej yang disusun ialah test-v1, anda boleh melihat imej setempat:

docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        test-v1   d2a0eaea3fac   56 minutes ago   141MB
nginx        latest    605c77e624dd   9 days ago       141MB

Anda boleh melihat bahawa tag adalah ujian- Imej v1 ialah imej baharu yang baru disusun.

Buat nginx volum luaran nginx-vol dan folder conf.d, log dan html yang berkaitan, dan letakkan kandungan yang sepadan ke dalam direktori yang sepadan. Sebagai contoh, kandungan iindex.html dalam folder html adalah seperti berikut:

<html>
        <head>
                <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
                <title>系统时间</title>
        <body>
                <div id="datetime">
                        <script>
                                setInterval("document.getElementById(&#39;datetime&#39;).innerHTML=new Date().toLocaleString();",1000);
                        </script>
                </div>
        </body>
        </head>
</html>

sebenarnya hanyalah halaman yang memaparkan masa semasa.

Bahagian log kosong Tujuannya adalah untuk menulis log apabila bekas berjalan ke storan luaran Walaupun bekas dihentikan atau imej dimusnahkan, log berjalan masih boleh dikekalkan.

Confid berikut ialah konfigurasi diperibadikan nginx, kandungannya adalah seperti berikut:

server {
    listen       5180;
    #listen  [::]:5180;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;
    location / {
        root   /data/web/html;
        index  index.html index.htm;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    # deny access to .htaccess files, if Apache&#39;s document root
    # concurs with nginx&#39;s one
    #location ~ /\.ht {
    #    deny  all;
}

Malah, laluan port dan root diubah suai berdasarkan default.conf lalai nginx, tujuannya ialah untuk menggambarkan nginx Fail konfigurasi juga boleh disimpan secara luaran Jika program anda sendiri boleh mengubah suai fail konfigurasi, maka dengan cara ini, fail konfigurasi boleh diubah suai semasa fail konfigurasi yang diubah suai sebenarnya disimpan pada storan luaran , jadi ia tidak akan berubah pada bila-bila masa Ia hilang apabila bekas berhenti berjalan, dan tidak akan dipulihkan kepada fail di dalam imej.

mod larian docker

Untuk kemudahan, anda boleh menulis arahan larian ke dalam skrip shell, seperti run.sh, kandungannya adalah seperti berikut:

docker run --name nginx-v1 -p 15180:5180 -v /home/project/nginx-test/nginx-vol/logs:/var/log/nginx -v /home/project/nginx-test/nginx-vol/conf.d:/etc/nginx/conf.d -v /home/project/nginx-test/nginx-vol/html:/data/web/html -d nginx:test-v1

Anda boleh lihat bahawa terdapat 3 dalam arahan Setiap -v sepadan dengan lekapan storan luaran yang berbeza dan dipetakan ke direktori berbeza dalam bekas. Port selepas

-p (perhatikan bahawa ia adalah huruf kecil) masing-masing ialah port hos dan port kontena, iaitu, port 15180 hos dipetakan ke port 5180 kontena, supaya port perkhidmatan nginx 5180 yang dimulakan oleh kontena boleh diakses melalui Port 15180 hos dipetakan.

Lihat bekas yang sedang berjalan:

docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS                                                 NAMES
cf2275da5130   nginx:test-v1   "/docker-entrypoint.…"   6 seconds ago   Up 5 seconds   80/tcp, 0.0.0.0:15180->5180/tcp, :::15180->5180/tcp   nginx-v1

Lihat pemetaan terperinci:

docker inspect nginx-v1

akan memaparkan maklumat lengkap, di mana pemetaan pelekap storan lengkap boleh dilihat di bahagian "Mounts" Keadaan .

Lihat terus di bawah nginx-vol/logs pada hos, dan anda boleh melihat bahawa log berjalan nginx dalam bekas ditulis secara automatik ke storan hos luaran.

ls -l nginx-vol/logs/
total 12
-rw-r--r-- 1 root root 1397 1月   8 15:08 access.log
-rw-r--r-- 1 root root 4255 1月   8 15:59 error.log

Hentikan bekas:

docker stop nginx-v1

Padamkan bekas:

docker rm nginx-v1

mod docker-compose

Pasang docker-compose

apt-get install docker-compose	

Write docker -compose.yml file

version: "3"
services:
        nginx:
                container_name: mynginx
                image: nginx:test-v1
                ports:
                        - 80:5180
                volumes:
                        - ./nginx-vol/html:/data/web/html
                        - ./nginx-vol/logs:/var/log/nginx
                        - ./nginx-vol/conf.d:/etc/nginx/conf.d
                restart: always

container_name: Nyatakan nama kontena

imej: Imej yang akan digunakan dan label yang sepadan

ports: Port hos dan pemetaan port kontena

Hentikan bekas

docker-compose up -d
Creating network "nginxtest_default" with the default driver
Creating mynginx ...
Creating mynginx ... done

Seperti yang anda lihat, lebih mudah untuk menggunakan docker-compose.

Atas ialah kandungan terperinci Apakah kaedah untuk memasang fail pemalam nginx di bawah Docker?. 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