构建镜像
[TOC] 构建镜像有两种方式
一、使用 commit
构建镜像
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
Options:
-a, --author string Author (e.g., "John Hannibal Smith
<hannibal@a-team.com>")
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Commit message
-p, --pause Pause container during commit (default true)
-a 指定镜像的作者 -m 记录镜像的信息 -p 使用容器构建镜像时,是否暂停容器。
二、使用 dockerfike
构建镜像
构建镜像
docker build -t="指定镜像名"
查看镜像的构建过程
docker history [image]
Dockerdile指令
FROM<image>
FROM <image>:<tag>
必须是已经存在的镜像 必须是第一条非注释指令
MAINTAINER <name>
指定镜像的作者信息,包含进行的所有者和联系信息
LABEL
功能是为镜像指定标签
RUN
指定当前镜像中运行的命令
RUN <command> (Shell模式)
/bin/sh -c command
RUN [ "executable" , "param1" , "param2" ] ( exec模式 )
RUN ["/bin/bash" , "-c" , "echo hello" ]
EXPOSE <port> [<port>...]
指定运行该镜像的容器使用的端口
只是告诉
docker
运行的时候需要哪些端口,容器运行的时候还需要 -p 命令指定端口映射
CMD
容器运行时默认运行的命令。
CMD command param1 param2 (Shell模式)
CMD[ "executable" , "param1" , "param2" ] ( exec模式 )
CMD[ "param1" , "param2" ] (作为ENTERYPOINT指令的默认参数)
ENTRYPOINT
跟 CMD
命令类似,区别是 ENTRYPOINT
命令不会被 docker run
命令后的指令覆盖,CMD会被覆盖。
ADD
- ADD
<src>
...<dest>
- ADD "
<src>
"..."<dest>
"- ADD包含类似tar的解压功能
COPY
- COPY
<src>...<dest>
- COPY"
<src>
"..."<dest>
"- 如果单纯的复制文件,Docker推荐使用COPY
COPY的<src>
只能是本地文件,其他用法一致
VOLUME
设置数据卷
VOLUME ["/data"]
WORKDIR /path/to/workdir
设置工作目录
ENV
设置环境变量
ENV<key><value>
ENV<key>=<value>...
USER
指定为 什么样的用户去运行
USER daemon
ONBUILD [INSTRUCTION]
镜像触发器 当一个镜像被其他镜像作为基础镜像时执行 会在构建过程中插入指令 (PS:假设当前为镜像A,镜像B把镜像A设为基础镜像,在镜像B中构建镜像A中的ONBUILD命令执行才会生效)