avatar

nk

学习 思考 坚持 平静

  • 首页
  • 关于
Home 拥抱云原生:Dockerfile
文章

拥抱云原生:Dockerfile

Posted 2024-05-14 Updated 2024-05- 14
By nk
35~45 min read

拥抱云原生:Dockerfile

先来写个简单的 Dockerfile

FROM  alpine

LABEL maintanier='study'

RUN ["/bin/sh", "-c","ping -c 4  www.google.com"]

CMD sleep 10000

构建镜像

image-fgopo.png

Claude-3

image-xtqiw.png

docker build --no-cache -t myping:latest  .

Dockerfile构成小析

FROM

docker 镜像一般需要依赖一个基础的环境,一般是 Linux镜像

ChatGPT回答

image-trjtx.png

LABEL

label 一般是定义一些镜像的诸如版本号,作者信息等元数据信息,我们一般是使用 key = value 的形式进行定义

image-knvaq.png

RUN

在镜像构建构成中执行一些命令和指令

每一个 RUN指定都会在当前镜像的基础上创建一个新的一层并执行指定的指令

ChatGPT

image-shctk.png

CMD

指定容器启动的时候默认执行的命令,如果运行容器时执行了其他的指定, Dockerfile中的 CMD指令会被覆盖

ChatGPT

image-clrke.png

ENTRYPOINT

和 CMD类似,在容器启动的时候默认执行的命令

它为构建的镜像提供了一个固定的入口,然容器可以像个可执行程序一样运行,同时接受额外的参数

ChatGPT

image-vjfze.png

CMD和 ENTRYPOINT的异同(ChatGPT)

image-ghwgs.png

CMD 和 ENTRYPOINT 的组合说明

image-vbgeu.png

docker run --help

image-bhysc.png

如何覆盖镜像中默认 CMD

Cladue-3

image-sswif.png

ChatGPT

image-nnbzh.png

ARG

可以定义变量,用户可以在构建的时候通过 --build-arg = 传递

--build-arg 指定的参数会覆盖 Dockerfile 指定的同名变量

arg 只有构建期有效,运行期无效

ChatGPT回答

image-zrldp.png

ENV

Dockerfile 构建镜像的时候,设置的环境变量,可以在启动容器的时候使用 -e 参数进行覆盖 Dockerfile中定义的值

Claude-3

image-gukvk.png

ENV的固化问题

FROM nginx

AGR msg = hello

ENV  env =$msg

CMD ['/bin/sh','-c','echo $msg','echo $env']

docker run -it --build-arg msg=3 ... 

输出的结果

3

hello

Dockerfile 在我们构建镜像的时候,会把 环境变量固化到 ContainerConfig

查看镜像信息
docker  image  inspect  nginx:latest

image-mfwry.png

ADD

将源文件复制到镜像中。每一个指令会在镜像中增加一层

  • 支持下载远程文件
  • 支持解压压缩包

COPY

功能和 ADD类似,将源文件复制到镜像中。每个指令都会都会在镜像中增加一层

image-ygsdu.png

ADD 和 COPY 的异同

ChatGPT

image-mtgke.png

/dest和 /dest/

Claude-3

image-litrt.png

Dockerfile 工作的上下文路径

docker build --no-cache -t  myimage:lastest  .
.的意思
Claude-3

image-nbkwn.png

WORKDIR

Claude-3

image-ieydw.png

USER

ChatGPT

image-kuyjs.png

VOLUME

ChatGPT

image-pwsvv.png

是否可以指定卷名称?

ChatGPT

image-wquvy.png

关于 VOLUME的一点小注意

FROM alpine

RUN  echo  "aaa" >>  /app/a.txt
 

VOLUME ["/app","/logs"]

RUN echo  "bbb"   >>  /app/a.txt

/app/a.txt 的最后内容是多少?

image-jdjdy.png

EXPOSE

ChatGPT

image-yrhrb.png

Docker 镜像的瘦身

dockerignore

image-qrglm.png

云原生, Docker
Docker 云原生
License:  CC BY 4.0
Share

Further Reading

May 14, 2024

拥抱云原生:Dockerfile 的多阶段构建

什么是 Dockerfile的多阶段构建 多阶段构建的就是通过把一个构建过程拆分成多个临时构建的阶段,每个阶段完成一些任务,最后把这些分构建的结果来实现我们目标镜像的构建 ChatGPT 多

May 14, 2024

拥抱云原生:Dockerfile

拥抱云原生:Dockerfile 先来写个简单的 Dockerfile FROM alpine LABEL maintanier='study' RUN ["/bin/sh", "-c","ping -c 4 www.google.com"] CMD sleep 10000 构建镜像 C

Apr 28, 2024

拥抱云原生:Docker文件系统

拥抱云原生:Docker文件系统 通过 Nginxdocker镜像探索docker镜像是如何存储的 docker pull nginx

OLDER

拥抱云原生:Docker文件系统

NEWER

拥抱云原生:Dockerfile 的多阶段构建

Recently Updated

  • 拥抱云原生:Dockerfile 的多阶段构建
  • 拥抱云原生:Dockerfile
  • 拥抱云原生:Docker文件系统
  • 拥抱云原生:Docker 指令小析
  • 拥抱云原生:起始

Trending Tags

Nginx 工作报告 云计算 云原生 Alpine Linux Docker Spring Linux 面试智慧

Contents

©2025 nk. Some rights reserved.

Using the Halo theme Chirpy