Docker Image Build 和 Dockerfile 进行 Docker Image 制作详解(制作 Docker Image 方法之二)、Dockerfile 指令详解 第一篇

Dockerfiledocker-compose详解 Dockerfile是一个用来构建镜像的文本文件, 文本内容包含了一条条构建镜像所需的指令说明。例如我们要在含python3的centos镜像基础上安装vim,可以这么写。这里的FROM表示从哪个镜像开始构建,可以是本地已有的镜像,也可以是dockerhub或者私域的镜像。用于构建启动多容器工具, 通过docker-compose.yml来配置项目需要的所有服务, 然后docker-compose up启动所有服务。 阅读详情

1、Docker Image 制作方式

Docker Image 的制作方法有以下两种:

在这里插入图片描述

2、Dockerfile 介绍

在这里插入图片描述

  • Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
  • 镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
  • Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

3、Docker Image Build Command

[root@Tang ~]# docker image build --help

Usage:	docker image build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

Options:
  -c, --cpu-shares int          CPU shares (relative weight)
  -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
  -m, --memory bytes            Memory limit
  -t, --tag list                Name and optionally a tag in the 'name:tag' format
# -t                          # 打标签
# -c,- cpu-shares int         # CPU份额(相对权重)
# -m,- memory bytes           # 内存限制
# --build-arg                 # 设置构建时变量,就是构建的时候修改ARG指令的参数

4、Dockerfile 介绍及常用指令、.dockerignore file 介绍

4.1 介绍

  • Dockerfile 编写的基本结构

    Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,# 为 Dockerfile 中的注释。

  • 一台主机可以有多个Dockerfile

    要使用多个Dockerfile 创建镜像,可以在不同目录编写Dockerfile,然后在Dockerfile 所在的目录下构建新的镜像。

    注意:Dockerfile 中所包含的需要的内容;如COPY的文件、目录等,都需要在Dockerfile 同级目录下存在。

  • docker image build 基于dockerfile 制作镜像的命令

4.2 常用指令

# EXPOSE
# ENV
# RUN
# CMD
# ENTRYPOINT
# HEALTHCHECK
# ONBUILD
# USER
# ARG
# SHELL
# STOPSIGNAL

4.3 .dockerignore file 介绍

在这里插入图片描述

5、FROM 指令

5.1 介绍

  • FROM 指令必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从 FROM 语句
  • FROM 指令用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像所提供的运行环境
  • 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker image build 会在 docker 主机上查找指定的镜像文件,在其不存在时,则会自动从 Docker 的公共库 pull 镜像下来。如果找不到指定的镜像文件,docker build 会返回一个错误信息
  • FROM 可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像
  • 如果 FROM 语句没有指定镜像标签,则默认使用 latest 标签

5.2 格式

# FROM <repository>[:<tag>] 
# FROM <repository>@<digest>

参数介绍:
# <repository>---指定作为 base image 的名称
# <tag>---base image 的标签,省略时默认 latest
# <digest>---是镜像的哈希码;使用哈希码会更安全一点

5.3 示例

# cat Dockerfile 
FROM busybox:latest

6、MAINTAINER 指令

在这里插入图片描述

6.1 介绍

  • 用于让 dockerfile 制作者提供本人的详细信息
  • dockerfile 并不限制 MAINTAINER 指令可在出现的位置,但推荐将其放置于FROM指令之后

6.2 格式

# MAINTAINER <authtor's detail>

6.3 示例

# cat Dockerfile 
FROM busybox:latest

LABEL maintainer="Tang <tang@tang.com>"

7、COPY 指令

在这里插入图片描述

7.1 介绍

  • 用于从docker 主机复制新文件或者目录至创建的新镜像指定路径中

7.2 格式

# COPY <src>... <dest> 
# COPY ["<src>",... "<dest>"]
# <src>    # 要复制的源文件或目录,支持使用通配符
# <dest>   # 目标路径,即正在创建的image的文件系统路径
		   # 建议<dest>使用绝对路径,否则,COPY指定以WORKDIR为其实路径
	       # 在路径中有空白字符时,通常使用第2中格式

7.3 规则

  • 必须是 build 上下文中的路径,不能是其父目录中的文件
  • 如果 是目录,则其内部文件或子目录会被递归复制,但 目录自身不会被复制
  • 如果指定了多个 ,或在 中使用了通配符,则 必须是一个目录,且必须以 / 结尾
  • 如果 事先不存在,他将会被自动创建,这包括父目录路径

7.4 示例

7.4.1 COPY 文件

### 文件准备 ###
[root@Tang imagebuildbusybox]# pwd
/root/imagebuildbusybox
[root@Tang imagebuildbusybox]# ll
total 4
-rw-r--r--. 1 root root 102 Nov 29 11:31 Dockerfile
drwxr-xr-x. 2 root root  60 Nov 29 11:27 scptext
[root@Tang imagebuildbusybox]# tree scptext/
scptext/
├── test1.html
├── test2.html
└── test3.html

0 directories, 3 files
[root@Tang imagebuildbusybox]# cat scptext/test{
   
   1..3}.html
