如何在 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
再次嘗試相同的命令,這次由於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
使用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+q 和 Ctrl+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默認頁面
使用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作為基礎鏡像
- MAINTAINER 和 LABLE - 這些命令對鏡像沒有直接作用,屬於標記信息
- RUN - 自動完成我們之前互動式做的工作,安裝Apache,新建目錄並編輯httpd.conf
- ENV - 設置環境變數,現在我們再不需要runapacheforeground腳本
- EXPOSE - 暴露80埠給外網
- CMD - 設置默認的命令啟動httpd服務,這樣我們就不需要每次起一個新的容器都重複這個工作
建立該鏡像
現在,我們將要建立這個鏡像,並為其添加tag gaiada/apachedf
docker build -t gaiada/apachedf:0.1 .
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 註冊頁面
登錄
輸入下面的命令,接著輸入你註冊時提供的用戶名,密碼和郵箱
docker login
第一次登錄過後,你的帳號信息會被記錄在 ~/.dockercfg
推送
推送鏡像,使用 docker push [registry/]yourlogin/repositoryname[:tag]
docker push docker.io/gaiada/apachedf
你可能會看見像這樣的輸出,在你的控制台上:
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
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive