docker镜像构建
一、Dockerfile 概念
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
二、Dockerfile编写规则
1)、每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2)、指令按照顺序, 从上到下, 一条指令就是一层
3)、# 表示注释
4)、每条指令都会创建一个新的镜像层, 并对镜像进行提交
三、Dockerfile指令
1)、FROM: 基础镜像, 当前镜像是基于哪一个镜像
2)、MAINTAINER: 镜像维护者的姓名, 邮箱地址
3)、RUN: 容器构建时需要运行的命令
4)、EXPOSE: 声明容器端口
5)、WORKDIR: 指定在创建容器后, 终端默认登录进来的工作目录
4)、ENV: 用来在构建镜像的过程中设置环境变量
5)、ADD & COPY: 两个指令都是将宿主机的文件拷贝到到镜像中,ADD有拷贝并解压,而COPY没有
6)、VOLUME: 容器数据卷, 用于数据保存和持久化到宿主机
7)、CMD: 指定容器启动时需要运行的命令, dockerfile中可以有多个CMD命令ockerfile中可以有多个CMD命令, 但只有最后一个生效, CMD会被docker run之后的参数替代
8)、ENTRYPOINT: 和CMD一样,都是指定容器启动时要运行的命令,不同之处是, ENTRYPOINT不会被docker run后面的参数代替, 而是追加
四、镜像构建
1)、dockerfile文件: 构建一个tomcat服务镜像
# 基础镜像
FROM centos
# 设置dockerfile的作者
MAINTAINER chenjunpo123
# 拷贝文件到指定目录并解压
ADD apache-tomcat-9.0.35.tar.gz /bankapp
ADD jdk-8u211-linux-x64.tar.gz /bankapp
# 定义环境变量
ENV BASE_DIR /bankapp
# 创建主目录
RUN mkdir -p $BASE_DIR
# 创建tomcat用户
RUN adduser tomcat
# 授权主目录
RUN chown -R tomcat.tomcat $BASE_DIR
# 设置运行用户
USER tomcat
# 设定工作目录
WORKDIR $BASE_DIR
# 设置jdk和tomcat的环境变量
ENV JAVA_HOME /bankapp/jdk1.8.0_251
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /bankapp/apache-tomcat-9.0.35
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
# 设定容器端口
EXPOSE 8080
# 启动并运行tomcat
CMD $BASE_DIR/apache-tomcat-9.0.35/bin/startup.sh && tail -F $BASE_DIR/apache-tomcat-9.0.35/logs/catalina.out
2)、执行构建
docker build -f /opt/test/tct-dockerfile01 -t tomcat9:v1 /opt/test
五、镜像优化
1、优化技巧
1)、选择最精简的基础镜像,如scratch、busybox、apline等
2)、使用多阶段构建镜像
3)、RUN指令串联执行,减少镜像的层数
2、优化好处
1)、减少构建时间
2)、减少磁盘使用量
3)、减少下载时间
4)、提高部署速度
3、案例
1)、优化前
# 基础镜像
FROM centos
# 设置dockerfile的作者
MAINTAINER chenjunpo123
# 拷贝文件到指定目录并解压
ADD apache-tomcat-9.0.35.tar.gz /bankapp
ADD jdk-8u211-linux-x64.tar.gz /bankapp
# 定义环境变量
ENV BASE_DIR /bankapp
# 创建主目录
RUN mkdir -p $BASE_DIR
# 创建tomcat用户
RUN adduser tomcat
# 授权主目录
RUN chown -R tomcat.tomcat $BASE_DIR
# 设置运行用户
USER tomcat
# 设定工作目录
WORKDIR $BASE_DIR
# 设置jdk和tomcat的环境变量
ENV JAVA_HOME /bankapp/jdk1.8.0_251
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /bankapp/apache-tomcat-9.0.35
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
# 设定容器端口
EXPOSE 8080
# 启动并运行tomcat
CMD $BASE_DIR/apache-tomcat-9.0.35/bin/startup.sh && tail -F $BASE_DIR/apache-tomcat-9.0.35/logs/catalina.out
2)、优化一: 多阶段构建
# 基础镜像
FROM centos as base
# 设置dockerfile的作者
MAINTAINER chenjunpo123
# 拷贝文件到指定目录并解压
ADD apache-tomcat-9.0.35.tar.gz /bankapp
ADD jdk-8u211-linux-x64.tar.gz /bankapp
# 定义环境变量
ENV BASE_DIR /bankapp
# 创建主目录
RUN mkdir -p $BASE_DIR
# 创建用户
RUN adduser -u 1001 tomcat && chown -R tomcat.tomcat /bankapp
# 多阶段构建
FROM centos
COPY --from=base /bankapp /bankapp
# 创建主目录
RUN adduser -u 1001 tomcat
# 设置运行用户
USER tomcat
# 设定工作目录
WORKDIR /bankapp
# 设置jdk和tomcat的环境变量
ENV JAVA_HOME /bankapp/jdk1.8.0_211
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /bankapp/apache-tomcat-9.0.35
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
# 设定端口号
EXPOSE 8080
# 启动并运行tomcat
CMD /bankapp/apache-tomcat-9.0.35/bin/startup.sh && tail -F /bankapp/apache-tomcat-9.0.35/logs/catalina.out
3)、优化二: 选择精简基础镜像
# 基础镜像
FROM frolvlad/alpine-glibc as base
# 设置dockerfile的作者
MAINTAINER chenjunpo123
# 拷贝文件到指定目录并解压
ADD apache-tomcat-9.0.35.tar.gz /bankapp
ADD jdk-8u211-linux-x64.tar.gz /bankapp
# 定义环境变量
ENV BASE_DIR /bankapp
# 创建主目录
RUN mkdir -p $BASE_DIR
# 创建用户
RUN adduser -D -u 1001 tomcat && chown -R tomcat.tomcat /bankapp
# 多阶段构建
FROM frolvlad/alpine-glibc
COPY --from=base /bankapp /bankapp
# 创建主目录
RUN adduser -D -u 1001 tomcat
# 设置运行用户
USER tomcat
# 设定工作目录
WORKDIR /bankapp
# 设置jdk和tomcat的环境变量
ENV JAVA_HOME /bankapp/jdk1.8.0_211
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /bankapp/apache-tomcat-9.0.35
ENV PATH $JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH
# 设定端口号
EXPOSE 8080
# 启动并运行tomcat
CMD /bankapp/apache-tomcat-9.0.35/bin/startup.sh && tail -F /bankapp/apache-tomcat-9.0.35/logs/catalina.out
六、镜像管理
通过Harbor企业级镜像平台管理(先创建一个项目test):
1)、初始化登录: docker login -u admin -p Hb12345 192.168.134.129
2)、给镜像打上标签: docker tag 1c991a4911cc 192.168.134.129/test/tomcat9:v1
3)、上传镜像: docker push 192.168.134.129/test/tomcat9:v1
4)、下载镜像: docker pull 192.168.134.129/test/tomcat9:v1
七、镜像运行
1)、运行下载的镜像,启动容器: docker run -idt 192.168.134.129/test/tomcat9:v1
2)、查看容器: docker ps -a
3)、进入容器: docker exec -it 640ae0fa0212 /bin/bash

浙公网安备 33010602011771号