<h1>Tang Web Server Test 1</h1>
<h1>Tang Web Server Test 2</h1>
<h1>Tang Web Server Test 3</h1>

### Dockerfile 文件查看 ###
[root@Tang imagebuildbusybox]# cat Dockerfile 
FROM busybox:latest

LABEL maintainer="Tang <tang@tang.com>"

COPY scptext/test1.html /data/web/html/
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v1
Sending build context to Docker daemon  5.632kB
Step 1/3 : FROM busybox:latest
 ---> 020584afccce
Step 2/3 : LABEL maintainer="Tang <tang@tang.com>"
 ---> Using cache
 ---> 4e6fb7c1743b
Step 3/3 : COPY scptext/test1.html /data/web/html/
 ---> 55985b6de4f6
Successfully built 55985b6de4f6
Successfully tagged mybbx:v1
[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
mybbx                                                    v1                  55985b6de4f6        7 minutes ago       1.22MB
nginx                                                    latest              231d40e811cd        6 days ago          126MB
centos                                                   7                   5e35e350aded        2 weeks ago         203MB
busybox                                                  latest              020584afccce        4 weeks ago         1.22MB
### 运行新的容器,看是否有相关文件 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest --rm -it mybbx:v1 /bin/sh
/ # cd /data/web/html/
/data/web/html # ls
test1.html
/data/web/html # cat test1.html 
<h1>Tang Web Server Test 1</h1>
/data/web/html # exit

7.4.2 COPY 文件目录

### 文件准备 ###
[root@Tang imagebuildbusybox]# pwd
/root/imagebuildbusybox
[root@Tang imagebuildbusybox]# ll
total 4
-rw-r--r--. 1 root root 102 Nov 29 11:31 Dockerfile
drwxr-xr-x. 2 root root  60 Nov 29 11:27 scptext
[root@Tang imagebuildbusybox]# tree scptext/
scptext/
├── test1.html
├── test2.html
└── test3.html

0 directories, 3 files
[root@Tang imagebuildbusybox]# cat scptext/test{
   
   1..3}.html
<h1>Tang Web Server Test 1</h1>
<h1>Tang Web Server Test 2</h1>
<h1>Tang Web Server Test 3</h1>

### Dockerfile 文件查看 ###
[root@Tang imagebuildbusybox]# cat Dockerfile 
FROM busybox:latest

LABEL maintainer="Tang <tang@tang.com>"

COPY scptext/ /data/web/html/
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v2
Sending build context to Docker daemon  
Docker Image Build Dockerfile 进行 Docker Image 制作详解制作 Docker Image 方法之二)、Dockerfile 指令详解 第二篇 Docker Image Build Dockerfile 进行 Docker Image 制作详解制作 Docker Image 方法之二)、Dockerfile 指令详解 第二篇1、第一篇链接2、RUN 指令2.1 介绍2.2 语法2.3 示例3、CMD 指令3.1 介绍3.2 语法3.3 示例4、ENTRYPOINT 指令4.1 介绍4.2 语法4.3 示例5、RUN CMD ENT... 阅读详情

相关推荐

Docker Dockerfile详解使用

一、Dockerfile的基本知识 1、什么是 DockerfileDockerfile 是一个用来构建自定义镜像的文本文件,它的文本内容由一行行指令语句组成,并且支持已 # 开头的注释行。 一般而言,Dockerfile 的内容分为四个部分: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 2、指令语句 指令语句可以大致分为两种:配置指令操作指令 指令不区分大小写。但是,约定将它们大写,以便更轻松地将它们与参数区分开。 指令语句的基础知识: 每条保留字指令都必须是大

Charge8的博客 7608

DockerFile,Docker ImageDocker Container之间的不同

Docker 镜像、Docker 容器 Dockerfile 使 Docker 得到广泛使用。但是,只有 Dockerfile 可用于创建 Docker 镜像。让我们在前进的过程中更多地了解 Docker DockerfileDocker概述 使用容器,Docker 容器化平台可以简化程序的设计、部署操作。将容器视为软件运输容器;它承载文件程序等关键内容,以便可以将应用程序快速从...

qq_37116560的博客 603

(四) DockerDockerfile编写与指令解析,自定义镜像实战

Docker之编写Dockerfile1. Dockerfile介绍1.1 docker build1.2 dockerignore文件1.3 Dockerfile格式2. Dockerfile构建过程解析2.1 Dockerfile内容基础知识:2.2 Docker执行Dockerfile的大致流程:2.3 三者关系3. DockerFile体系结构(指令详解) 1. Dockerfile介绍 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令参数构成的脚本。类似于Makefile

zxg的博客 4320

docker的使用

