SpringBoot如何接入docker的例子

一,Docker简介

Docker 是一个开源的应用容器引擎,基于 Go 语言开发并遵循 Apache 2.0 协议开源。它通过操作系统层级的虚拟化技术(如 namespaces 和 cgroups)实现资源隔离与安全保障,因此它和传统的虚拟机方式不同,它能够更高效地利用系统资源。Docker 可以将应用程序及其依赖项打包成轻量级、可移植的容器,这些容器可以在任何支持 Linux 的系统上运行;

Docker 的主要优势在于其能够简化应用的部署和管理过程。开发者可以将应用打包到一个镜像中,并通过 Docker 容器引擎快速地在不同环境中进行部署,从而实现“一次构建,到处运行”的目标,此外,Docker 还提供了强大的隔离性,使得各个容器之间互不影响,提高了系统的稳定性和安全性;

Docker 不仅适用于单一应用的部署,还支持复杂的微服务架构,通过 Docker Compose 等工具可以方便地管理和编排多个容器。这种灵活性和高效性使 Docker 成为了现代软件开发和运维中的重要工具;

总之,Docker 是一种轻量级的虚拟化技术,通过容器化的方式极大地简化了应用的创建、
部署和管理过程,是现代云计算和 DevOps 工具链的重要组成部分;

Docker 的主要组件包括:
1,Docker Client:客户端,用户与 Docker Daemon 交互的接口。
2,Docker Daemon:守护进程,运行于主机上,处理 Docker Client 发送的请求。
3,Docker Image:镜像,用于创建 Docker 容器的模板,Docker 镜像是只读的,通过 C/C++ 中的联合文件系统被用于存储层。
4,Docker Container:容器,是镜像的运行实体,容器中可以运行一个或多个应用。
5,Docker Registry:仓库,用于存放 Docker 镜像的地方,公共的 Docker Registry 是 Docker Hub。
 

二,Docker的下载和安装

官方rpm包下载地址为
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

阿里镜像下载地址为
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/

对于Windows系统,‌安装Docker的步骤如下:‌
 1,启用Hyper-V和容器特性:‌首先,‌需要在Windows功能中启用Hyper-V和容器特性。‌这可以通过右键点击“此电脑”,‌选择“管理”,‌然后点击“服务和应用程序”下的“服务”来完成。‌

 2,下载安装Docker Desktop:‌访问Docker官网下载Docker Desktop的安装包,‌并按照引导提示完成安装。‌在安装过程中,‌可以选择是否创建桌面快捷方式,‌以便快速访问Docker。‌

 3,使用阿里云镜像加速:‌为了加速Docker的下载速度,‌可以注册阿里云账号,‌进入管理控制台复制加速器地址,‌然后在Docker设置中找到Docker Engine,‌将复制的加速器地址填入,‌以加快镜像的下载速度。‌

 4,启动Docker:‌安装完成后,‌打开Docker图标启动Docker。‌可以通过输入docker -v命令来查看Docker的版本,‌确认安装成功。‌
 

对于Linux系统,‌如CentOS或Ubuntu,‌安装Docker的步骤如下:‌
卸载旧的Docker版本:‌如果之前已经安装过Docker,‌需要先卸载旧的版本。‌
sudo apt-get update
sudo apt-get --purge remove docker docker-engine docker.io  containerd runc

sudo apt-get update

sudo apt-get install -y lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg  | sudo apt-key add -

sudo sh -c 'echo "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list '

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io 

sudo systemctl start docker
sudo systemctl enable docker
 

配置用户组(可选)
将当前用户添加到docker组,以避免每次使用Docker时都需要输入sudo密码
sudo usermod -aG docker $USER
source ~/.bashrc  # 或者重启终端会话

三,SpringBoot如何接入docker的例子

Spring Boot 接入 Docker 的基本步骤如下:

1,创建一个 Spring Boot 应用。

2,编写 Dockerfile 文件来定制 Docker 镜像。

3,使用 docker build 命令来创建 Docker 镜像。

4,使用 docker run 命令来运行 Docker 容器。

