docker官方鏡像-nginx
官方構建的Nginx
什麼是nginx?
Nginx(發音爲“engine-x”)是用於HTTP,HTTPS,SMTP,POP3和IMAP協議的開源反向代理服務器,以及負載均衡器,HTTP緩存和Web服務器(源服務器)。nginx項目首先關注高併發性,高性能和低內存使用率。它根據類似BSD的2條款許可,可在Linux,BSD變體,Mac OS X,Solaris,AIX,HP-UX以及其他* nix版本上運行。它還具有Microsoft Windows的概念驗證端口。
如何使用此鏡像
託管一些簡單的靜態內容
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
或者,Dockerfile
可以使用simple 來生成包含必要內容的新鏡像(這是比上面的bind mount更清晰的解決方案):
FROM nginx
COPY static-html-directory /usr/share/nginx/html
將此文件放在與目錄(“static-html-directory”)相同的目錄中,運行docker build -t some-content-nginx .
,然後啓動容器:
$ docker run --name some-nginx -d some-content-nginx
暴露外部端口
$ docker run --name some-nginx -d -p 8080:80 some-content-nginx
然後你可以點擊http://localhost:8080
或http://host-ip:8080
在你的瀏覽器中。
複雜的配置
$ docker run --name my-custom-nginx-container -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
有關nginx配置文件語法的信息,請參閱官方文檔(特別是初學者指南)。
如果您希望調整默認配置,請使用以下內容從正在運行的nginx容器中複製它:
$ docker run --name tmp-nginx-container -d nginx
$ docker cp tmp-nginx-container:/etc/nginx/nginx.conf /host/path/nginx.conf
$ docker rm -f tmp-nginx-container
這也可以使用簡單的Dockerfile(in /host/path/)更乾淨地完成:
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
如果您添加自定義CMD的Dockerfile,一定要包括-g daemon off
;在CMD爲了nginx的留在前臺,讓泊塢窗可以跟蹤工藝不當(否則你的容器將啓動後立即停止)!
然後使用以下方式構建鏡像docker build -t custom-nginx .
並運行它:
$ docker run --name my-custom-nginx-container -d custom-nginx
在nginx配置中使用環境變量
開箱即用,nginx不支持大多數配置塊中的環境變量。但是,envsubst
如果您需要在nginx啓動之前動態生成nginx配置,則可以將其用作解決方法。
以下是使用docker-compose.yml的示例:
web:
image: nginx
volumes:
- ./mysite.template:/etc/nginx/conf.d/mysite.template
ports:
- "8080:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80
command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
mysite.template然後該文件可能包含這樣的變量引用:
listen ${NGINX_PORT};
以只讀模式運行nginx
要以只讀模式運行nginx,您需要將Docker卷安裝到nginx寫入信息的每個位置。默認的nginx配置需要對/var/cache和的寫訪問權限/var/run。這可以通過運行nginx輕鬆完成,如下所示:
$ docker run -d -p 80:80 --read-only -v $(pwd)/nginx-cache:/var/cache/nginx -v $(pwd)/nginx-pid:/var/run nginx
如果您有更高級的配置需要nginx寫入其他位置,只需向這些位置添加更多卷裝入。
在調試模式下運行nginx
從版本1.9.8開始的圖像帶有nginx-debug二進制文件,在使用更高的日誌級別時會生成詳細輸出。它可以與簡單的CMD替換一起使用:
$ docker run --name my-nginx -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx nginx-debug -g 'daemon off;'
docker-compose.yml中的類似配置可能如下所示:
web:
image: nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
command: [nginx-debug, '-g', 'daemon off;']
用戶和組ID
從1.17.0開始,基於alpine-和基於debian的圖像變體使用相同的用戶和組ID來刪除工作進程的權限:
$ id
uid=101(nginx) gid=101(nginx) groups=101(nginx)
以非root用戶身份運行nginx
可以將圖像作爲權限較低的任意UID / GID運行。但是,這需要修改nginx配置以使用該特定UID / GID對可寫的目錄:
$ docker run -d -v $PWD/nginx.conf:/etc/nginx/nginx.conf nginx
其中當前目錄中的nginx.conf應該重新定義以下指令:
pid /tmp/nginx.pid;
並在http上下文中:
http {
client_body_temp_path /tmp/client_temp;
proxy_temp_path /tmp/proxy_temp_path;
fastcgi_temp_path /tmp/fastcgi_temp;
uwsgi_temp_path /tmp/uwsgi_temp;
scgi_temp_path /tmp/scgi_temp;
…
}
使用Amplify監控nginx
Amplify是一款免費的監控工具,可用於監控基於nginx的微服務架構。Amplify由nginx軟件背後的公司開發和維護。
使用Amplify,可以跨容器收集和聚合度量,並提供關鍵性能數據的一組連貫可視化,例如活動連接或每秒請求。通過快速檢查任何性能下降,流量異常以及更深入地瞭解nginx配置,也很容易。
爲了使用Amplify,應在容器內安裝一個基於Python的小型代理軟件(Amplify Agent)。
有關Amplify的更多信息,請查看此處的官方文檔。
圖像變體
該nginx圖像有許多種,每一個設計用於特定的使用情況。
nginx:
這是事實上的形象。如果您不確定您的需求是什麼,您可能想要使用這個。它被設計爲既可以用作丟棄容器(安裝源代碼並啓動容器來啓動應用程序),也可以用作構建其他圖像的基礎。
nginx:-alpine
該圖像是基於流行的高山Linux項目,可用的alpine官方圖片。Alpine Linux比大多數分發基礎圖像(約5MB)小得多,因此通常會導致更小的圖像。
當最終圖像尺寸儘可能小時,強烈建議使用此變體。需要注意的主要注意事項是它確實使用musl libc而不是glibc和朋友,因此某些軟件可能會遇到問題,具體取決於其libc要求的深度。但是,大多數軟件都沒有這個問題,因此這種變體通常是一個非常安全的選擇。請參閱此黑客新聞評論主題,以獲取有關可能出現的問題的更多討論以及使用基於Alpine的圖像的一些比較/比較。
爲了最小化圖像大小,在基於Alpine的圖像中包含其他相關工具(例如git或bash)並不常見。使用此圖像作爲基礎,在您自己的Dockerfile中添加所需的內容(如果您不熟悉,請參閱alpine圖像說明以獲取如何安裝軟件包的示例)。
License
查看此映像中包含的軟件的許可證信息。
與所有Docker映像一樣,這些映像可能還包含其他許可證(例如來自基本分發版的Bash等,以及所包含的主要軟件的任何直接或間接依賴關係)。
這是能夠自動檢測一些額外的許可信息可能中找到的repo-info版本庫的nginx/目錄。
對於任何預先構建的圖像使用,圖像用戶有責任確保對此圖像的任何使用都符合其中包含的所有軟件的任何相關許可。