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

linux.cn發表於2015-07-19

在這篇文章中,我們將會學習關於Docker的一些知識,如何使用Docker部署Apache httpd服務,並且共享到Docker Hub上面去。首先,我們學習怎樣拉取和使用Docker Hub裡面的映象,然後在一個Fedora 22的映象上互動式地安裝Apache,之後我們將會學習如何用一個Dockerfile檔案來以一種更快,更優雅的方式製作一個映象。最後,我們將我們建立的映象釋出到Docker Hub上,這樣以後任何人都可以下載並使用它。

如何在 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里拉取映象,正如你可以看下如下的快照:

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

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

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

使用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預設的頁面

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

在容器裡執行的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 .

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

docker完成建立

使用 docker images 列出本地映象,檢視是否存在你新建的映象:

docker images

然後執行新的映象:

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

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

釋出你的映象

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

建立帳號

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

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

Docker Hub 註冊頁面

登入

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

docker login

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

推送

推送映象,使用 docker push [registry/]yourlogin/repositoryname[:tag]

docker push docker.io/gaiada/apachedf

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

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

Docker推送Apache映象完成

結論

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

相關文章