Centos7安裝Docker 基於Dockerfile 搭建httpd運行環境

Centos7安裝Docker 基於Dockerfile 搭建httpd運行環境

本文檔完成目標內容以下

使用Docker搭建http服務器一臺。
要求搭建完成後映射docker80端口。httpd頁面顯示本身的名字和IP地址
html

CentOS 7 下Docker的安裝

  1. Docker簡介
    Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和建立Docker容器。Docker 容器經過 Docker 鏡像來建立。容器與鏡像的關係相似於面向對象編程中的對象與類。官網地址:http://www.docker.com/linux

  2. docker所需環境準備web

系統要求CentOS 7.X 以上版本,內核至少3.10,64-bitdocker

  1. uname -r //查看內核 
  2. 3.10.0-327.el7.x86_64 
  3. yum update //升級本地yum包 

建立docker的yum庫apache

  1. # cd /etc/yum.repos.d/ && vi docker.repo 
  2.  
  3. [dockerrepo] 
  4. name=DockerRepository 
  5. baseurl=https://yum.dockerproject.org/repo/main/centos/7 
  6. enabled=1 
  7. gpgcheck=1 
  8. gpgkey=https://yum.dockerproject.org/gpg 

安裝docker編程

  1. yum install docker-io 

啓動docker服務並設置開機自動啓動centos

  1. systemctl start docker.service 
  2. systemctl enable docker.service 
  3. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. 

驗證docker是否安裝成功瀏覽器

  1. docker info 
  2. Containers: 0 
  3. Running: 0 
  4. Paused: 0 
  5. Stopped: 0 
  6. Images: 0 
  7. Server Version: 1.10.3 
  8. Storage Driver: devicemapper 
  9. Pool Name: docker-253:0-34868263-pool 
  10. Pool Blocksize: 65.54 kB 
  11. Base Device Size: 10.74 GB 
  12. Backing Filesystem: xfs 
  13. Data file: /dev/loop0 
  14. Metadata file: /dev/loop1 
  15. Data Space Used: 11.8 MB 
  16. Data Space Total: 107.4 GB 
  17. Data Space Available: 26.96 GB 
  18. Metadata Space Used: 581.6 kB 
  19. Metadata Space Total: 2.147 GB 
  20. Metadata Space Available: 2.147 GB 
  21. Udev Sync Supported: true 
  22. Deferred Removal Enabled: false 
  23. Deferred Deletion Enabled: false 
  24. Deferred Deleted Device Count: 0 
  25. Data loop file: /var/lib/docker/devicemapper/devicemapper/data 
  26. WARNING: Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning. 
  27. Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata 
  28. Library Version: 1.02.135-RHEL7 (2016-09-28) 
  29. Execution Driver: native-0.2 
  30. Logging Driver: journald 
  31. Plugins:  
  32. Volume: local 
  33. Network: host bridge null 
  34. Kernel Version: 3.10.0-327.el7.x86_64 
  35. Operating System: CentOS Linux 7 (Core) 
  36. OSType: linux 
  37. Architecture: x86_64 
  38. Number of Docker Hooks: 2 
  39. CPUs: 2 
  40. Total Memory: 3.86 GiB 
  41. Name: localhost.localdomain 
  42. ID: WZJQ:VTFD:LVRA:SSU3:MFNC:75V3:JEZT:KTVR:HF2G:WXR5:34AR:N2N5 
  43. WARNING: bridge-nf-call-iptables is disabled 
  44. WARNING: bridge-nf-call-ip6tables is disabled 
  45. Registries: docker.io (secure) 

查看安裝後的docker版本bash

  1. docker version 
  2. Client: 
  3. Version: 1.10.3 
  4. API version: 1.22 
  5. Package version: docker-common-1.10.3-59.el7.centos.x86_64 
  6. Go version: go1.6.3 
  7. Git commit: 3999ccb-unsupported 
  8. Built: Thu Dec 15 17:24:43 2016 
  9. OS/Arch: linux/amd64 
  10.  
  11. Server: 
  12. Version: 1.10.3 
  13. API version: 1.22 
  14. Package version: docker-common-1.10.3-59.el7.centos.x86_64 
  15. Go version: go1.6.3 
  16. Git commit: 3999ccb-unsupported 
  17. Built: Thu Dec 15 17:24:43 2016 
  18. OS/Arch: linux/amd64 

3.編寫Dockerfile

