下面我们来制作一个Nginx的镜像,通过编译安装方式来完成。

重新制作一个基础镜像

文件内容

# Version: 0.0.1# 指定使用哪个基础镜像
FROM centos:6.6
# 说明该镜像的制作者和联系方式
MAINTAINER Rex.chen rex.chen@aaa.com
#设置标签,不是必须的只是为了说明里面的版本查看起来方便
LABEL Discrition="更换了epel源,并安装了相应库和组件"#备份系统默认的epel源,并设置新的EPEL源
RUN cd /etc/yum.repos.d/
RUN ["mv","/etc/yum.repos.d/CentOS-Base.repo","/etc/yum.repos.d/CentOS-Base.repo.bak"]
COPY ./Centos-6.repo /etc/yum.repos.d/CentOS-Base.repoRUN yum makecache# 安装必要库和组件
RUN yum update -y && yum groupinstall -y 'Development Tools' && yum -y install wget \libmcrypt-devel mhash-devel libxslt-devel \libjpeg libjpeg-devel libpng libpng-devel \freetype freetype-devel libxml2 libxml2-devel \zlib zlib-devel glibc glibc-devel glib2 glib2-devel \bzip2 bzip2-devel ncurses ncurses-devel \curl curl-devel e2fsprogs e2fsprogs-devel \krb5 krb5-devel libidn libidn-devel openssl \openssl-devel openldap-devel#
RUN yum clean all

运行下面的命令制作镜像

我这里使用了-f来指定dockerfile

docker p_w_picpath build -t mycentos6:1.0 -f ./buildProImange .

制作Nginx镜像

基于上面的基础镜像来制作一个Nginx的基础镜像,我们通过编译安装的方式来完成。

看一下制作Nginx镜像的Dockerfile怎么写的:

# Version: 0.0.1# 指定使用哪个基础镜像
FROM mycentos6:1.0
# 说明该镜像的制作者和联系方式
MAINTAINER Rex.chen rex.chen@aaa.com
#设置标签,不是必须的只是为了说明里面的版本查看起来方便
LABEL Nginx="1.10.2"# 建立用户和组
RUN ["groupadd","-r","nginx"]
RUN ["useradd","-r","-g","nginx","-s","/sbin/nologin","nginx"]# 复制安装程序到指定目录,我这里使用COPY命令只是因为我要自行解压缩
ENV SOFT_DEST /usr/local/src
ADD nginx/nginx-1.10.2.tar.gz $SOFT_DEST
ADD nginx/openssl-1.1.0c.tar.gz $SOFT_DEST
ADD nginx/zlib-1.2.11.tar.gz $SOFT_DEST
ADD nginx/pcre-8.39.tar.gz $SOFT_DEST# 设置工作目录,这步可以不要
WORKDIR $SOFT_DEST# 创建必要目录
RUN ["mkdir","/var/tmp/nginx","-p"]
RUN ["mkdir","/var/run/nginx","-p"]
RUN ["mkdir","/var/log/nginx","-p"]
RUN ["mkdir","/var/lock/nginx","-p"]# 执行编译安装,这里一定要把进入目录和./configure以及后面的make和make install写在
#一起,否则会提示找不到,因为每一个命令都是一层镜像
RUN cd ./nginx-1.10.2 && ./configure \--prefix=/usr/nginx/ \--sbin-path=/usr/sbin/nginx \--conf-path=/etc/nginx/nginx.conf \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--pid-path=/var/run/nginx/nginx.pid \--lock-path=/var/lock/nginx/nginx.lock \--user=nginx --group=nginx \--with-file-aio --with-threads \--with-http_ssl_module \--with-http_flv_module \--with-http_stub_status_module \--with-http_gzip_static_module \--with-http_v2_module \--with-http_realip_module \--http-client-body-temp-path=/var/tmp/nginx/client/ \--http-proxy-temp-path=/var/tmp/nginx/proxy/ \--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi/ \--http-scgi-temp-path=/var/tmp/nginx/scgi/ \--with-openssl=/usr/local/src/openssl-1.1.0c \--with-zlib=/usr/local/src/zlib-1.2.11 \--with-pcre=/usr/local/src/pcre-8.39 && make && make installEXPOSE 80

制作Nginx镜像

docker p_w_picpath build -t nginx:1.0 -f ./nginxDockerfile .

上面是制作Nginx的基础镜像,下面我们就基于这个镜像来制作服务容器,因为Nginx镜像是可以重复使用的,个性化的东西要单独来做,Nginx在容器中通常是作为WEB服务器来运行的而不是反向代理。

# Version: 0.0.1# 指定使用哪个基础镜像
FROM nginx:1.0
# 说明该镜像的制作者和联系方式
MAINTAINER Rex.chen rex.chen@aaa.com
#设置标签,不是必须的只是为了说明里面的版本查看起来方便
LABEL Nginx="1.10.2"# 在容器中建立挂载点,主要用于日志文件和网页文件
VOLUME ["/var/nginx"]# 设置工作目录,不是必须的
WORKDIR /var/nginx# 拷贝nginx配置文件到容器中
ADD nginx/nginx.conf /etc/nginx/nginx.conf# 指定在容器启动时执行的命令
CMD ["/usr/sbin/nginx"]

然后你需要在宿主机上的/var/nginx中建立2个目录一个是log一个是www,www目录存放页面文件

另外Nginx需要非守护进程方式启动,你只需在配置文件中加入daemon off;即可,如下图:

下面是Nginx的日志和网页文件的配置

制作镜像

docker p_w_picpath build -t webservices:1.0 -f ./nginxSrv .

