如何在 Fedora 22 上面配置 Apache 的 Docker 容器
在這篇文章中,我們將會學習關於Docker的一些知識,如何使用Docker部署Apache httpd服務,並且共享到Docker Hub上面去。首先,我們學習怎樣拉取和使用Docker Hub裡面的映象,然後在一個Fedora 22的映象上互動式地安裝Apache,之後我們將會學習如何用一個Dockerfile檔案來以一種更快,更優雅的方式製作一個映象。最後,我們將我們建立的映象釋出到Docker Hub上,這樣以後任何人都可以下載並使用它。
安裝並初體驗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。
相關文章
- 如何在Docker容器中使用ArthasDocker
- CentOS上面搭建DockerCentOSDocker
- Fedora中的容器技術
- 為Docker容器配置固定IPDocker
- 如何在Docker容器中執行GUI程式DockerGUI
- Docker容器配置Nginx例項分享DockerNginx
- Docker配置容器位置和小技巧Docker
- nginx docker容器配置https(ssl)NginxDockerHTTP
- 詳解 Docker 容器網路配置Docker
- docker 容器安裝配置 headscaleDocker
- Docker(十七)-修改Docker容器啟動配置引數Docker
- 如何在 Docker 容器之間設定網路Docker
- 如何在一個Docker容器裡安裝DiscourseDocker
- Docker容器裡部署Apache+PHP+MariaDB+phpMyAdminDockerApachePHP
- Fedora 22 上配置 Proftpd 伺服器圖解教程FTP伺服器圖解
- Docker配置本地映象與容器的儲存位置Docker
- 在 CentOS 7.x / Fedora 21 上面體驗 PHP 7.0CentOSPHP
- 如何在 Docker 容器中架設一個完整的 WordPress 站點Docker
- Fedora 中的容器技術:systemd-nspawn
- 雲伺服器:如何在docker容器中部署應用伺服器Docker
- 聊聊如何在docker環境中配置hostsDocker
- Docker容器的搭建Docker
- Docker的容器管理Docker
- 如何在Docker容器啟動時自動執行指令碼Docker指令碼
- Docker容器Docker
- 安裝 Fedora 22 後要做的事情
- 如何在 Fedora 工作站上截圖
- 如何在Ubuntu-16.04上配置Apache Kafka叢集!UbuntuApacheKafka
- 容器、Docker與Kubernetes——Kubernetes的配置入門Docker
- docker學習筆記-為容器配置重啟策略Docker筆記
- Java應用在docker環境配置容器健康檢查JavaDocker
- 如何配置極狐GitLab Docker 容器映象倉庫GitlabDocker
- 硬碟安裝Fedora 22 Workstation Live的教程硬碟
- 如何在 Docker 容器中執行支援 OData 的 JBoss 資料虛擬化 GADocker
- docker 容器互通Docker
- Docker 容器操作Docker
- 操作Docker容器Docker
- Docker容器操作Docker