国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker容器的Nginx實(shí)踐

cheukyin / 1331人閱讀

摘要:而且收集日志幫助的快速開發(fā)都有很大作用。構(gòu)建本文講述的是容器的實(shí)踐,不過官方實(shí)際上已經(jīng)有了關(guān)于的鏡像。而在實(shí)際使用過程中,筆者更多的是使用,所以根據(jù)官方的參考,筆者自行編寫了鏡像的,希望能拋磚引玉,各位能夠批評(píng)指正。

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

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

Docker 真正用法

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

構(gòu)建 Dockerfile

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

FROM alpine:3.3
MAINTAINER ChasonTang 

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(/,/, "
so:", $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 維護(hù)者聲明,然后使用兩個(gè) ENV 指令聲明兩個(gè)環(huán)境變量,一個(gè)指定 Tengine 需要獲取的版本號(hào),一個(gè)則是編譯安裝選項(xiàng)。這里暫時(shí)不講解,然后將一個(gè)補(bǔ)丁文件和 alpine 鏡像源配置文件復(fù)制到容器內(nèi),實(shí)際上是因?yàn)?tengine v2.1.2 存在著一個(gè)遺留的 glibc bug,會(huì)導(dǎo)致編譯時(shí)出錯(cuò),上游 Nginx 的最新代碼已經(jīng)修復(fù),而 tengine 的開發(fā)分支上面也已經(jīng)修復(fù)了這個(gè)問題,筆者前不久提 issue 將此補(bǔ)丁修正了 tengine v2.1.3 分支的代碼,但是很可惜,v2.1.3 版本尚未有正式發(fā)布,所以只能先使用補(bǔ)丁手動(dòng)修復(fù)此問題。至于鏡像源,則是因?yàn)閲鴥?nèi)存在著網(wǎng)絡(luò)問題,導(dǎo)致 apk 包管理命令無法成功下載各個(gè)依賴項(xiàng),所以將其指定為了國內(nèi)源,如果正式使用則可以移除這兩個(gè)文件。

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

RUN 指令不會(huì)保存上一條指令的工作路徑,每條 RUN 指令都只會(huì)將工作目錄指定為 / 目錄

一條 Dockerfile 中的指令就會(huì)產(chǎn)生一次鏡像的提交,換言之,減少 Dockerfile 中的指令就可以提高鏡像的復(fù)用水平

然后就是使用 apk 包管理命令下載安裝包括編譯器等依賴項(xiàng),并且將這些依賴項(xiàng)標(biāo)記為 .build-deps 組,便于后面將其卸載清理。然后就是非常常規(guī)的思路,./configure && make && make install,編譯選項(xiàng)都是非常中規(guī)中矩的,基本熟悉 Nginx 編譯的朋友都能看懂。但是上面可以注意到,Nginx 被編譯了兩次,一次開啟了 --with-debug 參數(shù),一次沒有,這是因?yàn)樵诤芏嗲闆r下,我們需要 Nginx 提供 debug 級(jí)別的監(jiān)控日志,特別是在開發(fā)環(huán)境下,所以就編譯了兩次,便于使用。然后后面使用字符串分析處理將 Tengine 的運(yùn)行時(shí)依賴項(xiàng)提取出來,標(biāo)記為 .nginx-rundeps 然后卸載 .build-deps,最后則是兩個(gè)符號(hào)鏈接將 accessLogerrorLog 鏈接到標(biāo)準(zhǔn)輸入輸出,這樣我們就能使用 docker logs 命令方便的查看日志了。最后則是復(fù)制自定義的 Nginx 配置文件,然后使用 nginx -g daemon off; 讓 Nginx 以前臺(tái)進(jìn)程方式運(yùn)行。

總結(jié)

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/39275.html

