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

資訊專欄INFORMATION COLUMN

一種 Dockerize 應(yīng)用的簡(jiǎn)單方式

ddongjian0000 / 784人閱讀

摘要:為了證明模板,我們可以使用環(huán)境變量配置讓這個(gè)變成一個(gè)更通用的代理服務(wù)器。我們將定義環(huán)境變量作為一個(gè)站點(diǎn)的代理。當(dāng)這個(gè)容器使用這個(gè)環(huán)境變量啟動(dòng),將使用它來(lái)生成一個(gè)的路徑。

一種 Dockerize 應(yīng)用的簡(jiǎn)單方式

標(biāo)簽(空格分隔): Docker dockerize


  

作者是 jasonwilder。原文地址是 A Simple Way to Dockerize Applications

Dockerizing 一個(gè)應(yīng)用是轉(zhuǎn)化一個(gè)應(yīng)用運(yùn)行在 Docker 容器中的過程。雖然 dockering 大部分應(yīng)用是簡(jiǎn)單的,但是這里每次都有一些問題圍繞著工作。每次工作的時(shí)候有幾個(gè)問題都需要待解決。

在 dockerization 時(shí)兩個(gè)常見的問題是:

當(dāng)它依賴于配置文件時(shí),使得應(yīng)用使用環(huán)境變量

發(fā)送應(yīng)用日志到 STDOUT/STDERR,當(dāng)它默認(rèn)記錄在 Docker 的文件系統(tǒng)

這篇文章介紹一個(gè)新工具:dockerize ,它簡(jiǎn)化了這兩個(gè)常見的問題。

問題 配置

許多應(yīng)用使用配置文件來(lái)控制它們?cè)趺垂ぷ鳎煌倪\(yùn)行環(huán)境有不同的值。比如,對(duì)于一個(gè)開發(fā)環(huán)境的數(shù)據(jù)庫(kù)連接細(xì)節(jié)將與生產(chǎn)環(huán)境的不同。類似的,API keys 和其他的敏感細(xì)節(jié)在不同環(huán)境將不同。

使用 docker 容器有幾個(gè)方法可以處理這些環(huán)境變量的問題:

在鏡像中嵌入所有的環(huán)境變量細(xì)節(jié)和使用一個(gè)控制環(huán)境變量變量來(lái)指出在運(yùn)行時(shí)使用哪個(gè)文件。(比如:APP_CONFIG=/etc/dev.config)

在運(yùn)行時(shí),使用卷來(lái)掛載綁定配置文件的數(shù)據(jù)

使用封裝腳本,使用工具像 sed 那些環(huán)境變量來(lái)修改配置數(shù)據(jù)

嵌入所有的環(huán)境變量細(xì)節(jié)是不理想的,因?yàn)榄h(huán)境變量的改變應(yīng)該不需要重新構(gòu)建一個(gè)鏡像。它也缺少安全,因?yàn)槊舾袛?shù)據(jù) API keys, login 證書等等,作為環(huán)境變量被存儲(chǔ)在鏡像中。私發(fā)一個(gè)開發(fā)環(huán)境可能會(huì)泄露生產(chǎn)環(huán)境細(xì)節(jié)。有些類型的細(xì)節(jié)在任何鏡像中都應(yīng)該避免的。
使用 volumes 保持這些細(xì)節(jié)在鏡像外面,但會(huì)使得部署更復(fù)雜,因?yàn)槟悴粌H部署鏡像。你必須使配置文件的變更和鏡像協(xié)調(diào)。

注入環(huán)境變量到普通文件中也不是重要的。你可能有時(shí)會(huì)制作一個(gè) sed 命令或?qū)懸恍┢胀ǖ哪_本給它,但這是重復(fù)性的工作。這確實(shí)產(chǎn)生了一個(gè)鏡像,但在 Docker 生態(tài)系統(tǒng)中工作的很好。

Logging

Docker 容器日志記錄到 STDOUT 和 STDERR 更容易故障排解,監(jiān)控和融入一個(gè)中央日志系統(tǒng)。日志可以通過 docker logs 命令和 Docker 日志 API 調(diào)用來(lái)直接訪問。這也有許多工具可以自動(dòng)拉取 docker 日志和運(yùn)送它們?nèi)绻罩居涗涍M(jìn) STDOUT 和 STDERR。

不幸地是,默認(rèn),許多應(yīng)用日志記錄一個(gè)或多個(gè)文件到文件系統(tǒng)上。雖然這通常可以圍繞工作,計(jì)算出每個(gè)應(yīng)用的日志配置的細(xì)微差別是乏味的。

使用 Dockerize

dockerize 是一個(gè)小型的 Golang 應(yīng)用,可以通過以下簡(jiǎn)化 dockerization 過程:

在啟動(dòng)時(shí)使用模板生成配置文件和容器環(huán)境變量

