基于Dockerfile构建
Dockerfile指令讲解
FROM:改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。尽量使用官方的image作为base image,因为这样比较安全。
scratch:制作base image
centes:使用base image制作image
centos 7:使用指定版本的base image制作image
LABEL:定义image的相关信息
version:指定版本
description:描述信息
MAINTAINER:指定作者;注意:Dockerfile中使用"#"来表示注释行;LABEL会继承基础镜像种的LABEL,如遇到key相同,则值覆盖。
RUN:运行一个指定的命令,并创建新的镜像层;为了美观与合理维护,能合并的指令尽量合并。
CMD:设置容器启动后默认执行的命令和参数;如果docker run指定了其他命令,则CMD会被忽略掉,如果定义了多个CMD,则只有最后一个CMD会执行。
ENTRYPOINT:设置容器启动时运行的命令,这里面的内容一定会执行,并且ENTRYPOINT支持反射运行方式来运行命令。
命令格式:CMD executable param1
反射格式:CMD ["executable","param1","param2"]
WORKDIR:设定当前工作目录,类似linux下面的cd;注意:如果指定的工作目录不存在,则会自动创建该目录;尽量不要用RUN cd,而是应该用WORKDIR,并且尽量使用绝对路劲
ADD:添加文件到指定目录,并解压,还可支持URL;
COPY:添加文件到指定目录,仅添加;
ENV:设定环境变量;尽量使用ENV,这样方便维护。
EXPOSE:暴露一个指定端口
示例
yum -y install gcc* gcc-*
mkdir -p /docker
touch /docker/hello.c
vi /docker/hello.c
#include<stdio.h>
int main()
{
printf("hello docker\n");
}
cd /docker
gcc -static hello.c -o hello
vi /docker/Dockerfile
FROM scratch
ADD hello /
CMD ["/hello"]
docker image build -t name1 .
docker history name1
docker run name1
基于container构建
docker container commit container_name image_name