Dockerfile构建镜像

Posted hadeian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dockerfile构建镜像相关的知识,希望对你有一定的参考价值。

Dockerfile 构建镜像

创建一个本地仓库
构建一个静态页面镜像
$ mkdir static_web
$ cd static_web
$ touch Dockerfile
Dockerfile文件格式及详解
# Version 0.0.1
FROM ubuntu:14.04
MAINTAINER Hadeian "[email protected]"
RUN apt-get update && apt-get install nginx -y
RUN echo 'Hi, I am in your container.' > /usr/share/nginx/html/index.html
EXPOSE 80
  • Dockerfile由指令和参数组成,每条指令都必须为大写字母,且要跟随一个参数。
  • Dockerfile中的指令会按顺序从上到下执行。
  • Dockerfile大体按照如下流程执行:
    1. Docker从基础镜像运行一个容器。
    2. 执行一条指令,对容器进行修改。
    3. 执行类似docker commit的操作,提交一个新的镜像层。
    4. Dcoker再基于刚提交的镜像运行一个新的容器。
    5. 执行Dockerfile中的下一条指令,直到所有指令执行完毕。
  • 好处:
    1. 方便用户调试。若由于某些原因失败(如某条指令失败)也可得到一个可交互的镜像,可通过登录镜像进行调试。
    2. 可构建缓存。可以实现一个简单的Dockerfile模板。
基于Dockerfile构建镜像
cd static_web
# 在构建时为镜像设置标签
# 构建时会将当前上下文上传到docker守护进程
docker build -t "test/static_web:v1" .
# 从git仓库构建docker镜像
docker build -t "test/static_web:v1" [email protected]:test/docker-static_web

Dockerfile指令含义:

指令 含义
FROM 第一条指令必须是FROM,用于指定基础镜像。
MAINTAINER 该指令会告诉docker作者的信息。
RUN 在容器中运行指定命令,每一个RUN指令都会创建一个镜像层,执行成功后,会将此镜像层提交,然后继续执行下一条指令。
EXPOSE 该指令用于向外部公开端口,可以指定多个端口。
ENV 指定容器中的环境变量。
CMD 用于指定一个容器启动时要运行的命令,可被docker run命令覆盖。
ENTRYPOINT 与CMD指令类似,可接受docker run命令传递的参数,但不会被覆盖。
WORKDIR 在容器内部设置一个工作目录,ENTRYPOINT/CMD将在此目录下执行。
USER 指定该镜像会以什么用户运行。
VOLUME 为基于此镜像创建的容器创建一个指定的挂载点。
ADD 将构建环境下的文件和目录复制到镜像中。可以使用url作为文件源,可将归档(压缩)文件作为源文件,并在容器中自动解开。
COPY 类似于ADD指令。COPY指令只关心在构建上下文中(当前目录下)复制本地文件,而不会做文件提取和解压工作。
LABEL 用于为Docker镜像添加元数据。元数据以键值对(字典)的形式展现。可以在每条指令中指定一个或多个元数据,不同元数据之间用空格分离。
ARG 用于定义可以在docker build命令运行时传递给构建运行时的变量。在构建时使用--build-arg指定参数即可。用户只能在构建时指定在Dockerfile中定义过的参数。预定义(默认)ARG变量: HTTP_PROXY http_proxy HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy NO_PROXY no_proxy。使用格式:docker build --build-arg =
STOPSIGNAL 用于设置停止容器时发送系统调用信号给容器。这个信号必须是内核系统调用表中合法的数,如9。或者DIGNAME格式的信号名称,如SIGKILL。
ONBUILD 为镜像添加触发器。当一个镜像被用作其他镜像的基础镜像时,触发器才会被执行。触发器会在构建过程中插入新指令,可以认为这些指令是紧跟在FROM之后指定的。
将镜像推送到Docker Hub
docker push test/static_web
# test/static_web: DockerHub用户名/镜像名
DockerHub自动构建
将GitHub连接只DockerHub:
  1. 登录DockerHub
  2. Repositories
  3. Create Repository
  4. Please re-link a GitHub or Bitbucket account中选择GitHub图标
  5. Create & Build

以上是关于Dockerfile构建镜像的主要内容,如果未能解决你的问题,请参考以下文章

使用dockerfile构建nginx镜像 转

构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式

无需 Dockerfile 的镜像构建:BuildPack vs Dockerfile

Dockerfile构建镜像

使用Dockerfile构建镜像

Dockerfile构建Springboot工程镜像并运行(命令详解)