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大体按照如下流程执行:
- Docker从基础镜像运行一个容器。
- 执行一条指令,对容器进行修改。
- 执行类似docker commit的操作,提交一个新的镜像层。
- Dcoker再基于刚提交的镜像运行一个新的容器。
- 执行Dockerfile中的下一条指令,直到所有指令执行完毕。
- 好处:
- 方便用户调试。若由于某些原因失败(如某条指令失败)也可得到一个可交互的镜像,可通过登录镜像进行调试。
- 可构建缓存。可以实现一个简单的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:
- 登录DockerHub
- Repositories
- Create Repository
- Please re-link a GitHub or Bitbucket account中选择GitHub图标
- Create & Build
以上是关于Dockerfile构建镜像的主要内容,如果未能解决你的问题,请参考以下文章
构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式