tail 任意的日志文件到 STDOUT 和 STDERR

啟動(dòng)一個(gè)進(jìn)程,運(yùn)行在容器里面

一個(gè)示例

為了證明它怎樣工作,我們將詳細(xì)講述使用 dockerize 來(lái) dockerizing 一個(gè)一般的 nginx 的過程。

FROM ubuntu:14.04

# Install Nginx.
RUN echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu trusty main" > /etc/apt/sources.list.d/nginx-stable-trusty.list
RUN echo "deb-src http://ppa.launchpad.net/nginx/stable/ubuntu trusty main" >> /etc/apt/sources.list.d/nginx-stable-trusty.list
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
RUN apt-get update
RUN apt-get install -y nginx

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80

CMD nginx

下一步,我們將安裝 dockerize 和通過它運(yùn)行 nginx

FROM ubuntu:14.04

# Install Nginx.
RUN echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu trusty main" > /etc/apt/sources.list.d/nginx-stable-trusty.list
RUN echo "deb-src http://ppa.launchpad.net/nginx/stable/ubuntu trusty main" >> /etc/apt/sources.list.d/nginx-stable-trusty.list
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
RUN apt-get update
RUN apt-get install -y wget nginx

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

RUN wget https://github.com/jwilder/dockerize/releases/download/v0.0.1/dockerize-linux-amd64-v0.0.1.tar.gz
RUN tar -C /usr/local/bin -xvzf dockerize-linux-amd64-v0.0.1.tar.gz

ADD dockerize /usr/local/bin/dockerize

EXPOSE 80

CMD dockerize nginx

默認(rèn) Nginx 在 /var/log/nginx 目錄下記錄兩個(gè)不同的文件。如果你交互式的運(yùn)行這個(gè)容器,這將有 nginx 的 access and error 日志流到控制臺(tái),或者是你運(yùn)行 docker logs nginx,因此你可以看到發(fā)生了什么。

我們可以通過傳遞 -stdout -stderr 命令行選項(xiàng)來(lái)解決它。如果你有幾個(gè)文件需要 tail ,這里可以傳遞多次。

CMD dockerize -stdout /var/log/nginx/access.log -stderr /var/log/nginx/error.log nginx

現(xiàn)在當(dāng)你運(yùn)行容器,nginx 日志通過 docker logs nginx 是可用的。

為了證明模板,我們可以使用環(huán)境變量配置讓這個(gè)變成一個(gè)更通用的代理服務(wù)器。我們將定義環(huán)境變量 PROXY_URL 作為一個(gè)站點(diǎn)的代理 URL。

PROXY_URL="http://jasonwilder.com"

當(dāng)這個(gè)容器使用這個(gè)環(huán)境變量啟動(dòng),dockerize 將使用它來(lái)生成一個(gè) nginx 的location 路徑。

這是模板:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
      access_log off;
      proxy_pass {{ .Env.PROXY_URL }};
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

這時(shí)我們最后的 Dockerfile 將看起來(lái)這樣:

FROM ubuntu:14.04

# Install Nginx.
RUN echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu trusty main" > /etc/apt/sources.list.d/nginx-stable-trusty.list
RUN echo "deb-src http://ppa.launchpad.net/nginx/stable/ubuntu trusty main" >> /etc/apt/sources.list.d/nginx-stable-trusty.list
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
RUN apt-get update
RUN apt-get install -y wget nginx

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

RUN wget https://github.com/jwilder/dockerize/releases/download/v0.0.1/dockerize-linux-amd64-v0.0.1.tar.gz
RUN tar -C /usr/local/bin -xvzf dockerize-linux-amd64-v0.0.1.tar.gz

ADD default.tmpl /etc/nginx/sites-available/default.tmpl

EXPOSE 80

CMD dockerize -template /etc/nginx/sites-available/default.tmpl:/etc/nginx/sites-available/default -stdout /var/log/nginx/access.log -stderr /var/log/nginx/error.log nginx

-template : 選項(xiàng)指明 template 在 /etc/nginx/sites-available/default.tmpl 應(yīng)該被生成并寫入 /etc/nginx/sites-available/default。多個(gè)模板也可以被指定。

使用下面命令運(yùn)行容器:

$ docker run -p 80:80 -e PROXY_URL="http://jasonwilder.com" --name nginx -d nginx

然后你可以通過 http://localhost 訪問,它將代理到這個(gè)站點(diǎn)。

這是一個(gè)簡(jiǎn)化的例子,但是使用嵌入的 split 函數(shù)和 range 聲明使它可以很容易的被擴(kuò)展來(lái)處理多個(gè)代理值和其他選項(xiàng)。這里有一些其他的可用模板函數(shù)示例。

總結(jié)

