亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

ddongjian0000 / 847人閱讀

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

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

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


  

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

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

在 dockerization 時兩個常見的問題是:

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

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

這篇文章介紹一個新工具:dockerize ,它簡化了這兩個常見的問題。

問題 配置

許多應(yīng)用使用配置文件來控制它們怎么工作,不同的運(yùn)行環(huán)境有不同的值。比如,對于一個開發(fā)環(huán)境的數(shù)據(jù)庫連接細(xì)節(jié)將與生產(chǎn)環(huán)境的不同。類似的,API keys 和其他的敏感細(xì)節(jié)在不同環(huán)境將不同。

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

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

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

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

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

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

Logging

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

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

使用 Dockerize

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

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

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

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

一個示例

為了證明它怎樣工作,我們將詳細(xì)講述使用 dockerize 來 dockerizing 一個一般的 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 目錄下記錄兩個不同的文件。如果你交互式的運(yùn)行這個容器,這將有 nginx 的 access and error 日志流到控制臺,或者是你運(yùn)行 docker logs nginx,因此你可以看到發(fā)生了什么。

我們可以通過傳遞 -stdout -stderr 命令行選項來解決它。如果你有幾個文件需要 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)境變量配置讓這個變成一個更通用的代理服務(wù)器。我們將定義環(huán)境變量 PROXY_URL 作為一個站點的代理 URL。

PROXY_URL="http://jasonwilder.com"

當(dāng)這個容器使用這個環(huán)境變量啟動,dockerize 將使用它來生成一個 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;
    }
}

這時我們最后的 Dockerfile 將看起來這樣:

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 : 選項指明 template 在 /etc/nginx/sites-available/default.tmpl 應(yīng)該被生成并寫入 /etc/nginx/sites-available/default。多個模板也可以被指定。

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

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

然后你可以通過 http://localhost 訪問,它將代理到這個站點。

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

總結(jié)

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

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

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/26356.html

相關(guān)文章

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

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

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

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

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

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

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

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

    Jensen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<