浙江住房和城乡建设部网站,二手交易网站建设内容策划,贴吧广告投放,试用平台网站建设文章目录 一、前提内容1、docker 环境准备2、docker-compose 环境准备3、流程说明 二、打包 docker 镜像1、基础镜像2、国内镜像源3、基础的dockerfile4、打包镜像 四、构建运行1、docker 部分2、docker-compose 部分2.1、构建docker-compose.yml2.1.1、同目录构建2.1.2、利用镜… 文章目录 一、前提内容1、docker 环境准备2、docker-compose 环境准备3、流程说明 二、打包 docker 镜像1、基础镜像2、国内镜像源3、基础的dockerfile4、打包镜像 四、构建运行1、docker 部分2、docker-compose 部分2.1、构建docker-compose.yml2.1.1、同目录构建2.1.2、利用镜像构造 2.2、使用参数赋值示例应用代码 2.3、相关命令 3、进阶的配置4、进入容器 一、前提内容 linux 查询版本 通常cat /etc/os-release 1、docker 环境准备 需要构造一个docker环境 Tips: 截止文档生成版本为 27.5.0 这里基于rhel 来说明 官方部署参考网站
0、首次安装 设置 Docker 存储库 sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo1、基础目录
mkdir /opt/docker2、下载基础包 这里是基于 2025.01.16 为截止日期的最新版本docker wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/containerd.io-1.7.25-3.1.el9.x86_64.rpm
wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/docker-ce-27.5.0-1.el9.x86_64.rpm
wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/docker-ce-cli-27.5.0-1.el9.x86_64.rpm
wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/docker-buildx-plugin-0.19.3-1.el9.x86_64.rpm
wget https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/docker-compose-plugin-2.32.3-1.el9.x86_64.rpm3、安装部署
sudo dnf install ./containerd.io-1.7.25-3.1.el9.x86_64.rpm \./docker-ce-27.5.0-1.el9.x86_64.rpm \./docker-ce-cli-27.5.0-1.el9.x86_64.rpm \./docker-buildx-plugin-0.19.3-1.el9.x86_64.rpm \./docker-compose-plugin-2.32.3-1.el9.x86_64.rpm2、docker-compose 环境准备 构造docker-compose 环境,通常默认安装了上一步的docker这里以插件形式安装 Tips: 截止文档生成版本为 2.32.4 这里基于rhel 来说明 https://docs.docker.com/engine/install/rhel/#install-from-a-package)
0、首次安装 运行命令安装插件即可如图1-1 sudo yum install docker-compose-plugin图1-1)
1、验证安装
docker compose version3、流程说明 Docker 用于管理单个容器而 Docker Compose 用于管理多个容器应用程序 整体上 这里直接使用docker 和 docker-compose 表面流程上是一致的)
1、将应用打包成镜像 — 2、构建容器复用容器 — 运行镜像
二、打包 docker 镜像
1、基础镜像 官方镜像参考Explore Docker’s Container Image Repository | Docker Hub [1、基于openJdk的镜像参考](eclipse-temurin - Official Image | Docker Hub)
[2、基于node.js的镜像参考](node - Official Image | Docker Hub)
[3、基于python的镜像参考](python - Official Image | Docker Hub)
2、国内镜像源
1、增加镜像源 主要是为了避免引用基础镜像失败。 默认安装的docker直接编辑这个即可 sudo vim /etc/docker/daemon.json填入内容 询问 copilot 得到的答案- -截至2025.01.17 简单解析下 log-driver 日志驱动程序这里设置为 json-file表示使用 JSON 文件格式记录日志 log-opts 配置日志驱动程序的选项 labels用于标记日志文件这里设置为 servicename。max-size设置单个日志文件的最大大小这里设置为 500m即 500 MB。max-file设置最大的日志文件数量这里设置为 3意味着 Docker 将保留最多三个日志文件超出的日志文件将被删除或重写。 {builder: {gc: {defaultKeepStorage: 20GB,enabled: true}},experimental: false,registry-mirrors: [https://docker.hpcloud.cloud,https://docker.m.daocloud.io,https://docker.unsee.tech,https://docker.1panel.live,http://mirrors.ustc.edu.cn,https://docker.chenby.cn,http://mirror.azure.cn,https://dockerpull.org,https://dockerhub.icu,https://hub.rat.dev,https://proxy.1panel.live,https://docker.1panel.top,https://docker.m.daocloud.io,https://docker.1ms.run,https://docker.ketches.cn],log-driver: json-file, log-opts: {labels: servicename, max-size: 500m, max-file: 3}
}重启生效
sudo systemctl daemon-reload #重启daemon进程
sudo systemctl restart docker #重启docker3、基础的dockerfile 这里通常目录结构为 workplace |____ Dockerfile 下文的示例DockerFile |____ target编译的目录通常这里放需要打包的jar即可 Tips: 这里之前建议执行下属命令避免找不到基础镜像 docker pull eclipse-temurin:8# 使用官方的OpenJDK镜像作为基础镜像
FROM eclipse-temurin:8# 设置工作目录
WORKDIR /opt/app# 将构建的Spring Boot应用的JAR文件复制到容器中
COPY target/*.jar /opt/app.jar# 暴露应用程序运行的端口
EXPOSE 8080# 启动Spring Boot应用
ENTRYPOINT [java, -jar, app.jar]4、打包镜像 镜像名称: java-app 命令执行应该位于 第2点 的目录接口下执行 # 构建镜像
docker build -t java-app .# 检查镜像
docker images | grep gateway# 删除镜像
docker rmi java-app
# 如果镜像 REPOSITORY 一致可以增加tag
# eg: docker rmi java-app:laster四、构建运行
1、docker 部分 docker run这是 Docker 的基本命令用于运行一个新的容器。 -it这两个选项组合在一起意味着以交互模式运行容器并且将终端输入连接到容器内部。-i 表示终端输入-t 表示终端模拟器。 -d : 这个选项表示以后台模式运行容器即容器在后台运行不会占用终端 -p 8080:8080这个选项用于端口映射。8080:8080 表示将主机的 8080 端口映射到容器的 8080 端口。这样主机上访问的 8080 端口就会连接到容器内的应用程序。 java-app这是您要运行的 Docker 镜像的名称。这个镜像应该包含已经配置好的 Java 应用程序。 # 后台启动
docker run -it -d -p 8080:8080 java-app
# 关闭
# 获取镜像id 假设获取到 0246cd97ff15
docker ps | grep demo | awk {print $1}
# 关闭镜像
docker stop 0246cd97ff152、docker-compose 部分
2.1、构建docker-compose.yml
2.1.1、同目录构建 workplace |____ Dockerfile 下文的示例DockerFile |____ ./demo.jar编译的目录通常这里放需要打包的jar即可 |____ docker-compose.yml 属性解析 demo-endpoint : 服务名称【按需变更】 build 构建镜像的配置选项 container_name 容器名称 ports : 这个字段定义了端口映射。将主机的 8080 端口映射到容器的 8080 端口 version: 3
services:demo-endpoint:container_name: demo-testbuild:context: .dockerfile: Dockerfileports:- 8080:80802.1.2、利用镜像构造 workplace |____ Dockerfile 下文的示例DockerFile |____ docker-compose.yml Tips: 作这一步可以先将镜像打包到docker再使用镜像即可 基于此这里示例一个 REPOSITORY TAG IMAGE ID CREATED SIZE
demo 1.10 5251d5eba4a8 4 days ago 544MB属性解析 这里与上述差别在于使用 image 来替换 build 及其子属性 version: 3
services:demo-endpoint:container_name: demo-testimage: demo:1.10ports:- 8080:80802.2、使用参数赋值 workplace |____ Dockerfile 下文的示例DockerFile |____ docker-compose.yml |____ .env会自动读取配置默认配置 |____ env_file/*.env 若需要可以继续放置更多配置 Tips.env 主要用来设置全局变量,其余文件用于影响应用参数 .env文件 同是环境变量仅这个可以影响docker-compose内容值 CONTAINER_NAMEdemo-testimage.env 文件
TESTtest one 2
HIhi one 2例子利用 2.1.2 来作参考 新增属性 env_file 用来设置参数变量 version: 3
services:demo-endpoint:container_name: ${CONTAINER_NAME}image: ${IMAGE_NAME}:${IMAGE_TAG}ports:- 8080:8080env_file:- /env_file/image.env示例应用代码
SpringBootApplication
RestController
public class DemoApplication {Value(${HI:hi})private String hi;Value(${TEST:test})private String test;public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}GetMapping(/hello)public String hello(RequestParam(value name, defaultValue World) String name) {return String.format(Hello %s! {%s},{%s}, name,hi,test);}
}2.3、相关命令
后台挂载启动若是更新了参数再次运行可更新 dockcer compose up -d
关闭卸载应用 dockcer compose down
指定配置文件运行主要用于区分环境
若存在多个环境配置可以根据需要通过 -f 指定配置文件来启动应用
docker compose -f docker-compose-dev.yml up -d
3、进阶的配置
1、 volumes 主机上的目录或文件挂载到容器内的目录。这样可以在容器内访问主机上的数据。 这里举例可以将运作的日志放到主机目录上 volumes: - /opt/logs:/opt/logs2、 working_dir 字段指定了容器内的工作目录通常打包镜像时已经配置 正如上文的WORKDIR /opt/app 3、 entrypoint : 字段指定了容器启动时运行的命令 正如上文的 ENTRYPOINT [java, -jar, app.jar] 4、network : 如果不指定网络Docker Compose 会自动创建一个默认网络并将所有服务连接到该网络 这里主要是基于是否需要网络分离 5、资源配置 下文提及的 Swarm 模式通过 docker info 检查若 Swarm 为active则是属于该模式 Swarm模式
version: 3
services:demo:deploy:resources:limits:cpus: 0.50 # 限制 CPU 使用率为 50%memory: 512M # 限制内存使用为 512MBreservations:cpus: 0.25 # 保留 CPU 使用率为 25%memory: 256M # 保留内存使用为 256MB非Swarm模式
version: 3
services:demo:mem_limit: 512m # 限制内存使用为 512MBcpus: 0.5 # 限制 CPU 使用率为 50%4、进入容器
docker exec -it demo bash