以下是一个简单的例子:

四,编写 Dockerfile 文件

在 Spring Boot 项目中的 Dockerfile 通常放置在项目的根目录下,名称 Dockerfile 是固定的,不能更改。这是因为当你构建 Docker 镜像时,Docker 会在当前目录寻找名为 Dockerfile 的文件作为构建上下文。

# 基础镜像使用 Java
FROM openjdk:8-jdk-alpine
 
# 指定维护者信息
LABEL maintainer="yourname@example.com"
 
# 在镜像中创建一个目录存放我们的应用
VOLUME /tmp
 
# 将打包好的 jar 文件添加到镜像中并更名为 app.jar
ADD target/your-app.jar app.jar
 
# 暴露容器内的端口给外部访问
EXPOSE 8080
 
# 定义环境变量
ENV JAVA_OPTS=""
 
# 在容器启动时运行 jar 包
ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar


#或者如下:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/spring-boot-application.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
 

这个 Dockerfile 做了以下几件事
(1)从 Docker Hub 的 openjdk:8-jdk-alpine 镜像开始构建。
(2)创建一个临时文件卷 /tmp。
(3)将编译后的 Spring Boot jar 包添加到镜像中并重命名为 app.jar。
(4)暴露 8080 端口。
(5)设置容器启动时执行的命令。

五,构建镜像和运行容器

接下来,在命令行中运行以下命令来构建和运行 Docker 容器:
# 构建镜像,在包含 Dockerfile 的目录中,根据 Dockerfile 内容构建镜像
docker build -t spring-boot-app .

# 运行容器,用镜像spring-boot-app运行容器,主机8080端口映射到容器8080端口
docker run -p 8080:8080 spring-boot-app

这将创建一个名为 spring-boot-app 的 Docker 镜像,并运行一个新容器,将容器的 8080 端口映射到主机的 8080 端口。

六,附加Docker部分知识

1,docker build命令详解
docker build 命令用于从 Dockerfile 构建 Docker 镜像,
docker build 命令通过读取 Dockerfile 中定义的指令,逐步构建镜像,并将最终结果保存到本地镜像库中;

docker build [OPTIONS] PATH | URL | -

说明:
(1)PATH: 包含 Dockerfile 的目录路径或 .(即当前目录)。
(2)URL: 指向包含 Dockerfile 的远程存储库地址(如 Git 仓库)。
(3)-: 从标准输入读取 Dockerfile。

常用选项:
(1)-t, --tag: 为构建的镜像指定名称和标签。
(2)-f, --file: 指定 Dockerfile 的路径(默认是 PATH 下的 Dockerfile)。
(3)--build-arg: 设置构建参数。
(4)--no-cache: 不使用缓存层构建镜像。
(5)--rm: 构建成功后删除中间容器(默认开启)。
(6)--force-rm: 无论构建成功与否,一律删除中间容器。
(7)--pull: 始终尝试从注册表拉取最新的基础镜像。
更多详细选项说明自行搜索百度

docker build例子:
(1)docker build -t myimage:latest .
这会从当前目录读取 Dockerfile 并构建一个名为 myimage:latest 的镜像。
(2)docker build -f /path/to/Dockerfile -t myimage:latest .
指定 Dockerfile 路径,这会从 /path/to/ 目录读取 Dockerfile 并构建一个名为 myimage:latest 的镜像。
(3)docker build --build-arg HTTP_PROXY=http://proxy.example.com -t myimage:latest .
设置构建参数,这会在构建过程中使用 HTTP_PROXY 环境变量,在使用--build-arg选项时必须确保这些参数在Dockerfile中被正确引用,否则会导致构建失败;
(4)docker build --no-cache -t myimage:latest .
不使用缓存层构建镜像,这会在构建镜像时忽略所有缓存层,确保每一步都重新执行
(5)docker build https://github.com/your-repo.git
 使用指定URL的Dockerfile构建镜像
 

