Docker架設(shè)Nginx服務(wù)器

前言

老實說悯许,不用Docker來架設(shè)nginx服務(wù)器仆嗦,是更方便的。

sudo apt-get install nginx

當(dāng)然先壕,如果你要指定最新版本瘩扼,會麻煩一些,需要從源碼編譯安裝垃僚,但也復(fù)雜不到哪兒去集绰。

Docker的優(yōu)勢是便于大規(guī)模部署。個人或小公司的單臺谆棺、幾臺服務(wù)器的部署栽燕,直接安裝可能更方便一些,解決問題也更便捷一些改淑。我作為一個個人用戶碍岔,用Docker更多是一種學(xué)習(xí)、或者趣向朵夏。

本文主旨是展示一次簡單的docker使用過程蔼啦,不對原理做出過多描述。默認(rèn)讀者已經(jīng)知道Nginx侍郭、Docker的基本概念询吴,已經(jīng)具備一臺(Debian/Ubutu系的)Linux服務(wù)器或本地電腦,并且已經(jīng)安裝了docker亮元、docker-compose。

Nginx的Docker鏡像

雖然唠摹,從基礎(chǔ)鏡像開始爆捞,自行寫一個Dockerfile,然后通過docker build來創(chuàng)建一個Docker鏡像勾拉,也并不是太難煮甥。但是盗温,這很繁瑣,足以嚇跑三分之二的初學(xué)者成肘,并且未必能收到最好的部署效果卖局。

一般要用Docker安裝一個東西的第一個步驟是,看看已經(jīng)有什么鏡像双霍。

$ sudo docker search nginx
NAME                                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                    Official build of Nginx.                        5358      [OK]
jwilder/nginx-proxy                      Automated Nginx reverse proxy for docker c...   947                  [OK]
richarvey/nginx-php-fpm                  Container running Nginx + PHP-FPM capable ...   349                  [OK]
jrcs/letsencrypt-nginx-proxy-companion   LetsEncrypt container to use with nginx as...   149                  [OK]
……

事實是砚偶,常用鏡像、或者新鮮出爐的服務(wù)洒闸,都早已有人做好了鏡像染坯。像Nginx這樣的,還有官方(Official)鏡像丘逸。

$ sudo docker pull nginx

這樣单鹿,官方鏡像已輕松收入囊中。

鏡像版本的選擇

默認(rèn)情況下深纲,鏡像的tag是latest仲锄。這是個類似git的master分支的東西,往往是最新版本的鏡像湃鹊。最新儒喊,意味著不穩(wěn)定。個人折騰時無所謂涛舍,如果是正式部署澄惊,還是需要追求穩(wěn)定。

對目前(2017年2月)的Nginx來說富雅,有以下常用鏡像可供選擇:

  • 1.11.10, mainline, 1, 1.11, latest (mainline/jessie/Dockerfile)
  • 1.11.10-alpine, mainline-alpine, 1-alpine, 1.11-alpine, alpine (mainline/alpine/Dockerfile)
  • 1.10.3, stable, 1.10 (stable/jessie/Dockerfile)
  • 1.10.3-alpine, stable-alpine, 1.10-alpine (stable/alpine/Dockerfile)

我個人傾向于選擇stable-alpine掸驱,它遠(yuǎn)比普通基于Debian制作的鏡像要小得多。

This image is based on the popular Alpine Linux project, available in the alpine official image. Alpine Linux is much smaller than most distribution base images (~5MB), and thus leads to much slimmer images in general.

Nginx的Debian與Alpine鏡像的比較:

基礎(chǔ)鏡像 Docker Hub 大忻挥印(壓縮狀態(tài)) 本地大斜显簟(解壓狀態(tài))
Debian 72 MB 181.5 MB
Alpine 18 MB 57.18 MB

雖然沒有詳細(xì)比較過運行時的性能差異,不過僅鏡像大小差異就足夠初次使用者做出選擇了蛤奢。

Alpine這個冷門的Linux發(fā)行版鬼癣,在Docker時代似乎正在開始流行起來。

使用docker-compose

直接使用docker run命令來運行一個容器啤贩,是比較麻煩的待秃。

sudo docker run \
    -p 80:80 \
    -v /srv/nginx/nginx.conf:/etc/nginx/nginx.conf \
    ...
    -d
    nginx:stable-alpine

這么長的命令,是不適合在命令行敲的痹屹。所以章郁,通常需要寫到一個shell文件里。

既然需要一個文件志衍,為何不用docker-compose呢暖庄?

# vim: set shiftwidth=2 tabstop=2 softtabstop=-1 expandtab:

version: '2'
services:
  nginx:
    image: nginx:stable-alpine
    restart: unless-stopped
    network_mode: host
    volumes:
      - /srv/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /srv/nginx/conf.d:/etc/nginx/conf.d
      - /srv/nginx/html:/usr/share/nginx/html
      - /var/log/nginx:/var/log/nginx
    ports:
      - "80:80"
    environment:
      - NGINX_HOST=your.domain
      - NGINX_PORT=80

