Docker下nginx外掛檔的方法是什麼
外掛檔案的目的:
-
檔案不受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('datetime').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's document root # concurs with nginx'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 down Stopping mynginx ... done Removing mynginx ... done Removing network nginxtest_default
以上是Docker下nginx外掛檔的方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

退出 Docker 容器的四種方法:容器終端中使用 Ctrl D 快捷鍵容器終端中輸入 exit 命令宿主機終端中使用 docker stop <container_name> 命令宿主機終端中使用 docker kill <container_name> 命令(強制退出)

Docker 中將文件拷貝到外部主機的方法:使用 docker cp 命令:執行 docker cp [選項] <容器路徑> <主機路徑>。使用數據卷:在主機上創建目錄,在創建容器時使用 -v 參數掛載該目錄到容器內,實現文件雙向同步。

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

重啟 Docker 容器的方法:獲取容器 ID(docker ps);停止容器(docker stop <container_id>);啟動容器(docker start <container_id>);驗證重啟成功(docker ps)。其他方法:Docker Compose(docker-compose restart)或 Docker API(參考 Docker 文檔)。

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。
