Dockerfile构建镜像

本文详细介绍了Docker镜像的概念、加载原理及其分层结构,并通过HTTPD和NGINX实例展示了如何编写及优化Dockerfile,包括多阶段构建、减少RUN指令和避免输出浪费。
摘要由CSDN通过智能技术生成

目录

前言

一、Docker镜像

1、镜像是什么

2、如何得到镜像

3、Docker镜像加载原理

二、Docker 镜像结构的分层

三、Dockerfile 镜像案例

1、 HTTPD

1.1  建立工作目录编写 Dockerfile 文件

1.2  准备执行脚本(前台启动方法一)

1.3  准备网页页面

1.4  生成镜像

1.5  运行容器并测试

1.6  报错解决

2、NGINX

2.1  编写 Dockerfile

2.2  运行测试

3、SSH

四、Dockerfile 优化

1、不需要输出的指令丢入 /dev/null

2、减少 RUN 构建

3、多阶段构建

总结


前言

docker 镜像的制作,可以基于容器创建镜像,也可基于 dockerfile 构建镜像。但需要注意的是,我们并不是真正"创建"新镜像,而是基于一个已有的基础镜像,如 centos 或 ubuntu 等,构建新镜像而已。


一、Docker镜像

1、镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。将所有的应用和环境直接打包为docker镜像,就可以直接运行。

2、如何得到镜像

从远程仓库下载

通过拷贝获取

自己制作一个镜像DockerFile

3、Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含 bootloader和 Kernel, bootloader主要是引导加 kernel,Linux刚启动时会加bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸bootfs。
rootfs(root file system)在 bootfs之上。包含的就是典型 Linux系统中的 /dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如 Ubuntu,Centos等等。

二、Docker 镜像结构的分层

> docker 镜像分层(基于 AUFS 构建):
Docker 镜像位于 bootfs 之上
每一层镜像的下一层成为父镜像
第一层镜像成为 base image(操作系统环境镜像)
容器层(可读可写),在最顶层(writeout-able)
容器层以下都是 readonly

 

三、Dockerfile 镜像案例

1、 HTTPD

1.1  建立工作目录编写 Dockerfile 文件

[root@c7-1 ~]#mkdir /opt/apache
[root@c7-1 ~]#cd /opt/apache/
[root@c7-1 /opt/apache]#vim Dockerfile

#基于 centos:7 的基础镜像
FROM centos:7
#定义镜像的用户信息
MAINTAINER this is apache image <test>
#镜像操作指令安装 apache 软件
RUN yum -y update;yum -y install httpd
#开启 80 端口
EXPOSE 80 
#复制网站首页文件
ADD index.html /var/www/index.html

##前台启动方法一(需准备执行脚本)
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]

##前台启动方法二(无需其他脚本)
ENTRYPOINT ["/usr/sbin/apachectl"]
#前台启动 apache,CMD 为 ENTRYPOINT 传递参数
CMD ["-D","FOREGROUND"]

1.2  准备执行脚本(前台启动方法一)

[root@c7-1 /opt/apache]#vim run.sh

#!/bin/bash
rm -rf /run/httpd/*
#清理httpd的缓存
/usr/sbin/apachectl -D FOREGROUND
#指定为前台运行

1.3  准备网页页面

[root@c7-1 /opt/apache]#echo "this is test web" > index.html
[root@c7-1 /opt/apache]#ls
Dockerfile  index.html  run.sh

1.4  生成镜像

先确保自己这有 centos:7 镜像,这里使用第一种 dockerfile

#速度和网络、主机性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值