运行容器

docker run --name webSrv01 -d -p 80 -v /var/nginx/:/var/nginx/ webservices:1.0

测试连接

从本地看一下是否有日志文件呢:

我们这里用了一个新的参数就是-v,这个参数的作用就是把本地目录挂载到容器中,使用方法如下:

-v /PATH本地路径:/PATH容器路径:<ro|rw>
#后面的<ro|rw>是设置读写权限,默认是可读写

这个参数后面只能挂载一个目录到容器,通过docker inspect查看,默认是读写权限

如果以后要修改网页内容,那么你只需修改/var/nginx/www目录下修改就好。

转载于:https://blog.51cto.com/littledevil/1916292

(五)Docker镜像管理2之nginx镜像制作相关推荐

  1. 【Docker】五 Docker Hub管理镜像

    Docker Hub管理镜像 1 Docker Hub管理镜像 1.1 注册与登录 1.2 创建仓库 1.3 推送镜像 2 使用Docker Registry管理镜像 2.1 原理图 2.2 搭建Do ...

  2. Docker 镜像管理,显示本地镜像,查找镜像,删除镜像,镜像拉取,查看镜像的具体信息,镜像的导入和导出,将配置后的镜像commit成自己的镜像,docker history,等

    一. 显示本地镜像: [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest c8252 ...

  3. Docker——使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境

    Docker--使用docker工具管理软件/组件的运行,镜像.容器.数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境 一.docker的安装和卸载 1.卸载 2.安装 3. 导 ...

  4. 借助Docker hub自己手动制作镜像(以Nginx镜像为例)

    借助Docker hub自己手动制作镜像(以Nginx镜像为例) 前言 一.Docker hub是什么? 二.镜像制作步骤 1.进入Docker hub官网,获取源文件 2.制作镜像 3.验证镜像 总 ...

  5. Docker学习之路04:创建定制Nginx镜像

    Docker学习之路04:创建定制Nginx镜像 Docker学习路线传送门: Docker学习之路01:Docker的安装 Docker学习之路02:阿里云镜像加速器 Docker学习之路03:Do ...

  6. Docker学习(4)——如何通过阿里云的镜像加速器快速拉取镜像到本地

    1.为什么要使用阿里云的镜像加速器? 构建容器的镜像全部在下面这个网站里面,但是这个站点在国外,对于我们来说使用很不方便,下载非常慢 国内的阿里云上有自己已经拉取过来的镜像可以供我们直接使用 但是如果 ...

  7. 管理网吧服务器维护,服务器管理之镜像管理-云更新 | 专业网吧维护

    云更新此次版本更新中的最大功能更新即是镜像管理这一功能,真正实现了一包多配.用户可以在镜像中包含母镜像在内的任意位置(配置.还原点)新建配置.让网吧在镜像管理这一块更加方便. 一.镜像管理 此版本的镜 ...

  8. 企业版Docker4——如何通过阿里云的镜像加速器快速拉取镜像到本地

    以下所有的实操都是在rhel7.5上 1.为什么要使用阿里云的镜像加速器? 构建容器的镜像全部在下面这个网站里面,但是这个站点在国外,对于我们来说使用很不方便,下载非常慢 国内的阿里云上有自己已经拉取 ...

  9. docker 管理工具_详解Docker可视化管理工具shipyard--部署教程及功能展示

    概述 谈及docker,避免不了需要熟练的记住好多命令及其用法,对于熟悉shell.技术开发人员而言,还是可以接受的,熟练之后,命令行毕竟是很方便的,便于操作及脚本化.但对于命令行过敏.非技术人员,进 ...

最新文章

  1. Windows下以Local模式调试SparkStreaming的WordCount例子
  2. linux系统遵循以下哪项协议,实务(互联网技术)通信工程师考试习题库
  3. 实现 OutOfMemory​
  4. 使用Spring Data Neo4j进行领域建模
  5. 微型计算机控制技术试卷B,微型计算机控制技术试卷b..doc
  6. vue新版router.addRoute基础用法
  7. play(一) play介绍,helloworld项目
  8. Spring框架----Spring常用IOC注解的分类
  9. 深入理解Java虚拟机:虚拟机类加载机制
  10. 有趣 的java代码_[分享]几段有趣的JAVA代码
  11. MIUI android 的压缩包,【玩机组分享】Android MIUI主题结构及其制作方法
  12. 联想硬盘保护系统密码读取
  13. UDS服务中关于服务器响应行为的实现规则
  14. 支付宝提现要手续费吗?
  15. Nodejs爬虫自动爬取百度图片
  16. 统计100以内能被7整除的自然数c语言,编写程序,计算1到100中既能被3整除又能被7整除的所有数,并计算这些数的个数...
  17. K8S 图形化管理界面 Kuboard
  18. 历史在重演:从KHTML到WebKit,再到Blink
  19. ubuntu 14.04开机出现错误“Error found when loading /root/.profile”解决(root用户登录时才会出现)
  20. 基于FPGA的FFT

热门文章

  1. 如何使用 Python 创建一名可操控的角色玩家
  2. [vue]饿了么的element-ui修改样式后不生效
  3. 干净架构在 Web 服务开发中的实践
  4. VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug
  5. 2016-1-4作业
  6. 如何编译ReactNative示例程序Examples
  7. buffer cache 深度解析
  8. MySQL 超时解决方案mysql报错处理: could not be resolved: getnameinfo() returned error (code: -3)...
  9. 转贴: OpenGL开发库的组成
  10. mongoDB 文档操作_改