dockerfile制作apache镜像的方法

一、Docker镜像

1.1 docker镜像

应用的是发布的标准格式
支撑一个docker容器的运行

1.2 docker镜像的创建方法

  • 基于已有的镜像创建
  • 基于本地模板创建
  • 基于Dockerfile创建

Docker镜像是分层的结构

①Dockerfile中的每个指令都会创建一个新的镜像层
②镜像层将被缓存和复用
③当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效
④某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效
⑤镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件

二、基于已有的镜像创建实例

将容器里面运行的程序及运行环境打包生成新的镜像

docker commit  选项  容器id  想要创建的镜像名:标签
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行

实例

[root@server1 ~]# docker ps -a #现有容器
CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS       PORTS        NAMES
86cf506635da    centos:7      "/bin/bash"     6 seconds ago    Up 5 seconds              nervous_shockley
[root@server1 ~]# docker commit -m "image" -a "zf" -p 86cf506635da docker:new  #创建docker:new镜像
sha256:e3056b40acd772abc9a39c6c4f3cb42ba119eb9392b32fb275414f00e82d55b2
[root@server1 ~]# docker images #查看生成的镜像
REPOSITORY     TAG         IMAGE ID      CREATED       SIZE
docker       new         e3056b40acd7    9 seconds ago    267MB
centos       7          4f280dc8c807    21 hours ago    267MB
#最好停止容器再创建镜像

三、基于本地模板创建

通过导入操作系统模板文件生成新的镜像
使用wget命令导入为本地镜像

[root@server1 ~]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new #导入模板命名镜像名为daoke:new
[root@server1 ~]# docker images #查看生成的镜像
REPOSITORY     TAG         IMAGE ID      CREATED       SIZE
daoke        new         61b2d8af0457    38 seconds ago   215MB
docker       new         e3056b40acd7    10 minutes ago   267MB
centos       7          4f280dc8c807    22 hours ago    267MB

四、基于Dockerfile创建

Dockerfile是由一组指令组成的文件。

文件结构:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

Dockerfile每行支持一 条指令,每条指令可携带多个参数,支持使用以“#“号开头的注释。

Dockerfile操作指令:

指令 解释
FROM 镜像 指定新镜像所基于的镜像,第一条指令必须为FROM指令 ,
MAINTAINER名字 说明新镜像的维护人信息
RUN 命令 在所基于的镜像上执行命令,并提交到新的镜像中
CMD [ "要运行的程序”,”参数1,"参数2 "] 指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行
EXPOSE 端口号 暴露镜像端口号,方便运行镜像和提供服务时,映射给外部节点使用
ENV 环境变量变量值 设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录 目标文件/目录 从宿主机复制文件到容器,如果是压缩包并进行解压,源文件要与Dockerfile同一目录
COPY源文件/目录目标文件/目录 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
VOLUME [“目录"] 在容器中创建一个挂载点
USER用户名/UID 指定运行容器时的用户
WORKDIR路径 为后续的RUN、CMD、ENTRYPOINT指定 工作目录,相当于cd
ONBUILD命令 指定所生成的镜像作为一个基础镜像时所要运行的命令
HEALTHCHECK 健康检查

实例

[root@server1 ~]# mkdir apache #建立镜像目录
[root@server1 ~]# cd apache/

#创建Dockerfile
[root@server1 apache]# vi Dockerfile
FROM centos:7 #基于的基础镜像,在centos内核运行
MAINTAINER this is zzf web #维护者信息
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80  #开启80端口,给外部映射用
ADD index.html /var/www/html/index.html #将宿主机网站文件加入到镜像内
ADD run.sh /run.sh #将执行脚本复制到镜像内
RUN chmod 755 /run.sh #提权
CMD ["/run.sh"] #启动容器时执行脚本,开启Apache服务

#当前目录里创建index.html和run.sh
[root@server1 apache]# vi run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND #启动容器时启动服务
[root@server1 apache]# vi index.html
hello

#创建镜像,必须在当前有Dockerfile的目录下,注意空格加. 代表当前目录
[root@server1 apache]# docker build -t http:centos .
#查看创建的镜像
[root@server1 apache]# docker images
REPOSITORY     TAG         IMAGE ID      CREATED       SIZE
http        centos       5db0e8103d54    5 minutes ago    539MB
daoke        new         61b2d8af0457    33 minutes ago   215MB
docker       new         e3056b40acd7    43 minutes ago   267MB
centos       7          4f280dc8c807    22 hours ago    267MB

#运行镜像为容器
-p 为映射端口,将容器端口80映射为宿主主机端口1212(必须是未被占用的)
-P 不指定节点端口,随机指定端口,默认从32168端口开始分配
[root@server1 apache]# docker run -d -p 1212:80 http:centos  

#查看容器状态
[root@server1 apache]# docker ps -a
CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS       PORTS         NAMES
a8fa8ae6be42    http:centos     "/run.sh"      3 minutes ago    Up 3 minutes    0.0.0.0:1212->80/tcp  xenodochial_franklin
86cf506635da    centos:7      "/bin/bash"     48 minutes ago   Up 48 minutes               nervous_shockley

关闭防火墙,测试Apache服务

到此这篇关于dockerfile制作apache镜像的方法的文章就介绍到这了,更多相关dockerfile制作镜像内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker镜像压缩与优化操作

    现如今docker如此受人追捧,主要是因为它的轻量化.可以快速部署以及资源的利用.但是一个docker images质量的好与坏,主要取决于Dockerfile编写的质量.同样功能的镜像,但是不同的Dockerfile build出来的镜像大小是不一样的,这是因为docker是由一层一层的只读层累积起来的,而这每一层就是Dockerfile中的每一条指令,所以Docker image的大小完全取决于Dockerfile中的每条指令生成的中间层的大小, 下面我们来举一个小例子来详细说明docker

  • supervisor下的Dockerfile的多服务镜像封装操作

    编写Dockerfile文件 配置yum源 cd /tmp/docker vim Dockerfile FROM rhel7 EXPOSE 80 22 # 向外暴露80和22的端口 COPY dvd.repo /etc/yum.repos.d/dvd.repo && yum install -y httpd openssh-server openssh-clients supervisor && yum clean all && ssh-keygen -q

  • docker镜像访问本地elasticsearch端口操作

    使用docker stack部署的镜像服务,进入镜像之后,理论上,应该可以通过下面的指令访问本地的elasticsearch服务 curl 本机ip/9200 但是却提示拒绝访问. 后来本机使用上述指令查看之后发现,本机也是拒绝访问. 之后发现,9200端口的elasticsearch服务,是通过打洞的方式连接的远程服务器上的elasticsearch服务,只能通过下面指令访问端口 curl 127.0.0.1:9200 如果想要通过本机ip访问9200端口,则需要在打洞指令的后面加上 -g.

  • Docker如何制作自己镜像并上传dockerhub

    1.首先注册自己的dockerhub账号,注册地址:https://hub.docker.com 2.在linux服务器登录自己的账号:docker login --username=qiaoyeye 3.在https://hub.docker.com/上先找到自己想要的镜像 4.拉取镜像到本地:docker pull centos 5.本地准备jdk和tomcat软件,解压后放入服务器 6.新建Dockerfile文件,注意区分大小写 #----------------------------

  • Docker镜像分析工具dive原理解析

    今天推荐一个这样的开源工具,用于探索 Docker 镜像,各层内容以及发现缩小 Docker/OCI 镜像大小的方法.这个工具就是:dive. 工具地址:https://github.com/wagoodman/dive,Star 数:22k+. 这个工具可以清晰得看到镜像每一层都包含哪些内容,方便你分析是否有必要,如下图所示. 特性 该工具的主要特性包括: 按层显示 Docker 镜像内容: 指出每一层的变化: 评估 "镜像的效率": 快速的构建/分析周期: 和 CI 集成: 支持多

  • dockerfile制作apache镜像的方法

    一.Docker镜像 1.1 docker镜像 应用的是发布的标准格式 支撑一个docker容器的运行 1.2 docker镜像的创建方法 基于已有的镜像创建 基于本地模板创建 基于Dockerfile创建 Docker镜像是分层的结构 ①Dockerfile中的每个指令都会创建一个新的镜像层 ②镜像层将被缓存和复用 ③当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效 ④某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效 ⑤镜像层是

  • 通过Dockerfile构建Docker镜像的方法步骤

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添加"\"的命令换行方式,以及行首"#"进行注释的格式. 使用Dockerfile构建Docker镜像时注意事项: (1).尽量选取满足需求但较小的基础系统镜像; (2).清理编译生成文件.安装包的缓存等临时文件; (3).安装各个软件时候要指定准确的版本号,并避免引入不

  • 使用dockerfile构建nginx镜像的方法示例

    Dockerfile介绍 Docker通过读取Dockerfile里面的内容可以自动build image,Dockerfile是一个包含了build过程中需要执行的所有命令的文本文件.也可以理解为Dockfile是一种被Docker程序解释的脚本,由一条一条的指令组成,每条指令对应Linux系统下面的一条命令,由Docker程序将这些Dockerfile指令翻译成真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefil

  • 使用Dockerfile脚本定制镜像的方法

    目录 前言 一.Dockerfile介绍 二.FROM指定基础镜像 三.RUN执行命令 四.构建镜像 五.镜像构建上下文(Context) 六.迁移镜像 前言 镜像的定制实际上就是定制每⼀层所添加的配置.⽂件等信息. 但是命令毕竟只是命令,一般用 docker commit 每次定制都得去重复执⾏这个命令,⽽且还不够直观,如果我们可以把每⼀层修改.安装.构建.操作的命令都写⼊⼀个脚本,⽤这个脚本来构建.定制镜像,那么这些问题就迎刃而解了,而这个脚本就是我们今天要说的 Dockerfile . 一

  • docker通过Dockerfile构建mysql镜像的方法

    构建Dockerfile ,路径 /docker/mysql FROM hub.c.163.com/library/mysql:5.7 #作者信息 MAINTAINER hu "***@qq.com" #修改编码方式 RUN echo "character-set-server=utf8" >> /etc/mysql/mysql.conf.d/mysqld.cnf RUN service mysql restart EXPOSE 3306 到Docker

  • Docker中Dockerfile制作镜像的方法步骤

    目录 1.基于容器制作 2. 基于Dockerfile制作镜像 2.1 Dockerfile命令 2.2 简单示例 docker 镜像的制作,可以基于容器创建镜像,也可基于 dockerfile 构建镜像.但需要注意的是,我们并不是真正"创建"新镜像,而是基于一个已有的基础镜像,如 centos 或 ubuntu 等,构建新镜像而已. 1.基于容器制作 联合文件系统(UnionFS)挂载提供了容器的文件系统,任何对容器内文件系统的改动都会被写入到新的文件层中,这个文件层归创建它的容器所

  • Docker Dockerfile 定制镜像的方法

    使用 Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题.镜像构建透明性的问题.体积的问题就都会解决.这个脚本就是 Dockerfile. Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. 此处以定制 nginx 镜像为例,使用 Dockerfile

  • docker官方镜像下载及使用Dockerfile创建镜像的方法

    1.登陆docker hut官方网站:https://hub.docker.com/ 2.search centos 3.docker pull centos:7.2.1511 4.创建Dockerfile文件: [root@vmhost centos7.2]# cat Dockerfile [plain] view plain copy FROM centos:7.2.1511 MAINTAINER wanghongwei(wanghongwei@4paradigm.com) RUN yum

  • linux/OSX中“DD”命令制作ISO镜像操作系统安装U盘的方法

    Linux或者OS X系统中,使用"dd"命令可以直接在终端命令行模式下,制作ISO镜像的系统安装盘. 一.linux系统以centOS7为例. sudo dd if=镜像路径  of=USB设备路径 bs=1m 镜像路径: ISO格式的镜像文件存放位置 USB路径: /dev/sdb  这里要注意的是: (1)USB设备不能已经挂载到其它目录,否则会提示出错.如果系统自动挂载,要先umount /dev/sdb . (2)/dev/sdb 的路径,不能带分区,例如 /dev/sdb1

  • 利用Dockerfile部署SpringBoot项目的方法

    1.创建一个SpringBooot项目并且打成jar包 2.在Linux中创建一个文件夹,来做docker测试 [root@izwz90lvzs7171wgdhul8az ~]# mkdir /root/docker_test 3.将jar包上传到Linux中 创建存放jar包的文件夹 [root@izwz90lvzs7171wgdhul8az docker_test]# mkdir /root/docker_test/jar 然后利用XShell上传jar包到上面的文件夹中 4.编写Docke

随机推荐