雖然這個(gè)例子有點(diǎn)簡(jiǎn)單,許多應(yīng)用需要一些 shims 來(lái)使得在 Docker 中運(yùn)行的更好。dockerize 是一個(gè)通用的工具來(lái)幫助你處理這個(gè)過程。

你可以在 jwilder/dockerize 找到代碼。

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

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

相關(guān)文章

  • 容器化開發(fā)環(huán)境 - 如何斷點(diǎn)調(diào)試容器中應(yīng)用

    摘要:上一篇容器化開發(fā)環(huán)境已經(jīng)簡(jiǎn)單的介紹了如何容器化開發(fā)環(huán)境。學(xué)會(huì)斷點(diǎn)調(diào)試容器中的應(yīng)用,再也不用為我那烏黑亮麗的頭發(fā)著急啦原文鏈接 上一篇容器化開發(fā)環(huán)境已經(jīng)簡(jiǎn)單的介紹了如何容器化開發(fā)環(huán)境。在開發(fā)過程中,很多時(shí)候都需要通過斷點(diǎn)的方式來(lái)調(diào)試程序或定位BUG,那么如何斷點(diǎn)調(diào)試運(yùn)行在容器中的應(yīng)用呢??? 容器就像一個(gè)虛擬機(jī),就像一個(gè)遠(yuǎn)程的服務(wù)器,要斷點(diǎn)調(diào)試容器中的應(yīng)用,就像要斷點(diǎn)調(diào)試虛擬機(jī)和遠(yuǎn)程的服...

    wean 評(píng)論0 收藏0
  • 容器化開發(fā)環(huán)境 - 應(yīng)用和數(shù)據(jù)庫(kù)隔離

    摘要:上一篇容器化開發(fā)環(huán)境數(shù)據(jù)庫(kù)連接和遷移分享了關(guān)于如何給容器中的應(yīng)用創(chuàng)建數(shù)據(jù)庫(kù)連接,接下來(lái)將分享一下如何將數(shù)據(jù)庫(kù)從應(yīng)用容器中分離出來(lái)。 上一篇容器化開發(fā)環(huán)境 - 數(shù)據(jù)庫(kù)連接和遷移分享了關(guān)于如何給容器中的應(yīng)用創(chuàng)建數(shù)據(jù)庫(kù)連接,接下來(lái)將分享一下如何將數(shù)據(jù)庫(kù)從應(yīng)用容器中分離出來(lái)。 為什么要進(jìn)行分離?當(dāng)應(yīng)用和數(shù)據(jù)庫(kù)在同一個(gè)容器中運(yùn)行時(shí),也就意味著,應(yīng)用和數(shù)據(jù)庫(kù)的生命周期捆綁在了一起,應(yīng)用和數(shù)據(jù)庫(kù)的運(yùn)...

    cppowboy 評(píng)論0 收藏0
  • 容器化開發(fā)環(huán)境 - Dockerize

    摘要:為了不讓別人痛苦,更不想讓自己痛苦,請(qǐng)容器化開發(fā)環(huán)境吧,讓我們享受一鍵部署開發(fā)環(huán)境的痛快吧。接下的例子依賴的環(huán)境和,請(qǐng)移步自行安裝。 有沒有過項(xiàng)目之間各種Java版本開發(fā)環(huán)境切換的場(chǎng)景;有沒有過github上clone回來(lái)的代碼庫(kù),由于各種開發(fā)環(huán)境依賴無(wú)法運(yùn)行的問題;有沒有過進(jìn)入一個(gè)新項(xiàng)目時(shí)各種配開發(fā)環(huán)境到深夜的經(jīng)歷...Come On!為什么會(huì)這樣,一切都是開發(fā)環(huán)境問題。為了不讓別人...

    cnsworder 評(píng)論0 收藏0
  • 容器化開發(fā)環(huán)境 - 數(shù)據(jù)庫(kù)連接和遷移

    摘要:在容器化開發(fā)環(huán)境中分享了如何容器化本地的開發(fā)環(huán)境。對(duì)于一個(gè)應(yīng)用,數(shù)據(jù)庫(kù)似乎是必不可少的東西。下面會(huì)通過例子來(lái)介紹一下如何一個(gè)容器中的數(shù)據(jù)庫(kù)。例子將會(huì)使用的技術(shù)棧在目錄下新建文件,用于控制數(shù)據(jù)庫(kù)的啟動(dòng)。 在 容器化開發(fā)環(huán)境 中分享了如何容器化本地的開發(fā)環(huán)境。對(duì)于一個(gè)Web應(yīng)用,數(shù)據(jù)庫(kù)似乎是必不可少的東西。下面會(huì)通過例子來(lái)介紹一下如何Setup一個(gè)容器中的數(shù)據(jù)庫(kù)。例子將會(huì)使用的技術(shù)棧: ...

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

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

0條評(píng)論

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