環境準備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