docker 官网 contos6.8 Dockerfile
FROM scratch MAINTAINER The CentOS Project <cloud-ops@centos.org> ADD c68-docker.tar.xz / LABEL name="CentOS Base Image" vendor="CentOS" license="GPLv2" build-date="2016-06-02" # Default command CMD ["/bin/bash"]
scratch[skrætʃ],所有镜像的基础镜像,类似于Java Object类。
MAINTAINER,maintainer[meɪnˈteɪnə],译为维护者;作者、邮箱。
LABEL[ˈleɪbl],译为标签;一些说明。
Dockerfile语法
1、每个命令必须大写,且命令后必须有参数,如 FROM scratch,命令FROM大写,后面有参数 scratch
2、指令从上到下顺序执行
3、# 表示注释
4、每条命令都会创建一个镜像层
执行Dockerfile大致流程
1、从基础镜像运行一个容器
2、执行Dockerfile一条指令对容器做出修改,并提交为一个新的镜像层
3、基于新提交的镜像运行一个新容器
4、...
Dockerfile命令简介
FROM 指定基础镜像
MAINTAINER 镜像维护者的姓名和邮箱
RUN 执行一些额外的命令,类比Java 类里的System.out.print();
EXPOSE 暴露的端口号
WORKDIR 工作目录,使用 -it 进入容器后的目录
ENV 设置变量,如ENV MY_PATH /usr/mytest,WORKDIR $MY_PATH
COPY 复制宿主机目录下的文件到镜像
ADD 复制宿主机目录下的文件到镜像,并自动处理url和压缩包解压
VOLUME 指定容器卷
CMD 指定容器启动时要运行的命令;可以有多个CMD命令,但只有最后一个生效;CMD会被docker run之后的参数替换
ENTRYPOINT 指定容器启动时要运行的命令;docker run之后的参数不会被替换,并追加行为
ONBUILD 构建子镜像时,父镜像的onbuild会被触发
修改官方 centos:7
以精减版的centos为基础镜像,通过Dockerfile自定义一个centos,修改工作目录为/tmp,安装vim,安装ifconfig
1、编写Dockerfile
FROM centos:7 MAINTAINER Prince <zhangrunwei@aliyun.com> ENV my_work_dir /tmp WORKDIR $my_work_dir RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo "----------------successful----------------" CMD /bin/bash
2、构建新镜像
docker build -f Dockerfile -t centos:myself .
末尾的点不可少
3、查看镜像历史
docker history 镜像ID
CMD会被docker run之后的参数替换
docker下载的tomcat的DockerFile文件有以下内容:
ENV CATALINA_HOME /usr/local/tomcat // 指定一个变量 ENV PATH $CATALINA_HOME/bin:$PATH // 指定tomcat的可执行程序目录 RUN mkdir -p "$CATALINA_HOME" // 创建目录 WORKDIR $CATALINA_HOME // 指定工作目录 EXPOSE 8080 // 指定端口号 CMD ["catalina.sh", "run"] // 运行脚本,来启动tomcat
运行docker run -it -p 8888:8080 tomcat:7.0 ls -l
1、ls -l命令会替换CMD ["catalina.sh", "run"],所以tomcat并没有执行启动脚本
2、只对工作目录执行了ls -l
ENTRYPOINT 指定容器启动时要运行的命令;docker run之后的参数不会被替换,并追加行为
1、Dockerfile
FROM centos:7 RUN yum -y install curl CMD ["curl", "-s", "http://ip.cn"]
linux命令行执行 curl www.baidu.com ,命令行返回form表单
浏览器输入 http://ip.cn ,会返回自己的ip
2、docker build -f ./Dockerfile -t centos:my .
3、docker run centos:my // 会返回自己的ip
4、docker run contos:my -i // 添加参数-i,还要求返回报文头
报错,原因,-i 替换了 ["curl", "-s", "http://ip.cn"],而-i只是一个参数并不是完整的命令。
修改方案:
修改Dockerfile的CMD为ENTRYPOINT
ONBUILD示例
1、Dockerfile文件
FROM centos:7 ONBUILD RUN echo "----------------father image onbuild----------------"
2、docker build -f ./Dockerfile -t centos:father .
3、Dockerfile文件
FROM centos:father RUN echo "----------------son image onbuild----------------"
4、docker build -f ./Dockerfile -t centos:son . // 构建子容器时,父容器的onbuild会执行
push/pull镜像之阿里云
1、访问dev.aliyun.com,登陆用户名:prince_chuang
2、创建镜像仓库后点击管理,看到操作指南
登录阿里云Docker Registry docker login --username=prince_chuang registry.cn-hangzhou.aliyuncs.com 设置镜像的版本号 docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/zhangrunwei/test:[镜像版本号] 推送镜像到阿里 docker push registry.cn-hangzhou.aliyuncs.com/zhangrunwei/test:[镜像版本号]
3、下载镜像
docker pull registry.cn-hangzhou.aliyuncs.com/zhangrunwei/test:[镜像版本号]