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 镜像的名称。
构建 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 用于将容器的端口映射到宿主机的端口上,最后一个参数指定镜像名称。
可以通过 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', '[email protected]'),
('Bob', '[email protected]'),
('Charlie', '[email protected]');
以上 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 表已经创建成功。