本篇來自https://hub.docker.com/_/nginx/?tab=descriptionhtml
它是docker hub上nginx的官方網站,上面有關於nginx的使用描述等。從這裏你能夠找到關於docker的nginx鏡像,使用python
docker pull nginx
來拉取最新版本的nginx docker鏡像。linux
想要在docker下安裝nginx,可是按照網上的文章沒有成功啓用,翻譯一下官方的信息,記錄一下吧。nginx
在哪裏尋求幫助:
the Docker Community Forums, the Docker Community Slack, or Stack Overflowgit
在哪裏提交問題:
https://github.com/nginxinc/docker-nginx/issuesgithub
誰在維護:
the NGINX Docker Maintainersweb
受支持的架構: (more info)amd64
, arm32v6
, arm32v7
, arm64v8
, i386
, ppc64le
, s390x
docker
已發佈的鏡像製品清單:
repo-info repo's repos/nginx/
directory (history)
(image metadata, transfer size, etc)瀏覽器
鏡像的升級歷史:
official-images PRs with label library/nginx
official-images repo's library/nginx
file (history)緩存
該說明的來源:
docs repo's nginx/
directory (history)
受支持的Docker版本:
the latest release (down to 1.6 on a best-effort basis)
Nginx(發音爲「engine-x」)是一個用於HTTP、HTTPS、SMTP、POP3和IMAP協議的開源反向代理服務器,以及負載平衡器、HTTP緩存和web服務器(源服務器)。nginx項目從高度關注高併發性、高性能和低內存使用開始。它是在相似於BSD的第二條款許可下得到許可的,而且它運行在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能夠用來生成一個包含必要內容的新圖像(這是一個比上面綁定掛載乾淨得多的解決方案):
FROM nginx COPY static-html-directory /usr/share/nginx/html
將此文件放在與內容目錄相同的目錄中(「static-html-directory」),運行docker build -t some-content-nginx .,而後啓動容器(注意build語句最後面有一個點):
$ 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配置語法信息,請參閱the official documentation官方指南(特別是Beginner's Guide開始指引)。
若是你但願調整默認配置,請使用以下內容從運行中的nginx容器中複製它:
#運行一個nginx鏡像
$ docker run --name tmp-nginx-container -d nginx
#將容器的/etc/nginx/nginx.conf文件複製到宿主的/host/path/nginx.conf文件中 $ 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
若是你在Dockerfile中添加了一個自定義的CMD,必定要在CMD中包含-g 'daemon off;';爲了使nginx停留在前臺,所以Docker能夠正確地跟蹤過程(不然容器將在啓動後當即中止)!
而後使用docker build -t custom-nginx .
來構造鏡像,而後像下面這樣來運行鏡像:
$ docker run --name my-custom-nginx-container -d custom-nginx
開箱即用,nginx不支持大多數配置塊中的環境變量。可是,若是須要在nginx啓動以前動態生成nginx配置,可使用envsubst做爲解決方案。
下面是一個使用docker-composition.yml的例子(有關envsubst命令的說明:https://linux.die.net/man/1/envsubst):
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,須要將Docker卷掛載到nginx寫入信息的每一個位置。默認的nginx配置要求對/var/cache和/var/run進行寫訪問。這能夠經過將nginx運行爲f輕鬆實現
$ docker run -d -p 80:80 --read-only -v $(pwd)/nginx-cache:/var/cache/nginx -v $(pwd)/nginx-pid:/var/run 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;']
Amplify是一個免費的監控工具,能夠用來監控基於nginx的微服務架構。Amplify由nginx軟件背後的公司開發和維護。
使用Amplify能夠跨容器收集和聚合指標,並呈現關鍵性能數據的一組一致的可視化,好比每秒的活動鏈接或請求。快速檢查性能也很容易
爲了使用Amplify,應該在容器中安裝一個小型的基於python的代理軟件(Amplify agent)。
nginx鏡像有許多變體,每一個設計用於一個特定的用例。
nginx:<version>
這是事實上的鏡像。若是你不肯定你的需求是什麼,你可能想要使用這個。它被設計用來做爲一個丟棄容器(掛載源代碼並啓動容器來啓動應用程序),以及構建其餘鏡像的基礎。
nginx:<version>-alpine
此鏡像基於流行的Alpine Linux項目,可在Alpine官方圖像中找到。Alpine Linux比大多數發行版基礎映像(~5MB)小得多,所以一般會生成更瘦的映像。
當但願最終圖像大小盡量小時,強烈建議使用這種變體。須要注意的主要問題是,它確實使用了musl libc而不是glibc和friends,所以某些軟件可能會遇到問題,這取決於它們對libc的需求的深度。然而,大多數軟件都沒有這個問題,因此這個變體一般是一個很是安全的選擇。有關可能出現的問題的更多討論,以及使用基於alpine鏡像的一些利弊比較,請參閱this Hacker News comment thread查看關於這方面的更多的討論。
爲了最小化圖像大小,一般不會在基於阿爾卑斯的圖像中包含其餘相關工具(如git或bash)。使用此映像做爲基礎,在本身的Dockerfile中添加所需的內容(若是不熟悉如何安裝包,請參閱alpine映像描述中的示例)。