首頁  >  文章  >  運維  >  Docker下nginx外掛檔的方法是什麼

Docker下nginx外掛檔的方法是什麼

WBOY
WBOY轉載
2023-05-13 15:04:121781瀏覽

外掛檔案的目的:

  • 檔案不受docker映像檔的約束,可以修改,重啟容器,可以使用更新後的文件,不會被映像還原

  • 容器運行過程中記錄的文件如日誌等信息,可以被自動保存在外部存儲上,不會由於容器重啟而丟失

#而執行容器有兩種方式:

  • docker run指令

  • #docker-compose指令

## docker run指令方式,透過-v參數掛載外部主機目錄到容器內的路徑上,有多個掛載點,就透過多個-v參數指定,而且只能使用絕對路徑;docker-compose指令則透過service的方式描述容易,準確的說一個服務下面可以包含多個容器,也是透過-v參數配置外部路徑的掛載配置,好處是可以使用相對路徑,當然是相對與docker-compose.yml檔案的路徑。還有一個好處是,docker-compose啟動容器的指令比較簡單。

假設映像打包路徑結構如下:

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

Dockerfile為建置映像的設定文件,內容如下:

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

以nginx為基礎,指定新的資料檔案路徑為/data/web/html,暴露埠為5180。

透過以下指令編譯新的鏡像:

docker build -t nginx:test-v1 .

#編譯出來的鏡像tag為test-v1,可以查看本機鏡像:

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

可以看到TAG為test- v1的鏡像是剛編譯出來的新鏡像。

建立nginx外掛卷nginx-vol以及相關的conf.d、logs、html資料夾,並把對應的內容放入各自對應的目錄下。如html資料夾下的iindex.html內容如下:

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

其實就是顯示目前時間的一個頁面而已。

logs下面為空,目的是讓容器運行時的日誌寫到外部存儲,即使容器停止或鏡像銷毀,運行過的日誌仍然可以保留。

conf.d下面為nginx個人化配置,內容如下:

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;
}

其實也就是在nginx預設的default.conf基礎上修改了埠和root路徑,目的是說明nginx的配置文件也可以使用外部存儲的,如果是自己的程式可以修改配置文件,那麼通過這樣的方式,可以在容器運行過程中修改配置文件;修改的配置文件實際存儲在外部存儲上,因此不會隨著容器的停止運作而消失,也不會恢復為鏡像內部的檔案。

docker run模式

為了方便,可以把執行指令寫到shell腳本中,如run.sh,內容如下:

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

可以看到指令中有3個-v,分別對應不同的外部儲存的掛載,映射到容器內的不同目錄下。

-p(注意是小寫)後面的端口分別為主機端口和容器端口,也就是主機的15180端口映射到容器的5180端口,這樣容器所啟動的nginx服務端口5180就可以通過訪問主機的15180埠而被映射起來。

查看運行中的容器:

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

詳細映射查看:

docker inspect nginx-v1

會顯示完整的信息,其中"Mounts"部分可以看到完整的存儲掛載映射情況。

直接看主機的nginx-vol/logs下面,可以看到容器中的nginx運行日誌自動寫到了外部主機的儲存。

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

停止容器:

docker stop nginx-v1

刪除容器:

docker rm nginx-v1

docker-compose模式

安裝docker-compose

apt-get install docker-compose	

編寫docker -compose.yml檔案

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:指定容器名稱

#image:要使用的映像以及對應的標籤

ports:主機連接埠與容器連接埠對應

volumes:外部儲存掛載映射

啟動容器

docker-compose up -d
Creating network "nginxtest_default" with the default driver
Creating mynginx ...
Creating mynginx ... done
###查看容器###
docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                           NAMES
635e2999c825   nginx:test-v1   "/docker-entrypoint.…"   24 seconds ago   Up 22 seconds   80/tcp, 0.0.0.0:80->5180/tcp, :::80->5180/tcp   mynginx
###可以看到容器按照docker-compose.yml配置運行,連接埠、名稱、掛載都正常。存取主機的80埠即可對應容器的5180服務。 ######停止容器###
docker-compose down
Stopping mynginx ... done
Removing mynginx ... done
Removing network nginxtest_default
###可以看到,使用docker-compose更簡單。 ###

以上是Docker下nginx外掛檔的方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除