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建筑、道路,植被等渲染。支持自定义主题。 二、效果 三、代码 //插件初始化…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...