dockerfile制作apache镜像的方法

 更新时间:2020年11月26日 15:16:29   作者:zzzf98  
这篇文章主要介绍了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制作镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker暴露2375端口导致服务器被攻击问题及解决方法

    Docker暴露2375端口导致服务器被攻击问题及解决方法

    这篇文章主要介绍了Docker暴露2375端口导致服务器被攻击问题及解决方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • docker安装RocketMQ的实现(附填坑经验connect to failed)

    docker安装RocketMQ的实现(附填坑经验connect to failed)

    本文主要介绍了docker安装RocketMQ(附填坑经验connect to failed)
    2024-06-06
  • docker批量加载镜像的方法实现

    docker批量加载镜像的方法实现

    通常我们批量加载docker镜像文件的时候,通常会写一个shell文件,本文就来介绍一下史上最简单批量加载docker镜像的方法,感兴趣的可以了解一下
    2023-12-12
  • docker部署mysql8并设置可远程连接

    docker部署mysql8并设置可远程连接

    本文主要介绍了docker部署mysql8并设置可远程连接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 对已有的docker容器增加新的端口映射问题(两种方式)

    对已有的docker容器增加新的端口映射问题(两种方式)

    这篇文章主要介绍了对已有的docker容器增加新的端口映射,在运行容器时指定映射端口运行后,如果想要添加新的端口映射,使用两种方式都可以,需要的朋友可以参考下
    2022-01-01
  • Docker使用阿里加速器安装centos教程

    Docker使用阿里加速器安装centos教程

    这篇文章主要介绍了Docker使用阿里加速器安装centos教程,需要的朋友可以参考下
    2017-04-04
  • Docker容器的概念及Docker容器是干什么的

    Docker容器的概念及Docker容器是干什么的

    Docker容器是一种轻量级、可移植的虚拟化技术,用于打包、运输和运行应用程序及其所有依赖项,Docker容器使得开发人员能够更轻松地构建、交付和运行应用程序,同时提高了资源利用率和部署的一致性,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • Dockerfile文件详细介绍

    Dockerfile文件详细介绍

    Dockerfile 是一个文本文件,里面包含组装新镜像时用到的基础镜像和各种指令。使用dockerfile 文件来定义镜像,然后运行镜像,启动容器。本文详细介绍了Dockerfile文件,感兴趣的小伙伴可以参考一下
    2023-04-04
  • docker容器启动后如何修改或添加端口

    docker容器启动后如何修改或添加端口

    这篇文章主要介绍了docker容器启动后如何修改或添加端口问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 局域网内部署 Docker Registry(推荐)

    局域网内部署 Docker Registry(推荐)

    本文将从创建单机的 Docker Registry 开始,逐步完成局域网内可用的 Docker Registry 的创建,并重点解释如何使用 IP 地址访问 Registry 的方法
    2017-05-05

最新评论