2,docker images命令详解
docker images 命令用于列出本地的 Docker 镜像,通过 docker images 命令,用户可以查看所有已下载或构建的 Docker 镜像的详细信息,如仓库名称、标签、镜像 ID、创建时间和大小;

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS 说明:
(1)-a, --all: 显示所有镜像(包括中间层镜像)。
(2)--digests: 显示镜像的摘要信息。
(3)-f, --filter: 过滤输出,基于提供的条件。
(4)--format: 使用 Go 模板格式化输出。
(5)--no-trunc: 显示完整的镜像 ID。
(6)-q, --quiet: 只显示镜像 ID。

docker images例子:
(1)docker images
列出所有本地镜像
(2)docker images --digests
列出带有摘要信息的镜像
(3)docker images --all
列出所有镜像(包括中间层镜像)
(4)docker images --quiet
只显示镜像 ID
(5)docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}"
使用自定义格式输出
 

3,docker run命令详解
docker run 命令用于创建并启动一个新的容器,命令格式如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

在这个语法中,“OPTIONS”包含了一些参数,用于配置和控制容器的各种方面。
“IMAGE”是要使用的Docker镜像,“COMMAND”是在容器内执行的命令,“ARG”是该命令的参数;

常用OPTIONS参数说明:
(1)-d: 后台运行容器并返回容器 ID。
(2)-it: 交互式运行容器,分配一个伪终端。
(3)--name: 给容器指定一个名称。
(4)-p: 端口映射,格式为 host_port:container_port。
(5)-v: 挂载卷,格式为 host_dir:container_dir。
(6)--rm: 容器停止后自动删除容器。
(7)--env 或 -e: 设置环境变量。
(8)--network: 指定容器的网络模式。
(9)--restart: 容器的重启策略(如 no、on-failure、always、unless-stopped)。
(10)-u: 指定用户。

docker run例子:
(1)docker run ubuntu
拉取 ubuntu 镜像并在前台启动一个容器。
(2)docker run -d ubuntu
后台运行容器,在后台运行 ubuntu 容器并返回容器 ID
(3)docker run -it ubuntu /bin/bash
交互式运行并分配终端,交互式运行并分配终端,以交互模式运行 ubuntu 容器,并启动一个 Bash shell;
(4)docker run --name my_container ubuntu
指定容器名称,运行一个 ubuntu 容器,并将其命名为 my_container
(5)docker run -p 8080:80 nginx
端口映射,将本地主机的 8080 端口映射到容器内的 80 端口,运行 nginx 容器
(6)docker run -v /host/data:/container/data ubuntu
挂载卷,将主机的 /host/data 目录挂载到容器内的 /container/data 目录
(7)docker run -e MY_ENV_VAR=my_value ubuntu
设置环境变量,设置环境变量 MY_ENV_VAR 的值为 my_value,运行 ubuntu 容器
(8)docker run --network host nginx
使用网络模式,使用主机的网络模式运行 nginx 容器
(9)docker run --restart always nginx
指定重启策略,设置容器的重启策略为 always,即使容器停止也会自动重启
(10)docker run -u user123 ubuntu
指定用户,以 user123 用户运行 ubuntu 容器
(11)docker run -d -p 8080:80 -v /host/data:/data --name webserver nginx
 组合多个选项,后台运行一个命名为 webserver 的 nginx 容器,将主机的 8080 端口映射到容器的 80 端口,并将主机的 /host/data 目录挂载到容器的 /data 目录。
 

4,在Java中,启动命令参数 -Djava.security.egd 用于配置JVM的SecureRandom类
SecureRandom类是Java中用于生成可靠随机数的核心组件,在许多应用程序中广泛使用;

使用 -Djava.security.egd =file:/dev/./urandom 这一参数,可以将Unix-like操作系统上的
/dev/urandom设备作为熵源,这样可以避免因系统熵不足而导致的随机数生成阻塞问题。

总之 -Djava.security.egd 参数的主要作用是为SecureRandom类提供一个外部熵源,
从而增强随机数生成的可靠性和安全性。这在开发对随机数生成有严格要求的应用程序时非常有用。
 

当然Docker还有很多方面操作,这里仅整理比较常用的知识,欢迎拍砖讨论...

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值