0
点赞
收藏
分享

微信扫一扫

Dockerfile创建镜像

纽二 2022-07-18 阅读 76

1.Docker镜像的创建

创建镜像有三种方法:

  1. 基于已有镜像创建
  2. 基于本地模板创建
  3. 基于Dockerfile创建(重点)

1.1 基于现有镜像创建

(1) 首先启动一个镜像,在容器里做修改

Dockerfile创建镜像_docker

Dockerfile创建镜像_nginx_02

Dockerfile创建镜像_加载_03

1.2基于本地模板创建

通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载,下载地址为:

https://wiki.openvz.org/Download/template/precrated

#下载debian压缩包

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

Dockerfile创建镜像_nginx_04

Dockerfile创建镜像_docker_05

2.基于dockerfile创建

dockerfile是由一组指令组成的文件

dockerfile每行支持一条指令,每条指令可携带多个参数,一条指令可以用&&方式,去写多条指令。

dockerfile支持以“#”为开头的注释

2.1 dockerfile结构(四部分)

  1. 基础镜像信息(Linux发行版:centos ubantu suse debian alpine redhat)
  2. 维护者信息(docker search可查看)
  3. 镜像操作指令(tar yum make)
  4. 容器启动时执行指令(cmd[“/root/run.sh”] 、entrypoint都是系统启动时,第一个加载的程序/脚本/命令)

2.2 构建镜像命令

PS:可以在构建镜像时指定资源限制

在编写Dockerfile时,有严格的格式需要遵循:

  • 第一行必须使用FROM指令指明所基于的镜像名称;
  • 之后使用MAINTAINER指令说明维护该镜像的用户信息;
  • 然后是镜像操作相关指令,如RUN指令。每运行一条指令,都会给基础镜像添加新的一 层。
  • 最后使用CMD指令指定启动容器时要运行的命令操作。

示例:

docker build -t nginx:test .  

 

#基于dockerfile文件构建镜像命令

完整的写法: docker build -f dockerfile -t nginx:new .  

docker build : 基于dockerfile 构建镜像

-f :指定dockerfile 文件(默认不写的话指的是当前目录)

-t :(tag) 打标签 ——》nginx:new  

.  :专业说法:指的是构建镜像时的上下文环境,简单理解:指的当前目录环境中的文件

  3.Dockerfile操作指令

Dockerfile创建镜像_docker_06

3.1ENTRYPOINT指令

ENTRYPOINT [“要运行的程序”,“参数1”,“参数2”]

设定容器启动时第一个运行的命令及其参数 可以通过使用命令docker run --entrypoint 来覆盖镜像中的ENTRYPOINT指令的内容。

两种格式:

exec格式(数值格式):ENTRYPOINT [“命令”,“选项”,“参数”]

shell格式:ENTRYPOINT 命令 选项 参数

3.2CMD 与entrypoint

都是容器启动时要加载的命令

exec 模式 与shell模式

exec: 容器加载时使用的启动的第一个任务进程

shell: 容器加载时使用的第一个bash(/bin/bash /bin/sh /bin/init)

自检完成后,加载第一个pid = 1 进程

shell 翻译官/解释器,解析

echo $PATH

示例:

Dockerfile创建镜像_nginx_07

Dockerfile创建镜像_nginx_08

Dockerfile创建镜像_nginx_09

Dockerfile创建镜像_nginx_10

Dockerfile创建镜像_docker_11

Dockerfile创建镜像_nginx_12

使用exec模式是无法输出环境变量

示例:exec模式(命令加选项+参数)

Dockerfile创建镜像_加载_13

Dockerfile创建镜像_docker_14

Dockerfile创建镜像_docker_15

Dockerfile创建镜像_加载_16

Dockerfile创建镜像_加载_17

Dockerfile创建镜像_加载_18

Dockerfile创建镜像_nginx_19

3、ADD和copy区别

Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在构建镜像的过程中完成的

copy只能用于复制(节省资源)

ADD复制的同时,如果复制的对象是压缩包,ADD还可以解压(消耗资源)

COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中

满足同等功能的情况下,推荐使用COPY指令。ADD指令更擅长读取本地tar文件并解压缩。


4.镜像分层原理

4.1docker镜像分层(基于AUFS构建)

docker镜像位于bootfs之上

每一层镜像的下一层成为父镜像

第一层镜像成为base image(操作系统环境镜像)

容器层(可读可写,为了给用户操作),在最顶层

容器层以下都是readonly



举报

相关推荐

0 条评论