給 PHP開發者的 부두 노동자文件(四)
來建個應用(신청)吧
說了一堆有的沒的(지버지버)來搭個有 Nginx網頁伺服器和與其通訊的 MySQL資料庫的應用(신청)吧!這不會是複雜到超出想像的應用,但是是個絕佳的機會來學習:
遊戲計畫
在做之前,先讓我們規劃一下該怎麼玩,首先我們需要安裝 Docker然後我們得決定(정답 찾기)這個應用要怎麼拆解成不同的容器.這是個簡單的應用:有一個 Nginx網頁伺服器、一個 PHP-FPM應用伺服器、與一個 MySQL資料庫伺服器,因此我們的這個應用需要三個 부두 노동자容器,分別從三個 부두 노동자映像實例化而來.我們也需要決定是否要自建 부두 노동자映像,還是從 부두 센터抓既有的來用就好.
我們也得決定用哪個基礎映像(기본 그림)來作為共用的映像,在此所有的 부두 노동자映像都將擴展(연장)自該基礎映像.如果我們的 부두 노동자容器都擴展自同一個基礎映像,那麼可以節省磁碟空間並簡化 부두 노동자映像的相依(의존성)數量.在本教學中我們將以 Ubuntu 14.04 作為我們的基礎映像.
在建構或下載需要的 부두 노동자映像後,我們將會進行實例化並使用 Docker Compose 運行我們的應用的 부두 노동자容器.如果一切按照計畫,我們將會運行(위)起一個可依需求(주문형)運用的 PHP開發環境,而這僅僅只須 들이치다指令與幾秒的時間.
最後我們會討論如何聚合容器輸出的紀錄檔(로그)記住,容器是免洗的(소모 가능)而且我們絕不可把資料存在容器內,相反地,我們將把紀錄檔重導(리디렉션)到各自容器內的標準輸出(표준 출력)與標準錯誤(표준 오차)檔案描述子(설명자)如此一來 Docker Compose即可收集並管理容器內的紀錄資料.
安裝 부두 노동자
부두 노동자需要 Linux並且它支援許多的 Linux發行版:Ubuntu、Debian、CentOS、CRUX、Fedora、Gentoo、RedHat、與 서양挑一個吧!(고르세요)你的本地的 Linux作業系統就是 부두 노동자母機(진행자)實例化以及運行 부두 노동자容器在其內.
許多人使用 Mac OS X或是 창문這不表示你完蛋了(운이 나쁘다)因為有個叫做 Boot2Docker 的東西,這工具可以建立一個微型的 Linux虛擬機,並且這個虛擬機將會被做為 부두 노동자母機,而非你的本地的作業系統.別擔心,這個虛擬機真的超小而且開機只要約 5秒.
裝好 Boot2Docker後,可以雙擊 Boot2Docker應用圖示,或者在終端機(터미널)執行這些 들이치다指令:
boot2docker init
boot2docker up
eval "$(boot2docker shellinit)"
這三行指令會建立虛擬機(假使尚未有建立好了的虛擬機的話),啟動虛擬機,並輸出必要的環境變數(환경 변수)如此你的本地作業系統就可以與 부두 노동자母機相互通訊.如果你像我一樣不喜歡打字的話,你可以建立 들이치다替身(가명)加入下面幾行到你的 ~/.bash 소개檔案內:
alias dockup="boot2docker init && boot2docker up && eval \"\$(boot2docker shellinit)\""
boot2docker up
eval "$(boot2docker shellinit)"
這會建立一個叫做 dockup
(선착장 일꾼 일어나기)的縮寫)的 들이치다替身,現在只要打簡單的 도쿠프在新的終端機就可以建立、啟動、初始化你的 부두 노동자母虛擬機.Nginx Docker映像
首先我們來關注 Nginx網頁伺服器,雖然可以確定在 부두 센터一定找得到自 Ubuntu 14.04基礎映像擴展而來的而且合用的映像,但我們會利用這次機會來學習建構自己的 부두 노동자映像.建立目錄 images/nginx/新增 Dockerfile與 시작하자.야유到那個目錄內,此時你的專案目錄看起來應該是這樣:
images/
nginx/
Dockerfile
start.sh
用你常用的編輯器打開 Dockerfile並加入這些內容:FROM phusion/baseimage
MAINTAINER YOUR NAME <YOUR EMAIL>
CMD ["/sbin/my_init"]
RUN apt-get update && apt-get install -y python-software-properties
RUN add-apt-repository ppa:nginx/stable
RUN apt-get update && apt-get install -y nginx
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
RUN mkdir -p /etc/service/nginx
ADD start.sh /etc/service/nginx/run
RUN chmod +x /etc/service/nginx/run
EXPOSE 80
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
利用定義在 Docker 文件 內的指令寫入 Dockerfile內以建構一個新的 부두 노동자映像.讓我們一行一行的看它們的作用分別是什麼.행 1以
FROM
開頭,用於標示父 부두 노동자映像的名稱,由該父映像擴展出我們的新映像.我們拿 phusion/baseimage 來擴展,因為它提供簡易的 부두 노동자容器操作工具. 두 번째 행以
MAINTAINER
開頭,用於標示你自己的名稱與電郵信箱.如果你把這個 부두 노동자映像分享到 부두 센터其他開發者就能夠知道是誰做出這個映像以及有問題要問誰. 제3행用於初始化 phusion/baseimage基礎映像內建的家管(집사)程序.
4-6행用於從 Nginx社群 PPA(개인 패키지 파일)安裝最新的穩定版的 Nginx這個 PPA提供最新的穩定的 Nginx讓我們可以迅速地裝起來而不用從源碼編起.
그림7-9用於更新 Nginx組態檔案,讓 Nginx不要以常駐服務(daemonized)模式運作.這幾行也把 Nginx的存取與錯誤紀錄連結(기호 링크)到容器的標準輸出與標準錯描述子,如此 부두 노동자就可以整合(합계)管理我們的應用的紀錄資料.我們從不保存(견지)任何資料在容器自身內.
10-12 행用於拷貝 시작하자.야유檔案進容器,phusion/baseimage基礎映像會呼叫這個檔案來啟動 Nginx伺服器程序.
13행用於告訴 부두 노동자把所有實例化(인스턴스화)自這個映像的容器的 80埠開放(노출)我們需要開放 80埠好讓連入(입국)的하이퍼텍스트 전송 프로토콜要求(요청)能被 Nginx接收並做適當處理.
열 다섯 번째 행用於執行 phusion/baseimage基礎映像提供的家管程序.
#!/usr/bin/env bash
service nginx start
這裡面的 들이치다指令用於啟動 Nginx網頁伺服器程序.現在我們已經準備好建構我們的 부두 노동자映像了,移動到專案目錄 그림/nginx/內並執行這個 들이치다指令:docker build -t tutorial/nginx .
根據先前的 Dockerfile的內容,부두 노동자開始建構你的 Nginx Docker映像,並且你會在終端機看到一些輸出內容.你也會看到 부두 노동자會從 부두 센터抓下來任何有相依性(의존성)的父映像(상위 이미지)完成後,你可以執行 docker 이미지指令,會輸出現有的 부두 노동자映像清單,你應該會看到 자습서/nginx在清單內.
恭喜啦!你搞定了你的第一個 부두 노동자映像.但請記得,這還只是個 부두 노동자映像,還得利用它去實例化出 부두 노동자容器,但在做實例化前,讓我們先把 PHP-FPM和 MySQL的 부두 노동자映像都搞定.
PHP-FPM Docker映像
接下來我們來看看 PHP-FPM我們將不會自行建構這個 부두 노동자映像,相反地,我已經在 부두 센터分享了一個 nmcteam/php56的映像,執行下面的 들이치다指令來把這個 PHP-FPM Docker映像從 부두 센터抓回來.
docker pull nmcteam/php56
MySQL Docker映像
最後咱們來關注 MySQL我在 부두 센터找到了擴展自 Ubuntu 14.04基礎映像的 sameersbn/mysql ,執行下面的 들이치다指令來把這個 MySQL Docker映像從 부두 센터抓回來.
docker pull sameersbn/mysql
(待續…)
Reference
이 문제에 관하여(給 PHP開發者的 부두 노동자文件(四)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/leon0824/gei-php-kai-fa-zhe-de-docker-wen-jian-si--2i2g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)