使用docker鏡像搭建svn+Apache環境

環境準備html

虛擬機裝好以後,按照官網步驟檢查虛擬機內核版本,必須在3.10以上版本,故此處安裝redhat_7.2java

# uname -r
3.10.0-327.el7.x86_64

安裝docker:docker

yum install docker-io

有依賴是直接安裝具體的依賴軟件,解決依賴apache

docker安裝成功,啓動docker服務vim

service docker start

並設置爲開機自啓動centos

chkconfig docker on

如今咱們須要製做docker鏡像,能夠經過Dockerfile或者是在現有的鏡像上修改以後commit。bash

此處選擇在現有的鏡像基礎上修改後commit並push到私有鏡像庫,以方便後期使用。svn

如下以Apache+svn(搭建svn環境)爲例說明docker 鏡像的製做build、提交commit、上傳push過程 ui

1、獲取docker基礎鏡像this

從docker公有庫down一個適合本身系統的鏡像(我此處down的是centos)

docker pull centos

運行down下來的docker容器:

docker run -it centos /bin/bash
[root@84292236ae90 /]#

進入docker容器,進行svn環境搭建,此處的 84292236ae90 即爲你對於centos鏡像修改的ID,提交時只須要提交該ID的內容便可。

2、在鏡像中安裝部署svn+Apache

此處使用yum安裝

yum -y install subversion mod_dav_svn httpd

安裝成功後,配置初始化svn、用戶,權限(此處對於svn環境的搭建不作詳細的說明)

配置完成使用exit 退出docker容器

3、重啓Apache

爲了使得docker容器可使用宿主機的端口,此處映射宿主機的端口到docker容器

docker -p 參數把虛擬機的80端口映射到容器的80端口;虛擬機的80端口在 Vagrantfile 中被綁定到主機的8080端口,也就是:主機8080->虛擬機80->容器80

sudo docker run -t -i -p 80:80 -v /vagrant/htdocs:/var/www/html custom/httpd /bin/bash

# 啓動 Apache

apachectl -k start 

[root@bogon svn_apache]# sudo docker run -t -i -p 80:80 -v /vagrant/htdocs:/var/www/html test /bin/bash
[root@84292236ae90 /]# apachectl -k start
Passing arguments to httpd using apachectl is no longer supported.
You can only start/stop/restart httpd using this script.
If you want to pass extra arguments to httpd, edit the
/etc/sysconfig/httpd config file.
[root@84292236ae90 /]# ps -ef|grep httpd
root         18      1  7 18:44 ?        00:00:00 /usr/sbin/httpd -k start
svn          19     18  0 18:44 ?        00:00:00 /usr/sbin/httpd -k start
svn          20     18  0 18:44 ?        00:00:00 /usr/sbin/httpd -k start
svn          21     18  0 18:44 ?        00:00:00 /usr/sbin/httpd -k start
svn          22     18  0 18:44 ?        00:00:00 /usr/sbin/httpd -k start
svn          23     18  0 18:44 ?        00:00:00 /usr/sbin/httpd -k start
root         25      1  0 18:44 ?        00:00:00 grep --color=auto httpd


使用url訪問:

4、提交對鏡像所作的修改

docker commit -m "Added svn+apache" -a "yayad" 84292236ae90 centos-svn

提交至本地的centos-svn鏡像,目前只存在於本機器,爲了便於其餘機器使用,須要提交至公有庫/私有我的庫,根據我的選擇。

此處我提交至我的私有庫:

1.找到本地鏡像的ID:docker images

[root@bogon opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
firstdocker         latest              a3062f931635        2 hours ago         342.6 MB
centos-svn          latest              4dea4adb699d        2 hours ago         396.4 MB
yayad/centos_svn    latest              4dea4adb699d        2 hours ago         396.4 MB
centos              latest              bb3d629a7cbc        10 days ago         196.6 MB

2.docker tag <imageID> <namespace>/<image name>:<version tag eg latest>

docker tag 4dea4adb699d yayad/centos_svn

3.push docker鏡像到官方的我的私有庫

docker push yayad/centos_svn

push時會提示輸入庫的帳號、密碼和郵箱,此處須要提早註冊docker.hub

push 成功後在我的私有庫便可看到push的鏡像

此時就能夠在其餘已經安裝docker環境的機器上執行docker pull centos-svn down該鏡像並直接使用svn環境,無需再安裝配置。

5、讓Apache服務在後臺自動running


但如何在啓動容器的同時自動啓動Apache服務,不用再須要手動啓動,那麼我就只須要在宿主機上監控容器的狀態是否running,如下方式便可實現。

1.經過dockerfile 來build

編輯dockerfile

[root@bogon svn_apache]# cat Dockerfile
FROM yayad/centos_svn
ENTRYPOINT apachectl -k start && /bin/bash

build 新image,設置tag爲df

[root@bogon svn_apache]# docker build -t yayad/centos_svn:df .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM yayad/centos_svn
 ---> 52561e4f9e39
Step 1 : ENTRYPOINT apachectl -k start && /bin/bash
 ---> Running in 30cab1c3a861
 ---> de5ad506e7dc
Removing intermediate container 30cab1c3a861
Successfully built de5ad506e7dc


查看build的image

[root@bogon svn_apache]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
yayad/centos_svn    df                  de5ad506e7dc        11 seconds ago      396.5 MB

啓動容器查看配置結果

[root@bogon svn_apache]# docker run -it yayad/centos_svn:df /bin/bash
Passing arguments to httpd using apachectl is no longer supported.
You can only start/stop/restart httpd using this script.
If you want to pass extra arguments to httpd, edit the
/etc/sysconfig/httpd config file.
Passing arguments to httpd using apachectl is no longer supported.
You can only start/stop/restart httpd using this script.
If you want to pass extra arguments to httpd, edit the
/etc/sysconfig/httpd config file.
httpd (pid 9) already running
[root@1dce83066942 /]#

Apache服務已經啓動起來了


2.修改容器的bashrc

這是投機取巧但不失爲最簡單的一種辦法,見Run a service automatically in a docker container

以bash啓動容器:

#docker run -it -p 80:80 -v /vagrant/htdocs:/var/www/html yayad/centos_svn /bin/bash
[root@87da9f94dc08 /]# vim /etc/bashrc
#add by dy    添加到最後
apachectl -k start

若須要能夠把修改後的image commit以後使用。


想說起一下的問題:刪除本地一些多餘的名稱爲NONE的images,報錯,刪除失敗,使用以下的方式解決了,但具體內在聯繫還不太清楚

docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi
相關文章
相關標籤/搜索