相關(guān)文章

  • Docker上手實(shí)踐并部署NGINX

    摘要:上手實(shí)踐安裝使用安裝下注要求系統(tǒng)的內(nèi)核版本高于,查看本頁面的前提條件來驗(yàn)證你的版本是否支持。使用腳本安裝確保包更新到最新執(zhí)行安裝腳本執(zhí)行這個(gè)腳本會(huì)添加源并安裝。 Docker上手實(shí)踐 centos7安裝docker 使用 yum 安裝(CentOS 7下) 注:Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 ,查看本頁面的前提條件來驗(yàn)證你的CentOS 版本是否支持 D...

    Olivia 評(píng)論0 收藏0
  • Docker上手實(shí)踐并部署NGINX

    摘要:上手實(shí)踐安裝使用安裝下注要求系統(tǒng)的內(nèi)核版本高于,查看本頁面的前提條件來驗(yàn)證你的版本是否支持。使用腳本安裝確保包更新到最新執(zhí)行安裝腳本執(zhí)行這個(gè)腳本會(huì)添加源并安裝。 Docker上手實(shí)踐 centos7安裝docker 使用 yum 安裝(CentOS 7下) 注:Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 ,查看本頁面的前提條件來驗(yàn)證你的CentOS 版本是否支持 D...

    FingerLiu 評(píng)論0 收藏0
  • React 實(shí)踐項(xiàng)目 (五)Docker Nginx 部署 React

    摘要:在上已經(jīng)有接近的數(shù)了,是目前最熱門的前端框架。將整個(gè)應(yīng)用打包發(fā)布,自動(dòng)試用進(jìn)行壓縮與優(yōu)化。毫無疑問,這些重?fù)?dān)都將壓在企業(yè)開發(fā)人員身上團(tuán)隊(duì)之間如何高效協(xié)調(diào),快速交付產(chǎn)品,快速部署應(yīng)用,以及滿足企業(yè)業(yè)務(wù)需求,是開發(fā)人員亟需解決的問題。 React在Github上已經(jīng)有接近70000的 star 數(shù)了,是目前最熱門的前端框架。而我學(xué)習(xí)React也有一段時(shí)間了,現(xiàn)在就開始用 React+Red...

    EscapedDog 評(píng)論0 收藏0
  • React 實(shí)踐項(xiàng)目 (五)Docker Nginx 部署 React

    摘要:在上已經(jīng)有接近的數(shù)了,是目前最熱門的前端框架。將整個(gè)應(yīng)用打包發(fā)布,自動(dòng)試用進(jìn)行壓縮與優(yōu)化。毫無疑問,這些重?fù)?dān)都將壓在企業(yè)開發(fā)人員身上團(tuán)隊(duì)之間如何高效協(xié)調(diào),快速交付產(chǎn)品,快速部署應(yīng)用,以及滿足企業(yè)業(yè)務(wù)需求,是開發(fā)人員亟需解決的問題。 React在Github上已經(jīng)有接近70000的 star 數(shù)了,是目前最熱門的前端框架。而我學(xué)習(xí)React也有一段時(shí)間了,現(xiàn)在就開始用 React+Red...

    jsyzchen 評(píng)論0 收藏0
  • React 實(shí)踐項(xiàng)目 (五)Docker Nginx 部署 React

    摘要:在上已經(jīng)有接近的數(shù)了,是目前最熱門的前端框架。將整個(gè)應(yīng)用打包發(fā)布,自動(dòng)試用進(jìn)行壓縮與優(yōu)化。毫無疑問,這些重?fù)?dān)都將壓在企業(yè)開發(fā)人員身上團(tuán)隊(duì)之間如何高效協(xié)調(diào),快速交付產(chǎn)品,快速部署應(yīng)用,以及滿足企業(yè)業(yè)務(wù)需求,是開發(fā)人員亟需解決的問題。 React在Github上已經(jīng)有接近70000的 star 數(shù)了,是目前最熱門的前端框架。而我學(xué)習(xí)React也有一段時(shí)間了,現(xiàn)在就開始用 React+Red...

    ephererid 評(píng)論0 收藏0
  • Docker簡介、常用命令與實(shí)踐(二)

    摘要:上一篇簡介常用命令與實(shí)踐一六鏡像操作獲取鏡像下載鏡像到本地上有大量的高質(zhì)量的鏡像可以用,這里我們就說一下怎么獲取這些鏡像。 【上一篇:Docker簡介、常用命令與實(shí)踐(一)】 六、Docker鏡像操作 6.1 獲取鏡像(下載鏡像到本地) Docker Hub?上有大量的高質(zhì)量的鏡像可以用,這里我們就說一下怎么獲取這些鏡像。從 Docker 鏡像倉庫獲取鏡像的命令是?docker pul...

    mykurisu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<