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

Docker:自定义镜像

(总结自b站黑马程序员课程)

环环相扣,跳过部分章节和知识点是不可取的。

一、镜像结构

镜像是分层结构,每一层称为一个Layer。

①BaseImage层:包含基本的系统函数库、环境变量、文件系统。

②Entrypoint:入口,是镜像中启动应用的命令。

③中间层:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置。

二、Dockerfile

Dockerfile的本质是一个文件,通过指令描述镜像的构建过程。其第一行必须是From,从一个基础镜像来构建。

基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine。

Dockerfile示例: 

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/


# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

我们首先在Linux中加入tmp目录并且创建一个docker-demo文件:

 cd /tmp/mkdir docker-demo

然后进入到创建docker-demo文件中:

 cd docker-demo

之后将需要的文件和Dockerfile文件本身拖入docker-demo中(使用MobaXterm很方便,文件直接拖入左侧目录即可)。

构建镜像:

 docker build -t javaweb:1.0 .

-t是tag标签,冒号前面是名字,冒号后面是版本。点代表从当前目录构建。

可以使用docker images检查镜像是否构建成功。

运行容器:

docker run --name web -p 8090:8090 -d javaweb:1.0

注意这里的8090是Dockerfile中指定暴露的端口。

也可以通过docker ps检查容器是否运行成功。

根据自己的端口号,课程的访问链接如下:

http://192.168.21.129:8090/hello/count

我们可以发现除了构建java项目以外,构建jdk项目具有通用性。可以使用其他人制作好的镜像,例如:java:8-alpine。更改一下版本号即可。

# 指定基础镜像
FROM java:8-alpine

COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

三、附录

常用Dockerfile指令如下:

http://www.lryc.cn/news/149887.html

相关文章:

  • 【Nginx22】Nginx学习:FastCGI模块(四)错误处理及其它
  • 轮毂电机单位换算-米每秒/转每分
  • 博流RISC-V芯片BL616开发环境搭建
  • Weblogic漏洞(三)之 Weblogic 弱口令、任意文件读取漏洞
  • 15 mysql tiny/meidum/long blob/text 的数据存储
  • 【方案】基于视频与AI智能分析技术的城市轨道交通视频监控建设方案
  • mysql8 修改数据存储位置
  • Qt QSlider样式
  • Redis五大数据类型
  • chatGPT训练过程
  • 原神角色数据分析项目说明文档
  • 【Qt】QML-04:自定义变量(属性)property
  • 基于Cadence Allegro无盘设计操作流程
  • 微信小程序 - 2023年最新版手机号快捷登录详细教程
  • Spring_Bean的自动装配
  • 使用boost::geometry::union_ 合并边界(内、外)- 方案一
  • 面向高速公路车辆切入场景的自动驾驶测试用例生成方法
  • Java:SpringBoot整合SSE(Server-Sent Events)实现后端主动向前端推送数据
  • cmd命令行设置 windows 设置环境变量
  • 基于负载均衡的在线OJ实战项目
  • Opencv手工选择图片区域去水印
  • 《向量数据库》——向量数据库跟大模型是什么关系呢?
  • 通过这 5 项 ChatGPT 创新增强您的见解
  • W5500-EVB-PICO主动PING主机IP检测连通性(十)
  • 解释基本的3D理论
  • C# 练习题
  • 解决Linux报错:Swap file “xxxxxx.swp“ already exists
  • 基于飞桨图学习框架的空间异配性感知图神经网络
  • Springboot整合JWT
  • 如何使用Python和正则表达式处理XML表单数据