docker學習之路-nginx鏡像(翻譯)

本篇來自https://hub.docker.com/_/nginx/?tab=descriptionhtml

它是docker hub上nginx的官方網站,上面有關於nginx的使用描述等。從這裏你能夠找到關於docker的nginx鏡像,使用python

docker pull nginx

來拉取最新版本的nginx docker鏡像。linux

想要在docker下安裝nginx,可是按照網上的文章沒有成功啓用,翻譯一下官方的信息,記錄一下吧。nginx

快速參考

nginx是什麼

Nginx(發音爲「engine-x」)是一個用於HTTP、HTTPS、SMTP、POP3和IMAP協議的開源反向代理服務器,以及負載平衡器、HTTP緩存和web服務器(源服務器)。nginx項目從高度關注高併發性、高性能和低內存使用開始。它是在相似於BSD的第二條款許可下得到許可的,而且它運行在Linux、BSD變體、Mac OS X、Solaris、AIX、HP-UX以及其餘*nix版本上。它還爲Microsoft Windows提供了概念端口的證實。

wikipedia.org/wiki/Nginx

如何使用該鏡像

託管一些靜態的內容

$ 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啓動以前動態生成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

要以只讀模式運行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寫入其餘位置,那麼只需向這些位置添加更多的卷掛載便可。

調試模式運行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由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映像描述中的示例)。

相關文章
相關標籤/搜索