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. 关于javascript变量作用域的研究。

    开始 一个变量的作用域(scope)是程序源代码中定义这个变量的区域.全局变量具有全局作用域,在javascript中的任何地方都是有定义的.然而在函数内申明的变量只在函数体内有定义.他们是局部变量, ...

  2. Python print报ascii编码异常的靠谱解决办法

    之前遇到此异常UnicodeEncodeError: 'ascii' codec can't encode characters...,都是用这种方式解决:sys.setdefaultencoding ...

  3. 【Linux学习三】Linux系统目录架构

    主要包括: ●bin:保存的是可执行文件,二进制,就是命令 ●boot:引导目录,操作系统的启动加载,包含版本内核文件.greb引导程序- ●dev:硬件设备文件,如硬盘.网卡.声卡.终端.显卡,每一 ...

  4. Windows 8 卡在正在检查更新

    原文地址:https://answers.microsoft.com/en-us/windows/forum/windows_8-update/windows-update-not-updating- ...

  5. node.JS中配置http-server

    http-server 是一个简单的HTTP服务器, 基于 nodeJs,在nodejs命令行中配置http服务器. 项目结构:

  6. Maven配置插件跳过测试代码的编译和运行

    Maven配置插件跳过测试代码的编译和运行: <!-- 编译插件 --> <plugin> <groupId>org.apache.maven.plugins< ...

  7. JS的console使用

    一,console输出的几种写法: console.error('错误信息') console.info('提示信息') console.warn('警告信息') console.log('普通信息' ...

  8. 2016 ACM/ICPC Asia Regional Qingdao Online 1001 I Count Two Three

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  9. iOS 通知的使用

    学习通知,我们要掌握:通知的发布 , 通知的监听 , 通知的移除 在通知里面,有一个非常重要的东西: 通知中心(NSNotificationCenter); 每一个应用程序,都有一个通知中心,专门用来 ...

  10. (Nginx学习一)安装和启动及对应文件夹介绍

    nginx 安装和启动及对应文件夹介绍 1 安装 官网下载nginx文件  http://nginx.org/en/download.html 解压即可 2 文件夹介绍 在解压后nginx压缩包后发现 ...