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

posted @   cjp_du  阅读(136)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示