网站首页 > 技术文章 正文
一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
官网学习
https://docs.docker.com/engine/reference/builder/#usage
FROM
必须为第一个命令,指定基础镜像
FROM <image> FROM <image>:<tag> FROM <image>@<digest> FROM scratch #制作base Image FROM centos #使用base Image FROM centos:7.9 FROM mysql:5.6
尽量使用官方的image作为base image!那是经得起考验的!
LABEL
给镜像添加信息。使用docker inspect可查看镜像的相关信息
LABEL maintainer="394498036@qq.com" LABEL version="1.0" LABEL description="This is description \ 欢迎关注:编程坑太多,我在等你."
其实就类似咱们写代码的注释,很多人写代码不愿意写注释,其实写注释对自己的负责,过段时间翻坑的时候,想想当初的意思,容易很快的解决,所以一定要写LABEL
RUN
构建镜像时执行的命令
RUN yum update && yum install -y vim \ python-dev #反斜线换行 RUN apt-get update && apt-get install -y perl \ pwgen --no-install-recommends && rm -rf \ /var/lib/apt/lists/* #注意清理cache RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
为了美观,复杂的RUN请用反斜线换行,避免无用分层,合并多条命令成一行!
WORKDIR
工作目录
WORKDIR /test #如果没有会自动创建test目录 WORKDIR jianshu RUN pwd #输出结果应该是/test/jianshu
用WORKDIR,不要用RUN cd 尽量使用绝对目录!
ADD and COPY
- 将本地文件添加到容器中,identity, gzip, bzip2,xz,tar.gz,tgz等类型的文件将被添加tar -x命令,进行解压
- 同ADD,只是不会解压文件。
ADD <src>... <dest> ADD ["<src>",... "<dest>"] 用于支持包含空格的路径 COPY <src>... <dest> COPY ["<src>",... "<dest>"] 用于支持包含空格的路径 ADD hello / ADD test.tar.gz / #添加到根目录并解压 WORKDIR /root ADD hello test/ # /root/test/hello WORKDIR /root COPY hello test/ # /root/test/hello
大部分情况,COPY优于ADD,ADD除了COPY还有额外功能(解压缩)!添加远程文件/目录请使用curl 或者wget
ENV
设置环境变量
ENV <key> <value> ENV <key>=<value> ... ENV MYSQL_VERSION 5.6 E-NV apt-get install -y mysql-server = "${MYSQL_VERSION}" \ && rm -rf /var/lib/apt/lists/* #引用常亮
尽量多使用,减少维护成本!
学习下面的先了解下
Shell 和Exec 格式
- Shell格式
RUN apt-get install -y vim CMD echo "hello docker 微信公众号:编程坑太多" ENTRYPOINT echo "hello docker 微信公众号:编程坑太多"
- Exec格式
RUN ["apt-get", "install", " -y", "vim"] CMD ["/bin/echo","hello docker 微信公众号:编程坑太多"] ENTRYPOINT ["/bin/echo","hello docker 微信公众号:编程坑太多"]
- Dockerfile1
FROM centos ENV name Docker ENTRYPOINT echo "hello $name"
- Dockerfile2
FROM centos ENV name Docker ENTRYPOINT ["/bin/echo", "hello $name"]
通过实际的例子查看区别。
mkdir cmd-entrrypoint cd cmd-entrrypoint/ vi Dockerfile
- 先执行Dockerfile1
more Dockerfile
docker build -t liming/centos-entrypoint-shell .
docker run liming/centos-entrypoint-shell
- 先执行Dockerfile2
more Dockerfile
docker build -t liming/centos-entrypoint-exec .
docker run liming/centos-entrypoint-exec
我们通过shell格式运行的话,它会通过默认的bash里面通过shell执行命令,它会通过shell替换这边变量,通过exec格式运行的话,只是单纯的执行echo,没办法帮我们替换到$name。如何解决不一样的问题呢?请开始我的表演!修改Dockerfile2
FROM centos ENV name Docker ENTRYPOINT ["/bin/bash","-c", "echo hello $name"]
docker build -t liming/centos-entrypoint-exec-new .
docker run liming/centos-entrypoint-exec-new
是不是很nice!
CMD
设置容器启动后默认执行的命令和参数
- 容器启动时默认执行的命令
- 如果docker run 指定了其他命令,CMD命令被忽略
- 如何定义了多个CMD,只有最后一个会执行
FROM centos ENV name Docker CMD echo "hello $name"
docker build -t liming/centos-cmd-shell . docker run liming/centos-cmd-shell docker run -it liming/centos-cmd-shell /bin/bash
ENTRTYPOINT
设置容器启动时运行的命令
- 让容器以应用程序或者服务的形式运行
- 不会被忽略,一定会执行
FROM centos ENV name Docker ENTRYPOINT echo "hello $name"
docker build -t liming/centos-entrypoint-shell . docker run liming/centos-entrypoint-shell docker run -it liming/centos-entrypoint-shell /bin/bash
PS:Dockerfile详解基本就介绍这么多,可能还有很多命令没有讲解,以后用到了在说吧。一定要CMD和ENTRTYPOINT因为很多官方的都常用这两个命令。
猜你喜欢
- 2024-09-27 【容器篇】认识Dockerfile dockerfile示例
- 2024-09-27 Dockerfile常用指令大全及详解 dockerfile中最常见的指令是什么
- 2024-09-27 阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比
- 2024-09-27 Docker 镜像构建之 Dockerfile docker镜像在哪个文件夹
- 2024-09-27 docker进击之Dockerfile最佳实践 dockersfile
- 2024-09-27 Dockerfile简单使用 dockerfile示例
- 2024-09-27 Dockerfile你值得拥有 dockerfile sh
- 2024-09-27 DockerFile文件详解 dockerfile文件详解java
- 2024-09-27 Docker实战九之Docker Dockerfile
- 2024-09-27 Docker篇(三):Dockerfile实战开启
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)