Dockfile是一種被Docker程序解釋的腳本,Dockerfile由一條一條的指令組成,每條指令對應Linux下面的一條命令。Docker程序將這些Dockerfile指令翻譯真正的Linux命令。Dockerfile有本身書寫格式和支持的命令,Docker程序解決這些命令間的依賴關係,相似於Makefile。Docker程序將讀取Dockerfile,根據指令生成定製的image。相比image這種黑盒子,Dockerfile這種顯而易見的腳本更容易被使用者接受,它明確的代表image是怎麼產生的。有了Dockerfile,當咱們須要定製本身額外的需求時,只需在Dockerfile上添加或者修改指令,從新生成image便可,省去了敲命令的麻煩。服務器

3.1 Docker加速器

之因此提到這個是由於,在build鏡像的過程當中須要從服務器pull images,可是不幸的的Docker官網已經被牆,因此須要藉助國內第三方,我使用的阿里雲的。
安裝或升級Docker

您能夠經過阿里雲的鏡像倉庫下載: mirrors.aliyun.com/help/docker-engine
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
配置Docker加速器

您可使用以下的腳本將mirror的配置添加到docker daemon的啓動參數中。
系統要求 CentOS 7 以上,Docker 1.9 以上。

sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=https://g9d5s6dr.mirror.aliyuncs.com|g"  
sudo systemctl daemon-reload  
sudo service docker restart 

Dockerfile文件內容以下:

  1. FROM centos:centos6 
  2. MAINTAINER liuqiang <402588603@qq.com> 
  3. RUN yum -y update; yum clean all 
  4. RUN yum -y install httpd && yum clean all 
  5. RUN touch /var/www/html/index.html 
  6. RUN echo "I have finished, pls give me five!!!! --liuqiang " >> 
  7. /var/www/html/index.html 
  8. EXPOSE 80 
  9. #Simple startup script to avoid some issues observed with container restart 
  10. ADD run-httpd.sh /run-httpd.sh //注意腳本目錄 
  11. RUN chmod -v +x /run-httpd.sh //賦予腳本執行權限 
  12. CMD ["/run-httpd.sh"]  

run-httpd.sh腳本內容以下

  1. cat >> run-httpd.sh << EOF 
  2. #!/bin/bash 
  3. # Make sure we're not confused by old, incompletely-shutdown httpd 
  4. # context after restarting the container. httpd won't start correctly 
  5. # if it thinks it is already running. 
  6. rm -rf /run/httpd/* 
  7. exec /usr/sbin/apachectl -D FOREGROUND 
  8. EOF 

注意:Dockerfile需藉助腳原本重啓httpd服務,而且最好放置於同一目錄

  1. docker build -t liuqiang/httpd:centos6 . 
  2. flag provided but not defined: -it 
  3. See '/usr/bin/docker-current --help'. 
  4. docker build -t liuqiang/httpd . 
  5. Sending build context to Docker daemon 5.12 kB 
  6. Step 1 : FROM centos:centos6 
  7. ---> 8315978ceaaa 
  8. Step 2 : MAINTAINER liuqiang <402588603@qq.com> 
  9. ---> Using cache 
  10. ---> 658aeb6d114a 
  11. Step 3 : RUN yum -y update; yum clean all 
  12. ---> Using cache 
  13. ---> 8f1c933b2c3c 
  14. Step 4 : RUN yum -y install httpd && yum clean all 
  15. ---> Using cache 
  16. ---> 98ee768720c7 
  17. Step 5 : RUN touch /var/www/html/index.html 
  18. ---> Using cache 
  19. ---> b69a69656752 
  20. Step 6 : RUN echo "I have finished, pls give me five!!!! --liuqiang" >> /var/www/html/index.html 
  21. ---> Using cache 
  22. ---> b4c9fd4843fb 
  23. Step 7 : EXPOSE 80 
  24. ---> Using cache 
  25. ---> e4b5491564c2 
  26. Step 8 : ADD run-httpd.sh /run-httpd.sh 
  27. ---> Using cache 
  28. ---> ed7ec84907d1 
  29. Step 9 : RUN chmod -v +x /run-httpd.sh 
  30. ---> Using cache 
  31. ---> 081c6a101c16 
  32. Step 10 : CMD /run-httpd.sh 
  33. ---> Using cache 
  34. ---> 15eaa6d6d407 
  35. Successfully built 15eaa6d6d407 

此時經過Dockerfile建立的鏡像已經建立成功,並沒有報錯
接下來運行容器

docker run -it -p 80:80 liuqiang/httpd:centos6
docker: Error response from daemon: failed to create endpoint clever_keller on network bridge: Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use.

啓動

  1. docker run -d -p 80:80 liuqiang/httpd:centos6  
  2. 0582508431eb5713c1401843e68cb36b51de3bdd23dfa468cbe7496d71091e25 
  3. curl http://localhost  
  4. I have finished, pls give me five!!!! --liuqiang //curl測試成功 

瀏覽器測試確認下
enter description here

相關文章
相關標籤/搜索