一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - 服務(wù)器知識 - Docker容器配置Nginx實例分享

Docker容器配置Nginx實例分享

2020-09-27 21:09服務(wù)器知識網(wǎng) 服務(wù)器知識

這篇文章主要介紹了Docker容器配置Nginx實例分享的相關(guān)資料,需要的朋友可以參考下

作為目前最火的應(yīng)用,Docker 確實存在著其獨到之處,無論是程序猿還是運維都應(yīng)該聽說過 Docker 的大名,Docker 已經(jīng)走過了許多的坑,目前最新版本是 v1.11.0 版本,應(yīng)該說是完全能承載開發(fā)使用和運維監(jiān)控,這款工具能幫助我們高效的打包、發(fā)布和運行承載著應(yīng)用程序的容器系統(tǒng)。而且收集日志、幫助 App 的快速開發(fā)都有很大作用。

容器和虛擬機,經(jīng)常是被拿出來對比的兩款產(chǎn)品,實際上兩者有著根本的差別,虛擬機是完全模擬了一臺真實計算機,在上面運行的系統(tǒng)可能或者不可能知道自己運行在虛擬化環(huán)境下,并且虛擬機承載了將用戶指令轉(zhuǎn)換為特權(quán)指令的功能,所以虛擬機非常復(fù)雜,但是很完備,而 Docker 則完全不同。Docker 使用主機自身的 Linux 內(nèi)核,然后從鏡像中產(chǎn)生磁盤目錄和軟件,所有的進程都運行在主機上,如果有興趣的話完全可以 ps aux 查詢一下,就能發(fā)現(xiàn)在 Docker 中運行的進程,只不過 Docker 對其做了如同 chroot 差不多概念的封裝。

Docker 真正用法

在 Docker 發(fā)展的早期,由于 busybox 等輕量化鏡像不完備,所以各大發(fā)行版的縮減瘦身鏡像得到了更多的使用,特別是由于 Docker 本身是在 Ubuntu 環(huán)境下開發(fā)的,所以 Ubuntu 和 Debian 在很多鏡像中作為基鏡像,以此作為基礎(chǔ)產(chǎn)生目標鏡像。但是隨著在實踐中的使用,其弊端也暴露出來了,就是太過于重量化,比如 systemd 的日志功能和 Docker 本身的日志功能被重復(fù)使用,鏡像很難縮小到 300M 以內(nèi)。而且 Docker 的推薦使用方式就是單進程模型,而并非是多個進程如同一個完備的操作系統(tǒng)一般。所以就產(chǎn)生了 alpine 等輕量級基鏡像,alpine 是什么則可以自行百度,這個鏡像是 Docker 官方推薦的鏡像,未來官方鏡像將會遷移到 alpine 作為基礎(chǔ)的鏡像上,所以,我們應(yīng)當早日熟悉此鏡像。

構(gòu)建 Dockerfile

本文講述的是 Docker 容器的 Nginx 實踐,不過官方實際上已經(jīng)有了關(guān)于 Nginx 的 alpine 鏡像。而在實際使用過程中,筆者更多的是使用 Tengine,所以根據(jù)官方 Dockerfile 的參考,筆者自行編寫了 Tengine 鏡像的 Dockerfile,希望能拋磚引玉,各位能夠批評指正。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
FROM alpine:3.3
MAINTAINER ChasonTang <[email protected]>
 
ENV TENGINE_VERSION 2.1.2
ENV CONFIG "\
    --prefix=/etc/nginx \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --http-client-body-temp-path=/var/cache/nginx/client_temp \
    --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
    --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_realip_module \
    --with-http_addition_module \
    --with-http_sub_module \
    --with-http_dav_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_gunzip_module \
    --with-http_gzip_static_module \
    --with-http_random_index_module \
    --with-http_secure_link_module \
    --with-http_auth_request_module \
    --with-mail \
    --with-mail_ssl_module \
    --with-file-aio \
    --with-http_spdy_module \
    --with-ipv6 \
    --with-jemalloc \
    "
 
ADD ngx_user.patch /
ADD repositories /etc/apk/repositories
 
RUN \
  addgroup -S nginx \
  && adduser -D -S -h /var/cache/nginx -s /sbin/nologin -G nginx nginx \
  && apk add --no-cache --virtual .build-deps \
    gcc \
    libc-dev \
    make \
    openssl-dev \
    pcre-dev \
    zlib-dev \
    linux-headers \
    curl \
    jemalloc-dev \
  && curl "http://tengine.taobao.org/download/tengine-$TENGINE_VERSION.tar.gz" -o tengine.tar.gz \
  && mkdir -p /usr/src \
  && tar -zxC /usr/src -f tengine.tar.gz \
  && rm tengine.tar.gz \
  && cd /usr/src/tengine-$TENGINE_VERSION/src/os/unix/ \
  && mv /ngx_user.patch ./ngx_user.patch \
  && patch ngx_user.c ngx_user.patch \
  && rm ngx_user.patch \
  && cd ../../../ \
