• Centos7安装Docker 基于Dockerfile 搭建httpd运行环境


    Centos7安装Docker 基于Dockerfile 搭建httpd运行环境

    本文档完成目标内容如下

    使用Docker搭建http服务器一台。
    要求搭建完成后映射docker80端口。httpd页面显示自己的名字和IP地址

    CentOS 7 下Docker的安装

    1. Docker简介
      Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。官网地址:http://www.docker.com/

    2. docker所需环境准备

    系统要求CentOS 7.X 以上版本,内核至少3.10,64-bit

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

    创建docker的yum库

    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服务并设置开机自动启动

    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版本

    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

  • 相关阅读:
    “持咒”到底是个什么东西?再论语言和思维关系
    传说中的噪声
    电源噪声(EMI)滤波器的基本原理与应用方法
    Like a rock,like the weather man【转】
    allegro笔记
    Taxicab geometry和Euclidean geometry
    hql和sql的区别
    SpringMVC与Struts2的区别
    ExtJS 学习专题如何应用ExtJS
    编程式事务和声明式事务
  • 原文地址:https://www.cnblogs.com/luckyall/p/6270225.html
Copyright © 2020-2023  润新知