Linux中國

如何在 Fedora 22 上面配置 Apache 的 Docker 容器

安裝並初體驗Docker

要求

運行Docker,你至少需要滿足這些:

  • 你需要一個64位的內核,版本3.10或者更高
  • Iptables 1.4 - Docker會用它來做網路配置,如網路地址轉換(NAT)
  • Git 1.7 - Docker會使用Git來與倉庫交流,如Docker Hub
  • ps - 在大多數環境中這個工具都存在,在procps包里有提供
  • root - 儘管一般用戶可以通過TCP或者其他方式來運行Docker,但是為了簡化,我們會假定你就是root

使用dnf安裝docker

以下的命令會安裝Docker

dnf update && dnf install docker

注意:在Fedora 22里,你仍然可以使用Yum命令,但是它被DNF取代了,而且在純凈安裝時不可用了。

檢查安裝

我們將要使用的第一個命令是docker info,這會輸出很多信息給你:

docker info

也可以試著用docker version

docker version

以守護進程方式啟動Dcoker

你應該啟動一個docker實例,然後她會處理我們的請求。

docker -d

現在我們設置 docker 隨系統啟動,以便我們不需要每次重啟都需要運行上述命令。

chkconfig docker on

讓我們用Busybox來列印hello world:

dockr run -t busybox /bin/echo "hello world"

這個命令里,我們告訴Docker在Busybox鏡像的一個實例/容器里執行 /bin/echo "hello world"。Busybox是一個小型的POSIX環境,將許多小工具都結合到了一個單獨的可執行程序里。

如果Docker不能在你的系統里找到本地的Busybox鏡像,她就會自動從Docker Hub里拉取鏡像,正如你可以看下如下的快照:

Hello world with Busybox

Hello world with Busybox

再次嘗試相同的命令,這次由於Docker已經有了本地的Busybox鏡像,你將會看到的全部就是echo的輸出:

docker run -t busybox /bin/echo "hello world"

也可以嘗試以下的命令進入到容器環境里去:

docker run -it busybox /bin/sh

使用exit命令可以離開容器並停止它

互動式地Docker化Apache

拉取/下載 Fedora 鏡像:

docker pull fedora:22

啟動一個容器在後台運行:

docker run -d -t fedora:22 /bin/bash

列出正在運行地容器及其名字標識,如下

docker ps

listing with docker ps and attaching with docker attach

使用docker ps列出,並使用docker attach進入一個容器里

angry_noble是docker分配給我們容器的名字,所以我們來連接上去:

docker attach angry_noble

注意:每次你啟動一個容器,就會被給與一個新的名字,如果你的容器需要一個固定的名字,你應該在 docker run 命令里使用 -name 參數。

安裝Apache

下面的命令會更新DNF的資料庫,下載安裝Apache(httpd包)並清理dnf緩存使鏡像盡量小

dnf -y update && dnf -y install httpd && dnf -y clean all

配置Apache

我們需要修改httpd.conf的唯一地方就是ServerName,這會使Apache停止抱怨

sed -i.orig 's/#ServerName/ServerName/' /etc/httpd/conf/httpd.conf

設定環境

為了使Apache運行為獨立模式,你必須以環境變數的格式提供一些信息,並且你也需要創建這些變數里的目錄,所以我們將會用一個小的shell腳本干這個工作,當然也會啟動Apache

vi /etc/httpd/run_apache_foreground
#!/bin/bash

#設置環境變數
APACHE_LOG_DI=R"/var/log/httpd"
APACHE_LOCK_DIR="/var/lock/httpd"
APACHE_RUN_USER="apache"
APACHE_RUN_GROUP="apache"
APACHE_PID_FILE="/var/run/httpd/httpd.pid"
APACHE_RUN_DIR="/var/run/httpd"

#如果需要的話,創建目錄
if ! [ -d /var/run/httpd ]; then mkdir /var/run/httpd;fi
if ! [ -d /var/log/httpd ]; then mkdir /var/log/httpd;fi
if ! [ -d /var/lock/httpd ]; then mkdir /var/lock/httpd;fi

#運行 Apache
httpd -D FOREGROUND

另外地,你可以粘貼這個片段代碼到容器shell里並運行:

dnf -y install git && git clone https://github.com/gaiada/run-apache-foreground.git && cd run-apach* && ./install && dnf erase git

上面的內嵌腳本會安裝Git,克隆這個倉庫,到文件里去運行腳本,並詢問你是否卸載Git。

保存你的容器狀態

你的容器現在準備好運行Apache,是時候保存容器當前的狀態為一個鏡像,以備你需要的時候使用。