#  && cd /usr/src/tengine-$TENGINE_VERSION \
  && ./configure $CONFIG --with-debug \
  && make \
  && mv objs/nginx objs/nginx-debug \
  && ./configure $CONFIG \
  && make \
  && make install \
  && rm -rf /etc/nginx/html/ \
  && mkdir /etc/nginx/conf.d/ \
  && mkdir -p /usr/share/nginx/html/ \
  && install -m644 html/index.html /usr/share/nginx/html/ \
  && install -m644 html/50x.html /usr/share/nginx/html/ \
  && install -m755 objs/nginx-debug /usr/sbin/nginx-debug \
  && strip /usr/sbin/nginx* \
  && runDeps="$( \
    scanelf --needed --nobanner /usr/sbin/nginx \
      | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
      | sort -u \
      | xargs -r apk info --installed \
      | sort -u \
  )" \
  && apk add --virtual .nginx-rundeps $runDeps \
  && apk del .build-deps \
  && rm -rf /usr/src/nginx-$NGINX_VERSION \
  && apk add --no-cache gettext \
  \
  # forward request and error logs to docker log collector
  && ln -sf /dev/stdout /var/log/nginx/access.log \
  && ln -sf /dev/stderr /var/log/nginx/error.log
 
COPY nginx.conf /etc/nginx/nginx.conf
COPY nginx.vh.default.conf /etc/nginx/conf.d/default.conf
 
EXPOSE 80 443
 
CMD ["nginx", "-g", "daemon off;"]

我們知道,Docker 可以根據(jù) Dockerfile 構(gòu)建鏡像,上面就是筆者寫的 Dockerfile。首先,使用 FROM 指令指定此鏡像的基鏡像為 alpine:3.3,第二行為 Dockerfile 維護者聲明,然后使用兩個 ENV 指令聲明兩個環(huán)境變量,一個指定 Tengine 需要獲取的版本號,一個則是編譯安裝選項。這里暫時不講解,然后將一個補丁文件和 alpine 鏡像源配置文件復(fù)制到容器內(nèi),實際上是因為 tengine v2.1.2 存在著一個遺留的 glibc bug,會導致編譯時出錯,上游 Nginx 的最新代碼已經(jīng)修復(fù),而 tengine 的開發(fā)分支上面也已經(jīng)修復(fù)了這個問題,筆者前不久提 issue 將此補丁修正了 tengine v2.1.3 分支的代碼,但是很可惜,v2.1.3 版本尚未有正式發(fā)布,所以只能先使用補丁手動修復(fù)此問題。至于鏡像源,則是因為國內(nèi)存在著網(wǎng)絡(luò)問題,導致 apk 包管理命令無法成功下載各個依賴項,所以將其指定為了國內(nèi)源,如果正式使用則可以移除這兩個文件。

然后就是使用 RUN 命令執(zhí)行代碼,這里大家可以看到筆者使用 && 和 \ 將所有的指令都壓縮為了一行,這里是有兩個原因:

RUN 指令不會保存上一條指令的工作路徑,每條 RUN 指令都只會將工作目錄指定為 / 目錄
一條 Dockerfile 中的指令就會產(chǎn)生一次鏡像的提交,換言之,減少 Dockerfile 中的指令就可以提高鏡像的復(fù)用水平
然后就是使用 apk 包管理命令下載安裝包括編譯器等依賴項,并且將這些依賴項標記為 .build-deps 組,便于后面將其卸載清理。然后就是非常常規(guī)的思路,./configure && make && make install,編譯選項都是非常中規(guī)中矩的,基本熟悉 Nginx 編譯的朋友都能看懂。但是上面可以注意到,Nginx 被編譯了兩次,一次開啟了 --with-debug 參數(shù),一次沒有,這是因為在很多情況下,我們需要 Nginx 提供 debug 級別的監(jiān)控日志,特別是在開發(fā)環(huán)境下,所以就編譯了兩次,便于使用。然后后面使用字符串分析處理將 Tengine 的運行時依賴項提取出來,標記為 .nginx-rundeps 然后卸載 .build-deps,最后則是兩個符號鏈接將 accessLog 和 errorLog 鏈接到標準輸入輸出,這樣我們就能使用 docker logs 命令方便的查看日志了。最后則是復(fù)制自定義的 Nginx 配置文件,然后使用 nginx -g daemon off; 讓 Nginx 以前臺進程方式運行。

總結(jié)

到這里已經(jīng)講完了 Docker 在生產(chǎn)開發(fā)中的正確使用方法,Docker 也確實是一樣不可多得的好工具,祝愿大家早日使用 Docker 提升自己的生產(chǎn)力。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜视频一区二区三区 | 天天视频官网天天视频在线 | 亚洲欧美在线免费 | 国产一级视频久久 | 精品日韩欧美一区二区三区 | 波多野结中文字幕在线69视频 | 国产高清视频一区二区 | 铁牛tv 在线观看 | 国产99页 | 91色porny | 91制片厂制作果冻传媒2021 | 国产乱人乱精一区二区视频密 | 日韩欧美一区二区在线观看 | 国产综合成色在线视频 | 成人在线一区二区 | 亚洲欧美成人综合久久久 | 国内精品伊人久久大香线焦 | 成年人免费观看的视频 | 日本五十路六十30人8时间 | 激情亚洲| www日本视频| 日本javaajax| 五月婷婷在线观看 | 日韩欧美一区二区在线观看 | 海派甜心完整版在线观看 | 成人影院在线观看免费 | 成年男女免费视频观看性 | 精品AV亚洲乱码一区二区 | 精品免费久久久久久成人影院 | 国色天香视频完整版 | 国产免费专区 | 久久99精国产一区二区三区四区 | 欧美成人午夜片一一在线观看 | blacked在线播放 | 黑人粗长巨茎小说 | 精品国产免费一区二区三区 | 黑帮少爷爱上我第8集在线观看 | zol中关村在线 | 手机在线观看国产精选免费 | 日韩精品 欧美 | 亚洲精品人成网在线播放影院 |