docker 简要笔记
文章目录
- 一、前提内容
- 1、docker 环境准备
- 2、docker-compose 环境准备
- 3、流程说明
- 二、打包 docker 镜像
- 1、基础镜像
- 2、国内镜像源
- 3、基础的dockerfile
- 4、打包镜像
- 四、构建运行
- 1、docker 部分
- 2、docker-compose 部分
- 2.1、构建docker-compose.yml
- 2.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.repo
1、基础目录
mkdir /opt/docker
2、下载基础包
这里是基于
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.rpm
3、安装部署
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.rpm
2、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 version
3、流程说明
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 #重启docker
3、基础的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 0246cd97ff15
2、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:8080"
2.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:8080"
2.2、使用参数赋值
workplace
|____ Dockerfile (下文的示例DockerFile)
|____ docker-compose.yml
|____ .env(会自动读取配置,默认配置)
|____ env_file/*.env (若需要,可以继续放置更多配置)
Tips:
.env
主要用来设置全局变量,其余文件用于影响应用参数
.env文件
同是环境变量,仅这个可以影响docker-compose内容值
CONTAINER_NAME=demo-test
image.env 文件
TEST=test one 2
HI=hi one 2
例子利用 2.1.2
来作参考
新增属性
env_file
用来设置参数变量
version: "3"
services:demo-endpoint:container_name: ${CONTAINER_NAME}image: ${IMAGE_NAME}:${IMAGE_TAG}ports:- "8080:8080"env_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/logs
2、 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
相关文章:

docker 简要笔记
文章目录 一、前提内容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、利用镜…...

在Ubuntu上使用Apache+MariaDB安装部署Nextcloud并修改默认存储路径
一、前言 Nextcloud 是一款开源的私有云存储解决方案,允许用户轻松搭建自己的云服务。它不仅支持文件存储和共享,还提供了日历、联系人、任务管理、笔记等丰富的功能。本文将详细介绍如何在 Ubuntu 22.04 LTS 上使用 Apache 和 MariaDB 安装部署 Nextcl…...

【JavaEE】-- 计算机是如何工作的
文章目录 1. 冯诺依曼体系(VonNeumann Architecture)2. CPU 基本工作流程2.1 寄存器(Register)和 内存(RAM)2.2 控制单元 CU(ControlUnit)2.3 指令(Instruction) 3. 操作系统(OperatingSystem)3.1 操作系统的定位3.2 什么是进程/任务(Process…...

政安晨的AI大模型训练实践三:熟悉一下LF训练模型的WebUI
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 目录 启动WebUI 微调模型 LLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。 启动Web…...

基于微信小程序的网上订餐管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

科技快讯 | 理想官宣:正式收费!WeChat 港币钱包拓宽商户网络;百川智能发布深度思考模型Baichuan-M1-preview
理想官宣:正式收费! 1月23日,理想汽车宣布,理想超充站超时占用费正式运营。触发超时占用费的条件为充电结束后15分钟内未将充电枪插回充电桩,收费标准为2元/分钟,单次封顶200元。理想汽车将在充电结束的四个…...

【java数据结构】map和set
【java数据结构】map和set 一、Map和Set的概念以及背景1.1 概念1.2 背景1.3 模型 二、Map2.1 Map说明2.2 Map的常用方法 三、Set3.1 Set说明3.2 Set的常用方法 四、Set和Map的关系 博客最后附有整篇博客的全部代码!!! 一、Map和Set的概念以及…...

飞牛NAS安装过程中的docker源问题
采用CloudFlare进行飞牛NAS的远程访问 【安全免费】无需公网IP、端口号,NAS外网访问新方法_网络存储_什么值得买 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF {"registry-mirrors": ["https://docker.1panel.dev&quo…...

Linux(Centos 7.6)命令详解:dos2unix
1.命令安装 dos2unix 命令默认情况下是没有安装的,如配置yum源,可通过yum安装命令如下: yum install dos2unix dos2unix 有一个对立的命令unix2dos,也需要yum安装,一般使用不到这里不做过多解释,具体参数…...

Linux MySQL离线安装
一、准备工作 1. 下载MySQL安装包 访问MySQL官方网站,选择适合您Linux系统的MySQL版本进行下载。通常推荐下载Generic Linux (glibc 2.12)版本的.tar.gz压缩包,例如mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz。将下载好的安装包拷贝到Linux服务器的某…...

声明,这些内容和我无关
声明,下面这些内容和我无关,不是我写的,买了我不负责答疑,也不负责其他相关。 一下内容都不是我写的,系统自己加上去的,和我无关,我不负责答疑也不负责其他。...

ISO:摄影中的光线敏感度密码
目录 一、ISO 究竟是什么 二、ISO 与光线的关系 (一)低 ISO 在充足光线下的表现 (二)高 ISO 在光线不足时的作用 三、ISO 对画质的影响 (一)低 ISO 带来的优质画质 (二)高 IS…...

长短期记忆网络LSTM
视频链接 1.LSTM与RNN的区别 RNN想把所有信息都记住,不管是有用的信息还是没用的信息,并且有梯度爆炸或者梯度消失的问题 而LSTM设计了一个记忆细胞,具备选择记忆功能,可以选择记忆重要信息,过滤掉噪声信息࿰…...

2. 握手问题python解法——2024年省赛蓝桥杯真题
原题传送门:1.握手问题 - 蓝桥云课 问题描述 小蓝组织了一场算法交流会议,总共有 50人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。但有 7 个人,…...

poi在word中打开本地文件
poi版本 5.2.0 方法1:使用XWPFFieldRun(推荐) 比如打开当前相对路径的aaaaa.docx XWPFFieldRun run paragraph.createFieldRun();CTRPr ctrPr run.getCTR().addNewRPr();CTFonts font ctrPr.addNewRFonts();// 设置字体font.setAscii(&quo…...

国产编辑器EverEdit - 输出窗口
1 输出窗口 1.1 应用场景 输出窗口可以显示用户执行某些操作的结果,主要包括: 查找类:查找全部,筛选等待操作,可以把查找结果打印到输出窗口中; 程序类:在执行外部程序时(如:命令窗…...

整数的个数(信息学奥赛一本通-1067)
【题目描述】 给定k(1<k<100)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。 【输入】 输入有两行:第一行包含一个正整数k,第二行包含k个正整数…...

ios swift画中画技术尝试
继上篇:iOS swift 后台运行应用尝试失败-CSDN博客 为什么想到画中画,起初是看到后台模式里有一个picture in picture,去了解了后发现这个就是小窗口视频播放,方便用户执行多任务。看小窗口视频的同时,可以作其他的事情…...

MyBatis 写法
MyBatis 高效使用技巧 常见 MyBatis 使用技巧,这些技巧有助于简化数据库操作,提高开发效率,并增强系统的性能。 1. 动态 SQL 动态 SQL 让开发者能够依据参数灵活地构建 SQL 语句,避免了手动拼接字符串带来的复杂性和错误风险。…...

Three城市引擎地图插件Geo-3d
一、简介 基于Three开发,为Three 3D场景提供GIS能力和城市底座渲染能力。支持Web墨卡托、WGS84、GCJ02等坐标系,支持坐标转换,支持影像、地形、geojson建筑、道路,植被等渲染。支持自定义主题。 二、效果 三、代码 //插件初始化…...

【贪心算法】洛谷P1106 - 删数问题
2025 - 01 - 22 - 第 46 篇 【洛谷】贪心算法题单 - 【贪心算法】 - 【学习笔记】 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 目录 文章目录 目录P1106 删数问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路代码 P1106 删数问题 题目描述 键盘输入一个高…...

WPS计算机二级•幻灯片的页面布局
听说这是目录哦 设置PPT页面尺寸🖼️PPT母版怎么用🎨巧用PPT母版统一修改 字体颜色与背景🎡如何快速更改应用 幻灯片中的不同母版👑能量站😚 设置PPT页面尺寸🖼️ 在制作PPT时,我们需要先选定一…...

从入门到精通:HttpClient深度剖析与实战指南
一、引言 1.1 背景引入 在当今数字化时代,网络编程已成为软件开发中不可或缺的一部分。而 HTTP 通信作为网络编程的核心,承担着客户端与服务器之间数据传输的重任。无论是 Web 应用、移动应用,还是分布式系统,HTTP 协议都扮演着…...

IoTDB 2025 春节值班与祝福
2025 春节快乐 瑞蛇迎吉庆,祥光映华年,2025 春节已近在眼前。社区祝福 IoTDB 的所有关注者、支持者、使用者 2025 新年快乐,“蛇”来运转! IoTDB 团队的春节放假时间为 2025 年 1 月 27 日至 2 月 4 日,1 月 25 日、26…...

Java 大视界 -- Java 大数据中的隐私增强技术全景解析(64)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

【2024年华为OD机试】 (A卷,100分)- 整理扑克牌(JavaScriptJava PythonC/C++)
一、问题描述 题目描述 给定一组数字,表示扑克牌的牌面数字,忽略扑克牌的花色,请按如下规则对这一组扑克牌进行整理: 步骤1:分组形成组合牌 炸弹:当牌面数字相同张数大于等于4时。葫芦:3张相同牌面数字 + 2张相同牌面数字,且3张牌与2张牌不相同。三张:3张相同牌面数…...

周末总结(2024/01/25)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...

Apache Flink 概述学习笔记
一、引言 在大数据处理领域,Apache Flink 是一个极具影响力的开源流批一体化计算框架,它以其独特的架构和强大的功能,为大规模数据处理提供了高效、灵活的解决方案。 二、基本概念 Flink 是什么:Flink 是一个分布式流批处理框架…...

双足机器人开源项目
双足机器人(也称为人形机器人或仿人机器人)是一个复杂的领域,涉及机械设计、电子工程、控制理论、计算机视觉等多个学科。对于想要探索或开发双足机器人的开发者来说,有许多开源项目可以提供帮助。这些项目通常包括硬件设计文件、…...

Linux 部署 Java 项目:Tomcat、Redis、MySQL 教程
在 Linux 服务器上部署 Java 项目通常需要配置应用服务器(如 Tomcat)、数据库(如 MySQL)和缓存服务器(如 Redis)。本文将详细介绍如何在 Linux 环境中部署一个 Java 项目,涵盖 Tomcat、Redis 和…...