為了離開容器環境,你必須順序按下 Ctrl+qCtrl+p,如果你僅僅在shell執行exit,你同時也會停止容器,失去目前為止你做過的所有工作。

回到Docker主機,使用 docker commit 及容器名和你想要的倉庫名字/標籤:

docker commit angry_noble gaiada/apache

現在,你保存了容器的狀態到一個鏡像里,可以使用 docker stop 停止容器了:

docker stop angry_noble

運行並測試你的鏡像

最後,從你的新鏡像啟動一個容器,並且重定向80埠到該容器:

docker run -p 80:80 -d -t gaiada/apache /etc/httpd/run_apache_foreground

到目前,你正在你的容器里運行Apache,打開你的瀏覽器訪問該服務,在http://localhost,你將會看到如下Apache默認的頁面

Apache default page running from Docker container

在容器里運行的Apache默認頁面

使用Dockerfile Docker化Apache

現在,我們將要去創建一個新的Apache鏡像,這次所有步驟會寫在一個Dockerfile文件里,文件將會被用於生成該鏡像。

首先,新建一個目錄,在裡面放Dockerfile文件,並進入該目錄:

mkdir apachedf; cd apachedf

然後創建一個名為Dockerfile的文件,添加以下內容:

FROM fedora:22

MAINTAINER Carlos Alberto
LABEL version="0.1"

RUN dnf -y update && dnf -y install httpd && dnf -y clean all

RUN [ -d /var/log/httpd ] || mkdir /var/log/httpd
RUN [ -d /var/run/httpd ] || mkdir /var/run/httpd
RUN [ -d /var/lock/httpd ] || mkdir /var/lock/httpd

RUN sed -i.orig 's/#ServerName/ServerName/' /etc/httpd/conf/httpd.conf

ENV APACHE_RUN_USER apache
ENV APACHE_RUN_GROUP apache
ENV APACHE_LOG_DIR /var/log/httpd
ENV APACHE_LOCK_DIR /var/lock/httpd
ENV APACHE_RUN_DIR /var/run/httpd
ENV APACHE_PID_FILE /var/run/httpd/httpd.pid

EXPOSE 80

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

我們一起來看看Dockerfile裡面有什麼:

  • FROM - 這告訴docker,我們將要使用Fedora 22作為基礎鏡像
  • MAINTAINERLABLE - 這些命令對鏡像沒有直接作用,屬於標記信息
  • RUN - 自動完成我們之前互動式做的工作,安裝Apache,新建目錄並編輯httpd.conf
  • ENV - 設置環境變數,現在我們再不需要runapacheforeground腳本
  • EXPOSE - 暴露80埠給外網
  • CMD - 設置默認的命令啟動httpd服務,這樣我們就不需要每次起一個新的容器都重複這個工作

建立該鏡像

現在,我們將要建立這個鏡像,並為其添加tag gaiada/apachedf

docker build -t gaiada/apachedf:0.1 .

docker build complete

docker完成創建

使用 docker images 列出本地鏡像,查看是否存在你新建的鏡像:

docker images

然後運行新的鏡像:

docker run -t -p 80:80 gaiada/apachedf

這就是Dockerfile的工作,使用這項功能會使得事情更加容易,快速並且可重複生成。

發布你的鏡像

直到現在,你僅僅是從Docker Hub拉取了鏡像,但是你也可以推送你的鏡像,以後需要也可以再次拉取他們。實際上,其他人也可以下載你的鏡像,在他們的系統中使用它而不需要改變任何東西。現在我們將要學習如何使我們的鏡像對世界上的其他人可用。

創建帳號

為了能夠在Docker Hub上推送你的鏡像,你需要創建一個帳號。訪問 https://hub.docker.com/account/signup/,填寫下面的表格:

Docker Hub signup page

Docker Hub 註冊頁面

登錄

輸入下面的命令,接著輸入你註冊時提供的用戶名,密碼和郵箱

docker login

第一次登錄過後,你的帳號信息會被記錄在 ~/.dockercfg

推送

推送鏡像,使用 docker push [registry/]yourlogin/repositoryname[:tag]

docker push docker.io/gaiada/apachedf

你可能會看見像這樣的輸出,在你的控制台上:

Docker push Apache image complete

Docker推送Apache鏡像完成

結論

現在,你知道如何Docker化Apache,試一試包含其他一些組件,Perl,PHP,proxy,HTTPS,或者任何你需要的東西。我希望你們這些傢伙喜歡她,並推送你們自己的鏡像到Docker Hub。

via: http://linoxide.com/linux-how-to/configure-apache-containers-docker-fedora-22/

作者:Carlos Alberto 譯者:wi-cuckoo 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國