將上述內(nèi)容聊替,寫入一個docker-compose.yml文件。在同級目錄培廓,執(zhí)行sudo docker-compose up惹悄,即可等價于一個超復(fù)雜的docker run ...

docker-compose最擅長的是描述一組容器的配置與關(guān)系肩钠,同時啟動或關(guān)閉泣港。但如果單個容器的配置也很復(fù)雜,我也傾向于使用它蔬将。

內(nèi)容管理

玩Nginx爷速,主要就是改它的配置。在最近的版本中霞怀,默認(rèn)配置是在/etc/nginx/nginx.conf惫东,而默認(rèn)的的網(wǎng)頁是在/usr/share/nginx/html

我看過一些其它的教程毙石,是基于官方鏡像廉沮,把自己的配置復(fù)制進(jìn)去,build出一個新的鏡像徐矩,然后再運行滞时。這樣的方案不太好,多加了一層滤灯,還不利于更新坪稽。

其實,把主機上需要修改和配置的內(nèi)容鳞骤,變成數(shù)據(jù)卷(Volume)掛載到容器中就好了窒百,就如我前面的docker-compose配置。

    volumes:
      - /srv/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /srv/nginx/conf.d:/etc/nginx/conf.d
      - /srv/nginx/html:/usr/share/nginx/html
      - /var/log/nginx:/var/log/nginx

雖然從實現(xiàn)技術(shù)來說豫尽,是把主機的目錄作為Volumn掛載到容器中去篙梢,但我還是更喜歡看做是把容器內(nèi)的東西,映射到外面的主機上來美旧,就像軟鏈接一樣渤滞。所謂理解,就是用簡單代表復(fù)雜榴嗅,用熟悉解釋陌生妄呕。

這里,所有內(nèi)容都放到主機的/srv/nginx目錄下嗽测,讓掛載進(jìn)容器使用趴腋;而/var那邊,相當(dāng)于把log也映射出來论咏。這樣优炬,在主機上也可以方便地修改配置與網(wǎng)頁,并且可以查看log厅贪。

如果考慮到更方便的部署與遷移蠢护,甚至可以把Nginx的配置與docker-compose.yml放在同一個目錄,組成一個Git庫养涮。volumes參數(shù)葵硕,也可改成相對路徑。然后贯吓,三條命令就可以在一臺機器上部署一個網(wǎng)站懈凹。

git clone git@server:repo/name.git Website
cd Website
sudo docker-compose up

這樣的部署方案,如此簡潔悄谐,以致優(yōu)雅介评。

參考

附錄

最后,以審美的目光爬舰,欣賞一下Nginx的stable鏡像的Dockerfile们陆。

FROM debian:jessie

MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com"

ENV NGINX_VERSION 1.10.3-1~jessie

RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
    && echo "deb http://nginx.org/packages/debian/ jessie nginx" >> /etc/apt/sources.list \
    && apt-get update \
    && apt-get install --no-install-recommends --no-install-suggests -y \
                        ca-certificates \
                        nginx=${NGINX_VERSION} \
                        nginx-module-xslt \
                        nginx-module-geoip \
                        nginx-module-image-filter \
                        nginx-module-perl \
                        nginx-module-njs \
                        gettext-base \
    && rm -rf /var/lib/apt/lists/*

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

該文件地址:
https://github.com/nginxinc/docker-nginx/tree/master/stable/jessie

曾經(jīng)有個想法,要把一些復(fù)雜的軟件安裝的過程情屹,從最初始的發(fā)行版開始腳本化坪仇,以便于二次安裝、移植垃你、大規(guī)模部署椅文、調(diào)試、除錯……

這些惜颇,Docker都以更優(yōu)雅的方式實現(xiàn)了皆刺。

集裝箱改變世界。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末官还,一起剝皮案震驚了整個濱河市芹橡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌望伦,老刑警劉巖林说,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異屯伞,居然都是意外死亡腿箩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門劣摇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珠移,“玉大人,你說我怎么就攤上這事【澹” “怎么了暇韧?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浓瞪。 經(jīng)常有香客問我懈玻,道長,這世上最難降的妖魔是什么乾颁? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任涂乌,我火速辦了婚禮,結(jié)果婚禮上英岭,老公的妹妹穿的比我還像新娘湾盒。我一直安慰自己,他們只是感情好诅妹,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布罚勾。 她就那樣靜靜地躺著,像睡著了一般漾唉。 火紅的嫁衣襯著肌膚如雪荧库。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天赵刑,我揣著相機與錄音分衫,去河邊找鬼。 笑死般此,一個胖子當(dāng)著我的面吹牛蚪战,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铐懊,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼邀桑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了科乎?” 一聲冷哼從身側(cè)響起壁畸,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茅茂,沒想到半個月后捏萍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡空闲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年令杈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碴倾。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡逗噩,死狀恐怖掉丽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情异雁,我是刑警寧澤捶障,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站片迅,受9級特大地震影響残邀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柑蛇,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驱闷。 院中可真熱鬧耻台,春花似錦、人聲如沸空另。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扼菠。三九已至摄杂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間循榆,已是汗流浹背析恢。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秧饮,地道東北人映挂。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像盗尸,于是被迫代替她去往敵國和親柑船。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容