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

docker
docker搭建
docker build

本文档完成目标内容如下

使用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. [dockerrepo] 

  3. name=DockerRepository 

  4. baseurl=https://yum.dockerproject.org/repo/main/centos/7 

  5. enabled=1 

  6. gpgcheck=1 

  7. 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. Server: 

  11. Version: 1.10.3 

  12. API version: 1.22 

  13. Package version: docker-common-1.10.3-59.el7.centos.x86_64 

  14. Go version: go1.6.3 

  15. Git commit: 3999ccb-unsupported 

  16. Built: Thu Dec 15 17:24:43 2016 

  17. 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 以上。

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

  2. sudo systemctl daemon-reload  

  3. 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测试成功 

浏览器测试确认下

Centos7安装Docker 基于Dockerfile 搭建httpd运行环境的更多相关文章

  1. 基于maven搭建hibernate运行环境

    准备案例需要的数据库表和测试数据 建表语句: create table DEPARTMENT ( DEPT_ID integer not null, DEPT_NAME ) not null, DEP ...

  2. 【PHP】linux搭建PHP运行环境

    之前在windows下写了hello world,终归是不够用啊,因为开发环境是Linux,怎么办呢~~~学习学习再学习 写在前面的话:我从百度文库的一个文章里摘出来的,原文章名称<Linux下 ...

  3. Docker学习笔记(1):CentOS7安装Docker

    Docker是一个基于Go语言实现的开源应用容器引擎,通过对应用组件的封装.分发.部署.运行等生命周期的管理,使程序及其运行环境能够做到"一次封装,到处运行". Docker架构 ...

  4. 使用Docker搭建Tomcat运行环境

    1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS 内核: # uname -r 2 安装Do ...

  5. centos install docker setup centos7 安装docker

    centos7 安装docker 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2: 添 ...

  6. centos7 安装docker(手动和脚本安装)换源 卸载

    centos7 安装docker(手动和脚本安装)换源 卸载 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker ...

  7. 【MIT6.828】centos7下使用Qemu搭建xv6运行环境

    title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...

  8. 【Docker】 CentOS7 安装 Docker 及其使用方法 ( 一 )

    系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...

  9. centos7安装 docker

    centos7安装 docker 切换到 root用户,执行: [root@localhost frinder]# yum install docker已加载插件:fastestmirror, lan ...

随机推荐

  1. UE4创建空白关卡并添加碰撞体

    让我们接着上次继续学习UE4引擎,今天我们学习下怎样创建空白的关卡以及添加碰撞物体. 一. 创建空白关卡 1) 点击文件 -> 新建关卡(或者按快捷键Ctrl+N). 2) 你可以选择Defau ...

  2. [HMLY]12.iOS中的Protocol

    最近工作中遇到一个比较迷惑的事情,在我利用runtime获取类的属性的时候,由于类实现了一个自定义协议,导致遍历出来的属性中包含了NSObject协议中的property.查来查去,只是知道和prot ...

  3. oracle——用户

    新增用户 用system用户登录 CREATE USER TEST1 IDENTIFIED BY TEST1; CREATE USER:创建用户命令,后跟用户名: IDENTIFIED BY:后跟密码 ...

  4. elasticsearch最佳实践

    创建索引 无mapping 创建索引名称为index的索引 curl -XPUT http://localhost:9200/book 有mapping 如果需要定义每个类型的结构映射,创建type名 ...

  5. 【01背包】HDU 1171 Big Event in HDU

    Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...

  6. 校门外的树 OpenJudge 1.6.06

    06:校门外的树 总时间限制:  1000ms 内存限制:  65536kB 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0 ...

  7. gridcontrol如何根据值来动态设置某一行的颜色

    应用场景:当我们使用devexpress gridcontrol wpf控件时.可要会要根据这一行要显示的值来设置相应的颜色 可以通过下面方法来实现 一.先定义一个style <local:Co ...

  8. jmeter压力测试的简单实例+badboy脚本录制(一个简单的网页用户登录测试的结果)

    JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...

  9. c#注释

    c#的注释分为:这里不能不说一下什么是注释. 注释本身不会执行,只是说明性文字,只供程序员阅读. 注释又分为:单行注释,多行注释,文档注释. 单行注释://开始 多行注释:/*开始, */结束. 文档 ...

  10. Tiny6410之NAND FLASH驱动

    一.NAND FLASH的特点 S3C6410的NAND FLASH控制器有如下特点 1.自导入模式:复位后,引导代码被送入到8KB的STEPPINGSTONE中,引导代码移动完毕,引导代码将在STE ...