7.docker file 语法
详细文档 : https://docs.docker.com/engine/reference/builder/
1. FROM 尽量使用官方的 image 作为 base image
FROM scratch # 制作base image
FROM centos # 使用base image
eg : FROM centos
2. LABEL Metadata 不可少 类似与代码内的注释
LABEL maintainer="zonehoo@163.com"
LABEL version="1.0"
LABEL description="This is description"
3.RUN 为了美观,复杂的RUN请用反斜线换行!避免无用分层,合并多条命令成一行!(反斜线为换行)
在 centos 内安装软件
RUN yum update && yum install -y vim \
python-dev
在 ubantu 内安装软件
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/.bashc;echo $HOME'
4.WORKDIR 用WORKDIR, 不要用RUN cd,尽量使用绝对目录(设定当前工作目录 类似于 cd)
1.WORKDIR /root
2.
WORKDIR /test #若果没有会自动创建test目录
WORKDIR demo
RUN pwd #输出结果应该是 /test/demo
5.ADD 和 COPY (把本地的文件添加到image里面)
大部分情况下,COPY 优于 ADD
ADD 除了 COPY 还有额外功能(解压)
添加远程文件/目录请使用curl或者wget
ADD hello / #将当前文件夹下的可执行文件 添加到 根目录里
ADD test.tar.gz / #添加到根目录 并解压
WORKDIR /root
ADD hello test/ # hello 所在文件 /root/test/hello
WORKDIR /root
COPY hello test/
6. ENV 通过设定一个环境变量 声明一个常量 (尽量使用ENV增加可维护性)
ENV MYSQL_VERSION 5.6 #设定常量
RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \
&& rm -rf /var/lib/apt/lists/* #引用常量
7. RUN 与 CMD 与 ENTRYPOINT
RUN :执行命令并创建新的 Image layer
CMD :设置容器启动后默认执行的命令和参数
ENTRYPOINT :设置容器启动时运行的命令
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/echi", "hello docker"]
测试 docker 的两种格式
shell 格式 ENTRYPOINT 会连贯执行
FROM centos
ENV name DOCKER
ENTRYPOINT echo "hello $name" # hello DOCKER
exec格式 ENTRYPOINT 会单独执行 命令 不与其他关联 若要解析要使用 /bin/bash 执行
FROM centos
ENV name Docker
ENTRYPOINT ["/bin/echo", "hello $name"] #hello $name
改
ENTRYPOINT ["/bin/bash", "-c", "echo hello $name"] #hello Docker
CMD
1.容器启动时默认执行的命令
2.如果docker run指定了其他命令,CMD命令会被忽略
eg: docker run -it [image_name] /bin/bash 则 CMD 命令会忽略
3.如果定义了多个CMD,只有最后一个会执行
eg:
FROM centos
ENV name Docker
CMD echo "hello $name" # hello Docker
ENTEYPOINT
1.让容器以应用程序或则服务的形式运行 (一半作为一个后台的进程)
2.不会被忽略,一定会执行
eg: docker run -it [image_name] /bin/bash 会执行 Entrypoint 后的语句
3.最佳实践:写一个shell脚本作为entrypoint
COPY docker-entrypoint.sh /usr/local/bin/ #复制脚本到 指定目录
ENTRYPOINT ["docker-entrypoint.sh"] # 运行 entrypoint
EXPOSE 27017
CMD ["mongod"]
7.docker file 语法的更多相关文章
- Docker3-Dockerfile创建镜像的方法(推荐docker file这种方法)
一.镜像制作的方法 1.本地导入导出镜像 请参考:Docker 架构原理及简单使用 导出:docker save nginx >/tmp/nginx.tar.gz 导入:docker load ...
- docker镜像的创建方法docker file方式
什么是docker file文件? 简单来说,docker file文件就是一个命令文本集合,容来记录创建docker镜像的步骤 快速入门: 1.新建一个docker file文件dockerfile ...
- docker file 示例
报错 Cannot connect to the Docker daemon. Is the docker daemon running on this host? 这个错误只要输入docker -d ...
- 【Linux】【Services】【Docker】Docker File
Docker Images: docker commit Dockerfile:文本文件,镜像文件构建脚本: Dockerfile:由一系列用于根据基础镜像构建新的镜像文件的专用指令序列组成: 指令: ...
- Sublime Text3 protobuf syntax file(语法文件)
将以下两个文件放置在X:XXX\Sublime Text 3x64\Data\Packages\User目录下,就可以为sublime3添加protobuf文件的语法高亮规则. 文件名:Protobu ...
- Docker系列05:docker镜像制作 &Docker file
1 什么是Dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. dock ...
- docker image 转换 docker file
这个是从每天的播报平台抓取到国外的信息发现的,感觉很实用. 博客原文,E文好的可以直接去看,https://samaritan.ai/blog/reversing-docker-images-into ...
- docker 学习(八) docker file
一 什么是Dockerfile: Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像.它们简化了从头到尾的流程并极大的简化了部署工作.Dockerfile ...
- docker file 笔记
FROM # FROM scratch, FROM centos, FROM ubuntu:latest LABEL RUN # 每运行一次RUN,image都会生成新的一层,为了美观,避免 ...
随机推荐
- 第十二篇视图层之视图函数(views)-三件套
视图层之视图函数(views) 阅读目录(Content) 视图层之视图函数(views) 一个简单的视图 HttpRequest HttpResponse redirect 函数 对比render与 ...
- SpringBoot Application事件监听
SpringBoot Application共支持6种事件监听,按顺序分别是: ApplicationStartingEvent:在Spring最开始启动的时候触发 ApplicationEnviro ...
- 【Vue中的坑】Vue中的@mouseenter没反应?
在开发中想实现鼠标悬浮,然后发现事件不由被出发,查找资料,发现并不是所有情况都不能用 下面就简单的说一下如何避免这种情况 如果你的悬浮事件是在 a 标签上,那么你直接使用就会出问题,你需要加一个nat ...
- POJ 2031:Building a Space Station 最小生成树
Building a Space Station Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6083 Accepte ...
- 66.Python中startswith和endswith的使用
定义模型的models.py,示例代码如下: from django.db import models class Category(models.Model): name = models.Char ...
- JS下拉框联动
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- window10 家庭版安装docker和php开发环境
前期工作 一.在宿主机创建文件夹 D:\wnmp\mysql57-conf D:\wnmp\mysql57-log D:\wnmp\nginx110-conf D:\wnmp\nginx110-l ...
- 十一、CI框架之输出用户IP地址
一.代码如下: 二.效果如下: 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.
- 登录之后跳转到登录之前的页面 之 Referer 的坑
简而言之:通过鼠标在页面上点击链接发送请求,请求header中会包含referer信息, 通过在浏览器地址栏书写并发送请求的,header中不会有referer信息. 为了完成登录动作成功后返回原页面 ...
- 2020/2/3 PHP代码审计之PHP弱类型
0x00 简介 php中有两种比较的符号 == 与 === <?php 2 $a = $b ; 3 $a===$b ; 4 ?> === 在进行比较的时候,会先判断两种字符串的类型是否相等 ...