(三)Docker入门dockerfile构建镜像实战
迪丽瓦拉
2025-05-28 20:14:14
0

3.6 构建java网站镜像

  • 编写 Dockerfile
  • 使用 Maven 或 Gradle 构建 Spring Boot 项目,并将生成的 Jar 文件复制到 Docker 镜像中
  • 使用 Docker 镜像构建命令构建 Docker 镜像
FROM openjdk:11-jre-slim
# 定义环境变量
ENV APP_NAME=my-spring-boot-app \APP_VERSION=1.0.0 \JAVA_OPTS=""# 在容器中创建应用程序目录
RUN mkdir -p /app# 将 Spring Boot 项目的 Jar 文件复制到容器中
COPY target/${APP_NAME}-${APP_VERSION}.jar /app/${APP_NAME}.jar# 声明容器的工作目录
WORKDIR /app# 暴露应用程序端口
EXPOSE 8080# 运行应用程序
CMD ["java", "-jar", "${APP_NAME}.jar", "${JAVA_OPTS}"]

在上面的 Dockerfile 中,我们定义了基于 OpenJDK 11 的 Docker 镜像,设置了一些环境变量,创建了容器中的应用程序目录,并将生成的 Spring Boot Jar 文件复制到容器中。然后,我们声明了容器的工作目录和应用程序端口,并设置了 CMD 指令来运行应用程序。

最后,使用以下命令构建 Docker 镜像:

docker build -t my-spring-boot-app .

其中,. 表示当前目录,my-spring-boot-app 是镜像名称。构建完成后,可以使用以下命令运行容器:

docker run -p 8080:8080 my-spring-boot-app

其中,-p 参数将容器内部的 8080 端口映射到主机上的 8080 端口,my-spring-boot-app 是 Docker 镜像的名称。

3.7 构建redis镜像

构建 Redis 镜像的 Dockerfile 文件示例:

FROM ubuntu:latest# 安装依赖包
RUN apt-get update \&& apt-get install -y gcc make# 下载 Redis 源码并编译安装
WORKDIR /usr/local/src
RUN wget http://download.redis.io/releases/redis-6.2.5.tar.gz \&& tar xzf redis-6.2.5.tar.gz \&& cd redis-6.2.5 \&& make \&& make install# 拷贝 Redis 配置文件
COPY redis.conf /etc/redis.conf# 暴露 Redis 默认端口
EXPOSE 6379# 启动 Redis 服务
CMD ["redis-server", "/etc/redis.conf"]

解释:

使用 FROM ubuntu:latest 作为基础镜像,即使用最新版本的 Ubuntu 镜像。
安装 Redis 的编译依赖包 gcc 和 make。
下载 Redis 源码并解压缩,进入源码目录并编译安装 Redis。
拷贝 Redis 配置文件 redis.conf 到 /etc/redis.conf。
使用 EXPOSE 命令暴露 Redis 默认端口 6379。
使用 CMD 命令启动 Redis 服务,参数为 /etc/redis.conf,即使用 /etc/redis.conf 配置文件启动 Redis。
通过上述 Dockerfile 文件构建 Redis 镜像,命令为:

docker build -t myredis:latest .

构建完成后,使用以下命令启动 Redis 容器:

docker run --name myredis -d -p 6379:6379 myredis:latest

其中,–name 用于指定容器名称,-d 用于指定以后台方式运行容器,-p 用于将容器的端口映射到宿主机的端口上,最后一个参数指定镜像名称。

3.8 部署mysql并初始化

可以通过 Docker 官方提供的 MySQL 镜像来部署 MySQL 数据库,Docker 镜像中的 MySQL 已经预先安装和配置好,我们只需要下载 MySQL 镜像并创建容器即可。

以下是一个示例的 Dockerfile:


FROM mysql:latest# 拷贝初始化脚本到镜像中
COPY init.sql /docker-entrypoint-initdb.d/# 设置环境变量
ENV MYSQL_ROOT_PASSWORD=password
ENV MYSQL_DATABASE=mydatabase
ENV MYSQL_USER=myuser
ENV MYSQL_PASSWORD=mypasswd
ENV LANG zh_CN.UTF-8

以上 Dockerfile 中:

FROM mysql:latest 表示使用官方 MySQL 镜像,并基于该镜像进行扩展。
COPY init.sql /docker-entrypoint-initdb.d/ 表示将我们的初始化 SQL 脚本拷贝到容器内部的 /docker-entrypoint-initdb.d/ 目录下,Docker 在启动容器时会自动执行该目录下的 SQL 脚本。
ENV MYSQL_ROOT_PASSWORD=password 表示设置 MySQL 的 root 用户密码为 password。
ENV MYSQL_DATABASE=mydatabase 表示创建一个名为 mydatabase 的数据库。
ENV MYSQL_USER=myuser 和 ENV MYSQL_PASSWORD=mypasswd 表示创建一个名为 myuser 的用户,并设置其密码为 mypasswd。
在 Dockerfile 所在目录下创建一个名为 init.sql 的文件,文件内容如下:

create database `mydatabase`;
SET character_set_client = utf8;
USE mydatabase;CREATE TABLE IF NOT EXISTS `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`email` varchar(50) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;INSERT INTO `users` (`name`, `email`) VALUES('Alice', 'alice@example.com'),('Bob', 'bob@example.com'),('Charlie', 'charlie@example.com');

以上 SQL 脚本创建了一个名为 mydatabase 的数据库,并在其中创建了一个名为 users 的表,并插入了一些测试数据。

构建 Docker 镜像:

docker build -t my-mysql .

创建并运行容器:

docker run -d --name my-mysql -p 3306:3306 my-mysql

运行以上命令后,MySQL 数据库就已经成功部署并初始化完成了,我们可以使用任意 MySQL 客户端连接到 localhost:3306 来验证数据库是否正常工作,并且可以查看到 mydatabase 数据库和 users 表已经创建成功。

上一篇:es6+数值扩展

下一篇:[算法] 二分查找

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...