Docker 从入门到实践系列五 - Dockerfile文件

什么是DockerFile文件


DockerFile是一个文本格式的配置文件,用户可以使用DockerFile来快速创建自定义的镜像。

DockerFile基本结构


Dockerfile分为四部分:基础镜像信息、维护者信息、 镜像操作指令和容器启动时执行指令

比如:

This Dockerfile uses the ubuntu image

VERSION 2 - EDITION 1

Author: docker_user

Command format: Instruction [arguments / command] …

Base image to use, this must be set as the first line

FROM ubuntu:18.04

MAINTAINER docker_user docker_user@email.com

COPY . /app

RUN make /app

CMD python /app/app.py

每条指令创建一层:

  • FROM : 指明所基于的镜像名称,从ubuntu:18.04Docker镜像创建一个图层。

  • MAINTAINER:维护者信息,docker_user维护(可以不写)

  • COPY : 从Docker客户端的当前目录添加文件,镜像操作指令

  • RUN : 构建镜像时执行make命令,每运行一条RUN指令,镜像就添加新的一层,并提交(添加可写层)

  • CMD : 指定在容器中运行什么命令,用来指定运行容器时的操作命令

Docker镜像由只读层组成,每个只读层代表一个Dockerfile指令。这些层是堆叠的,每个层都是上一层的变化的增量

Docker可以通过读取Dockerfile指令来自动构建镜像

完整的小例子:

#在一个空目录下,新建一个名为 Dockerfile 文件

mkdir /usr/dockerfile -p

vim dockerfile-demo

#编辑 dockerfile

FROM nginx:latest

维护者 可以省略

MAINTAINER jourwon jourwon@docker.com

#启动容器

RUN mkdir /usr/share/nginx/html/ -p

RUN echo Hello DockerFile! > /usr/share/nginx/html/demo.html

#构建镜像 . : 根据当前上下文环境构建

docker build -f dockerfile-demo -t jourwon/nginx:v1 .

#运行

docker run --rm -d -it --network host jourwon/nginx:v1

浏览器访问

DockerFile指令详解


D ockerfile命令官方文档 常见命令详解:

1. FROM

指定所创建镜像的基础镜像,如果本地不存在,则默认会去Docker Hub下载指定镜像。命令格式如下:

FROM [–platform=] [AS ]

Or

FROM [–platform=] [:] [AS ]

Or

FROM [–platform=] [@] [AS ]

平时不用这么复杂的,只需如下即可

FROM [:]

FROM centos:7.6.1810

任何Dockerfile中的第一条指令必须为FROM指令。并且,如果在同 一个Dockerfile中创建多个镜像,可以使用多个FROM指令(每个镜像一 次)。

2. MAINTAINER

指定维护者信息,格式为MAINTAINER。可以不写

MAINTAINER jourwon jourwon@docker.com

该信息会写入生成镜像的Author属性域中

3. RUN

容器构建时需要运行的命令

1、RUN

默认将在shell终端中运行命令,即/bin/sh-c

2、RUN [“executable”,“param1”,“param2”]。指令会被解析 为Json数组,因此必须用双引号。exec执行,不会启动shell环境

指定使用其他终端类型可以通过此方式实现,例如

RUN [“/bin/bash”,“-c”,“echo hello”]

每条RUN指令将在当前镜像的基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用\来换行

在shell形式中,可以使用\(反斜杠)将一条RUN指令继续到下一行。例如,考虑以下两行:

RUN /bin/bash -c 'source $HOME/.bashrc; \

echo $HOME’

它们在一起等效于以下这一行:

RUN /bin/bash -c ‘source $HOME/.bashrc; echo $HOME’

要使用’/bin/sh’以外的其他shell ,请使用exec 形式传入所需的shell 。例如:

RUN [“/bin/bash”, “-c”, “echo hello”]

注意 在JSON格式中,必须转义反斜杠。在Windows中,反斜杠是路径分隔符,这一点尤其重要。由于无效的JSON,以下行否则将被视为shell形式,并以意外的方式失败:

RUN [“c:\windows\system32\tasklist.exe”]

此示例的正确语法为:

RUN [“c:\windows\system32\tasklist.exe”]

4. CMD

CMD指令用来指定启动容器时默认执行的命令。它支持三种格式:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

73)]

[外链图片转存中…(img-N4SIpOUo-1712239420773)]

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值