Dockerfile构建Docker镜像

Dockerfile构建Docker镜像

Dockerfile是一个文本文件,其中包含了若干条指令,这些指令描述了构建镜像的过程。

这里先以一个简单的示例来说明:

vi Dockerfile

在编辑器中输入以下指令

FROM nginx
RUN echo '<h1>My nginx docker image</h1>' /usr/share/nginx/html/index.html

FROM:表示基础镜像

RUN:执行的命令

保存退出后,输入以下命令来构建镜像

docker build -t nginx:example .

-t:自定义镜像名称和标签

. :Dockerfile路径,这里表示当前路径


启动容器


访问宿主机ip:端口查看结果


一、Dockerfile常用指令

1. FROM 指定基础镜像
FROM <image>
FROM <image:tag>
FROM <image>@<digest>
例如:
FROM nginx
2. MAINTAINER 指定维护者信息

例如:

MAINTAINER 口乞酉昔<767412431@qq.com>
3. ADD 复制宿主机文件到容器
ADD <src>...<dest>

例如我把eureka-0.0.1.jar 拷贝到容器 /dev/apps目录,并重命名为app.jar

ADD eureka-0.0.1.jar /dev/apps/app.jar

src可以为宿主机文件也可以为一个URL或者一个压缩包,当为URL时不以斜杠结尾会被认为是一个文件会对相应文件拷贝到容器中,如果结尾是一个斜杠,那么会被认为是一个目录,会将该目录下的所有文件拷贝到容器中。当为压缩包的时候,会把该文件拷贝到容器中并自动解压。

4.ARG设置构建参数

ARG常用于设置构建参数,这些参数在容器运行时是不会存在的。

例如

ARG user1

设置一个变量,在启动容器的时候传入参数

docker build -t myimage --build-arg user1=root .

也可以设置默认值

ARG user1=root

引用变量

USER $user1

引用变量加默认值

USER $(user1:root)
5. ENV 设置环境变量
ENV <key> <value>

例如

ENV JAVA_HOME /path/java1.7
6. EXPOSE 声明暴露的端口

例如

EXPOSE 80 8080 1521
7. COPY 复制文件

COPY的用法和ADD用法类似,不同的是,COPY不支持URL和压缩包

COPY <src> <dest>
8. CMD 容器启动执行的命令

CMD用来指定容器启动后执行的命令,一个Dockerfile只有一个CMD命令,如果有多个,那么只会执行最后一个,如果启动容器的时候指定了参数,那么CMD命令会被覆盖。

CMD ["executable","param1","param2"](推荐参数)
CMD ["param1","param2"](为ENTRYPOINT指令提供预设参数)
CMD command param1 param2(在shell中执行)

例如






此时发现在启动容器的时候写入命令,Dockerfile中的被覆盖掉

9. ENTRYPOINT  切入点

ENTRYPOINT和CMD指令类似,都是指定Docker容器启动时执行的命令,可以多次设置,只有最后一条会被执行,不同的是,该命令在容器启动的时候输入参数并不会覆盖掉该命令,其就像一个执行命令一样来执行你的参数,例如

ENTRYPOINT ["/bin/echo"]



可以发现ENTRYPOINT就像一个执行程序一样执行了一个命令
10. RUN 执行命令
RUN <command>
RUN ["executable","param1","params"]

RUN <command>在shell终端中执行,在linux中默认是/bin/sh -c,在windows中是cmd /s /c,使用这种格式,就像直接在命令行中输入命令一样,RUN ["executable","param1","param2"] 使用exec执行,这种方式类似于函数调用,例如["/bin/bash","-c","echo hello"],该方式必须使用双引号,不能使用单引号。RUN可以有多条。

11. LABEL 为镜像添加元数据

格式为<key>=<value> <key>=<value>... 使用""" 和 "\"转换命令行,示例

LABEL version="1.0"
LABEL description="This is my \
label."
12. USER设置用户

该命令用于设置启动镜像时的用户或者UID写在该指令后的RUN、CMD、ENTRYPOINT指令都将使用该用户执行命令

USER myusername
13. VOLUME 指定挂载点

该指令使容器中的某目录与宿主机的某目录关联起来,挂载点可被多个容器共享

VOLUME /tmp
14. WORKDIR 指定工作目录

切换目录命令,类似于cd命令,写在指令后的RUN、CMD、ENTRYPOINT指令都将该目录作为当前目录执行程序

WORKDIR /usr/lib/apps


其它指令不再说明,感兴趣的可自己查阅资料























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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值