Docker for Windows 使用入门 欢迎来到Docker for Windows! Docker是用于创建Docker应用程序的完整开发平台,Docker for Windows是在Windows系统上开始使用Docker的最佳方式。 如果你没有安装Docker for Windows,请阅读这篇文章:Windows 10 安装 Docker for Windows 检查Docker Engine,ComposeMachine的版本 启动您最喜爱的shell(cmd.exe,PowerShe

gghgrqw的博客 975

Centos7.x下使用docker安装Oracle11g

Docker下安装Oracle11g

jialexiaoxuan的博客 3122

Docker 安装部署 ORACLE 11g数据库

背景:​ 最新在开发数据中台数据接入模块,其中设计很多数据类型,包括ORACLE ,因为是测试使用,想着快速部署测试,于是使用Docker 部署 Oracle , 生产环境不建议使用Docker 安装。

爱摄影的小章同学的博客 6265

dockerDockerfile 指令详解

Dockerfile是一个用于编写docker镜像生成过程的文件,其有特定的语法。Dockerfile的基本指令有十三个,分别是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD

不积跬步无以至千里,不积小流无以成江海。一个喜欢学习分享的程序员 5955

关于制作Docker镜像?| Dockerfile快速开始

要落地云原生架构,其中的一个核心点是通过容器来部署我们的应用。如果要使用容器来部署应用,那么制作应用的 Docker 镜像就是我们绕不开的关键一步。

西京刀客 3万+

Docker镜像构建指南:Dockerfile语法与docker build命令全解析

Docker镜像是将应用程序及其依赖打包成标准化文件的核心技术,确保跨环境一致性。本文介绍了两种镜像制作方式:docker commit(简单但不推荐)Dockerfile(主流标准方法)。重点解析了Dockerfile的配置要点,包括FROM(基础镜像)、LABEL(元数据)、COPY/ADD(文件复制)、WORKDIR(工作目录)、ENV(环境变量)等核心指令的使用规范与实战示例。通过Dockerfile可实现自动化、可重复、透明化的镜像构建

2302_80105876的博客 7469

Docker】个人镜像文件Dockerfile制作详解

Docker 是一个`开源的应用容器引擎`,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的`Linux或Windows`操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

小洁洁 3502

Docker 镜像制作DockerFile

Docker 镜像制作DockerFile

岳来的博客 9053

Docker 进阶之 Dockerfile 详解

Dockerfile的优点: - 能够自由灵活的与宿主机联系,比如,某些配置文件在宿主机验证并使用过后很好用,那么,可以将文件copy到镜像中,add 远程主机的配置文件到镜像中,定义onbuild动作等等各种灵活的功能。 - dockerfile本身就是一个比较详细的构建文档,有这个文档就可以清楚的知道新构建的镜像经历了怎样的变化。没有黑箱操作的困扰,后期维护更加方便。......

看,未来的博客 2224

Dockerfile & docker build

我们之前学习,docker的镜像都是官方给定义好的,我们可不可以 自己创造镜像呢。 什么是 dockerfile 呢? dockerfile,相当于是一个文档,客户可以基于dockerfile生成新的容器 dockerfile 是用来制作镜像的源码文件,是构建容器过程中的指令docker能够读取dockerfile的指定进行自动构建容器,基于dockerfile制作镜像 每一个指令都会创建一...

H_sen's Blog 1823

Dockerfile介绍 docker build常用命令介绍

1、什么是 dockerfile 2、docker镜像制作的工作逻辑 3、Dockerfile的基本结构 4、Dockerfile格式 案例: 5、Build镜像

小虚竹的专栏 2万+

深入 gradle-docker 源码:methodMissing 如何让任意 Dockerfile 指令成为可能?

gradle-docker 是一个从 Gradle 构建脚本直接构建 Docker 镜像的开源插件。很多人第一次接触它时都会惊讶:为什么在 `dockerfile { }` 块里可以写下 `RUN('apt-get update')`、`EXPOSE 8080` 甚至 `ADD(...)` 这种"不存在"的方法?答案就藏在 Groovy 的元编程魔法 `methodMissing` 里。本文带你逐

gitblog_00803的博客 911

Docker 容器镜像制作指令详解

一、Docker 镜像说明1、Docker镜像中没有内核从镜像大小上面来说,一个比较小的镜像只有1MB多点或几MB,而内核文件需要几十MB, 因此镜像里面是没有内核的,镜像在被启动为容器后将直接使用宿主机的内核,而镜像本身则只提供相应的rootfs,即系统正常运行所必须的用户空间的文件系统,比如: /dev/,/proc,/bin,/etc等目录,容器当中/boot目录是...

天行健,君子以自强不息;地势坤,君子以厚德载物。 3727

Dockerfile 指令

Dockerfile核心概念与指令解析 Dockerfile是构建Docker镜像的文本文件,包含逐条执行的指令。镜像由多个只读Layer组成,每条指令生成一个Layer。容器则是镜像加上可写层。关键指令包括: FROM:指定基础镜像,支持多阶段构建 WORKDIR:设置镜像内工作目录 COPY:复制文件到镜像,支持权限控制、排除文件等功能 多阶段构建可将构建环境与运行环境分离,显著减小镜像体积。COPY指令比ADD更推荐使用,因其功能更专注。通过合理使用这些指令,可以构建高效、安全的容器镜像。

纯洁的小魔鬼 5174
上一篇: Docker Container Commit 基于容器进行 Docker Image 制作(制作 Docker Image 方法之一)
下一篇: JVM 内存结构 及 GC机制 详解
Lee木木
博客等级 码龄7年 164粉丝 234原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值