(三)Docker入门dockerfile构建镜像实战

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 表已经创建成功。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值