当前位置: 首页 > news >正文

Dockerfile的学习与实践

Dockerfile通过一系列的命令和参数,构建自定义镜像。一般步骤如下:

在这里插入图片描述

一. 常用命令说明

基础命令具体命令描述例子
FROMFROM[基础镜像:版本号]基于指定的基础镜像构建自定义镜像FROM eclipse-temurin:17-jdk-alpine
RUNRUN构建容器需要运行的命令,在执行 docker build的时候运行 ,支持shell 和 exec两种格式
CMD**shell格式:**CMD <shell 命令>
**EXEC格式:**CMD ["<可执行文件或命令>","<param1>","<param2>",...]
参数格式: CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
构建容器需要运行的命令, 在docker run 时运行只有最后一个才会生效,支持shell 、exec、参数列表三种格式
ENTRYPOINTENTRYPOINT ["<executeable>","<param1>","<param2>",...]构建容器需要运行的命令, 在docker run 时运行只有最后一个才会生效,不会被docker run覆盖,一般和CMD的参数格式配合使用,组合结果会变成<ENTRYPOINT>“<CMD>”
EXPOSEEXPOSE <端口1> [<端口2>...]暴露端口,相当于docker run -p XXX:[端口1],主要是声明一下容器需要哪些端口,易于后续维护
WORKDIRWORKDIR <工作目录路径>指定工作目录,镜像的工作目录就是该指定的目录
ENVENV <key1>=<value1> <key2>=<value2>...相当于定义了个变量,后续的指令可以直接通过这个变量名
ADDADD [--chown=<user>:<group>] <源路径1>... <目标路径>源目录中复制文件或者目录到容器里目标路径,强制将tar的压缩文件解压,不能处理非压缩文件
COPYCOPY [--chown=<user>:<group>] <源路径1>... <目标路径>源目录中复制文件或者目录到容器里目标路径
VOLUMEVOLUME ["<路径1>", "<路径2>"...]将容器指定路径的目录与主机挂载,缺点是无法在直接指定对应的路径要挂载的主机目录,而是会自动生成。看起来不如docker run -v

二. 实践

上述过于枯燥,都是一些基本概念,让我们通过实践进一步加深理解。

1. 基于Dockerfile制作微服务镜像

1.1 准备一个微服务的jar包

这里就不提供了

1.2 编写Dockerfile

Dockerfile和该jar包应该在同一目录下

Dockerfile

#openJDK 基础镜像
FROM eclipse-temurin:17-jdk-alpine
# 作者
MAINTAINER yamu
# 设置工作目录
WORKDIR ./app
# 复制构建好的 JAR 文件到容器
COPY gulimall-gateway-0.0.1-SNAPSHOT.jar app.jar
# 暴露服务端口
EXPOSE 8600
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]

1.3 构建镜像

docker build -t myGateway:1.0 .

在这里插入图片描述

1.4 运行镜像

docker run -p 8600:8600 --net mydata_default mygateway:1.0

运行成功

在这里插入图片描述

2. 基于Dokcerfile构建vim + ifconfig + jdk8 的Centos7

2.1 获取Centos7基本镜像

docker pull centos:7

运行容器

docker run -itd 命令将创建一个在后台运行的容器,同时保持标准输入开放,并分配一个伪终端。这种模式通常用于需要长时间运行的服务容器,同时也需要保留与容器交互的能力

docker run -itd --name centos7 -p 8600:80 --privileged=true centos:7 /usr/sbin/init

进入容器

docker exec -it centos7 /bin/bash

可以看到,当前centos7这个镜像是不具备有这些命令的

在这里插入图片描述

2.2 编写Dockerfile

如果没下载JDK镜像的先去小柒博客 | 开源软件镜像站下载,这里下载的版本是jdk-8u221-linux-x64.tar.gz

Dockerfile

ENV MYPATH /usr/local
WORKDIR $MYPATH
# 安装vim
RUN yum -y install vim
# 安装ifconfig
RUN yum -y install net-tools
# 安装jdk17和lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# 由于下载的是.gz的jdk压缩包,通过ADD可以直接解压到镜像工作目录
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
# 配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATHEXPOSE 80CMD /bin/bash

2.3 构建镜像

docker build -t mycentos7:1.0 .

如果出现了如下报错,应该是centos的yum的源的问题,需要在Dockerfile中加入对阿里云yum镜像源的配置

在这里插入图片描述

修改后的Dokcerfile

FROM centos:7
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置阿里云yum镜像源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum clean all
RUN yum makecache
# 安装vim
RUN yum -y install vim
# 安装ifconfig
RUN yum -y install net-tools
# 安装jdk17和lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# 由于下载的是.gz的jdk压缩包,通过ADD可以直接解压到镜像工作目录
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
# 配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATHEXPOSE 80CMD /bin/bash

在这里插入图片描述

2.4 运行镜像和测试

docker run -itd --name mycentos7 -p 8600:80 --privileged=true  mycentos7:1.0
docker exec -it mycentos7 /bin/bash

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关文章:

  • candence17.4仿真高通滤波与电容隔离电路
  • 坤驰科技QTS4200战鹰(Battle Eagle)系列实时频谱分析记录回放系统
  • 基于大模型的急性结石性胆囊炎全流程预测与诊疗方案研究
  • 【单片机】51单片机学习笔记
  • 使用Charles抓包工具提升API调试与性能优化效率
  • 【数字人开发】Unity+百度智能云平台实现短语音文本识别功能
  • DOM型XSS深度渗透实战
  • DL00215-基于YOLOv11的太阳能电池红外异常检测含数据集
  • 不同AI架构如何选择?单Agent+MCP“与“多Agent“架构对比分析!
  • GDB 简介与使用示例:程序调试从这里开始!
  • python使用pydantic库结合fastApi实现接口参数验证
  • 华为OD机试-最佳植树距离-二分(JAVA 2025A卷)
  • Linux:信号和线程
  • Hive优化详细讲解
  • AI与大数据如何驱动工业品电商平台的智能决策?
  • WRF-Hydro分布式水文模型:洪水预报、水资源管理与规划、生态水文研究、气候变化影响评估、流域综合管理、水电工程规划与运行
  • C++问题:深拷贝和浅拷贝
  • 华为网路设备学习-25(路由器OSPF - 特性专题 二)
  • 【图像处理入门】11. 深度学习初探:从CNN到GAN的视觉智能之旅
  • 超高速10G采集卡
  • 叫什么公子的网站做ppt的/平台推广费用
  • 万网网站 banner图片不显示/关键词林俊杰百度云
  • 怎么看一个网站用什么程序做的/seo优化网站网页教学
  • 人工智能网站应怎么做/深圳做网站的公司有哪些
  • 用模板网站做h5宣传页多少钱/中国重大新闻
  • 百度网页打不开怎么办/大同优化推广