dockerfile的镜像原理(dockerfile制作apache镜像的方法)
类别:服务器 浏览量:2212
时间:2021-11-08 16:19:11 dockerfile的镜像原理
dockerfile制作apache镜像的方法目录
- 一、Docker镜像
- 二、基于已有的镜像创建实例
- 三、基于本地模板创建
- 四、基于Dockerfile创建
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制作镜像内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- dockerfile镜像介绍(使用Dockerfile构建docker镜像)
- dockerfile的镜像原理(dockerfile制作apache镜像的方法)
- 如何使用docker启动tomcat(Docker容器上用DockerFile部署多个tomcat服务的步骤)
- dockerfile配置参数(dockerfile中ENTRYPOINT与CMD的结合使用及区别)
- dockerfile 添加yum文件(使用YUM 安装 docker的方法步骤)
- docker怎么增加端口(docker 添加端口及获取dockerfile的方法)
- docker怎么使用supervisor(supervisor下的Dockerfile的多服务镜像封装操作)
- dockerfile启动容器服务(docker文件存放路径, 获取容器启动命令操作)
- dockerfile构建mysql镜像并初始化(docker-compose基于MySQL8部署项目的实现)
- 2022-01-25 00:54:18
- docker 命令上传镜像到镜像仓库(Docker 制作镜像Dockerfile和commit操作)
- dockerfile镜像案例(Dockerfile构建自定义镜像的实现)
- dockerfile自定义镜像图解(Docker images导出和导入操作)
- docker目录映射不起作用(关于dockerfile build过程中报/bin/sh: pip: command not found的解决方法)
- docker和tomcat建立连接(如何基于Dockerfile构建tomcat镜像)
- 查看docker容器进程运行状态命令(docker容器内要启动两个进程时Dockerfile的实现代码)
- 数字藏品市场有多乱 周杰伦丢了 一只猴 ,损失超300万(数字藏品市场有多乱)
- 这里输入关键词(怎么输入关键词搜索)
- 得这个 难治病 的人太多了,300个人赶到杭州商量怎么办(得这个难治病的人太多了)
- 经度,世界时间腕表的灵魂(世界时间腕表的灵魂)
- 阿里最新财报公布 三季度营收增长3 ,将增加150亿美元回购额度 在美股价小涨(阿里最新财报公布)
- 赵薇时胖时瘦 最近变美少女 原因在这里 躺着就变瘦(赵薇时胖时瘦最近变美)
热门推荐
- sql server建表语句带字段说明(SqlServer给表增加多个字段的语法)
- Extjs updateProgress进度条的应用
- sqlserver列数据拆分(SQL Server基础之行数据转换为列数据)
- 宝塔面板7.8.0软件商店打不开(宝塔BT面板专业版付费和免费版有什么区别?)
- 用户 IIS APPPOOLDefaultAppPool 登录失败的解决方法
- js的逻辑关系和思路(js Proxy的原理详解)
- html表单星号怎么标记(使用CSS 给表单必选项添加星号的实现方法)
- mac版本php环境搭建(在Mac OS X中配置Apache+PHP+MySQL运行环境的详细步骤)
- javascript 自带格式化时间(JavaScript内置日期、时间格式化时间实例代码)
- mysql主从同步复制原理(MYSQL数据库GTID实现主从复制实现超级方便)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9