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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7474.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用Redis实现数据缓存

目录 1 为啥要缓存捏? 2 基本流程(以查询商铺信息为例) 3 实现数据库与缓存双写一致 3.1 内存淘汰 3.2 超时剔除(半自动) 3.3 主动更新(手动) 3.3.1 双写方案 3.3.2 读写穿透方案 3.3.…

活动回顾和预告|微软开发者社区 Code Without Barriers 上海站首场活动成功举办!

Code Without Barriers 上海活动回顾 Code Without Barriers:AI & DATA 深入探索人工智能与数据如何变革行业 2025年1月16日,微软开发者社区 Code Without Barriers (CWB)携手 She Rewires 她原力在大中华区的首场活动“AI &…

python爬虫入门(一) - requests库与re库,一个简单的爬虫程序

目录 web请求与requests库 1. web请求 1.1 客户端渲染与服务端渲染 1.2 抓包 1.3 HTTP状态代码 2. requests库 2.1 requests模块的下载 2.2 发送请求头与请求参数 2.3 GET请求与POST请求 GET请求的例子: POST请求的例子: 3. 案例:…

全连接神经网络(前馈神经网络)

目录 一、初步认识全连接神经网络 1、神经元 2、网络结构 3、正向传播算法 二、反向传播算法 1、理解 2、迭代流程 三、构建神经网络模型的基本步骤 四、线性回归神经网络结构 4.1 数据处理 1、数据导入 2、数据归一化处理 3、数据集划分 4、数据形状变换 4.2 模…

【C++初阶】第11课—vector

文章目录 1. 认识vector2. vector的遍历3. vector的构造4. vector常用的接口5. vector的容量6. vector的元素访问7. vector的修改8. vector<vector\<int\>>的使用9. vector的使用10. 模拟实现vector11. 迭代器失效11.1 insert插入数据内部迭代器失效11.2 insert插入…

Linux查看服务器的内外网地址

目录&#xff1a; 1、内网地址2、外网地址3、ping时显示地址与真实不一致 1、内网地址 ifconfig2、外网地址 curl ifconfig.me3、ping时显示地址与真实不一致 原因是dns缓存导致的&#xff0c;ping这种方法也是不准确的&#xff0c;有弊端不建议使用&#xff0c;只适用于测试…

PAT甲级-1024 Palindromic Number

题目 题目大意 一个非回文数&#xff0c;加上它的翻转数所得的和&#xff0c;进行k次&#xff0c;有可能会得到一个回文数。给出一个数n&#xff0c;限制相加次数为k次&#xff0c;如果小于k次就得到回文数&#xff0c;那么输出该回文数和相加的次数&#xff1b;如果进行k次还…

xss靶场

xss-labs下载地址&#xff1a;GitHub - do0dl3/xss-labs: xss 跨站漏洞平台 xss常见触发标签&#xff1a;XSS跨站脚本攻击实例与防御策略-CSDN博客 level-1 首先查看网页的源代码发现get传参的name的值test插入了html里头&#xff0c;还回显了payload的长度。 <!DOCTYPE …

数据结构——实验七·排序

欢迎各位大佬们来到Tubishu的博客&#x1f31f; Tubishu是一名计算机本科生&#xff0c;不定期发送一些在学校的成果供佬们消遣~希望能为佬的编程之路添砖加瓦⭐&#x1f525; 求各位大佬们垂怜&#x1f525;点赞评论一下呗&#x1f525;&#x1f525; 本文专栏 ➡️ 数据结构 …

使用vscode + Roo Code (prev. Roo Cline)+DeepSeek-R1使用一句话需求做了个实验

摘要 使用vscode、Roo Code和deepseek-reasoner进行了一个实验&#xff0c;尝试使用一句话需求来生成小红书封面图片。工具根据需求提供了详细的架构方案&#xff0c;包括技术栈选择、核心模块划分、目录结构建议等。然后&#xff0c;工具自动化地完成了开发和测试&#xff0c;…

vscode环境中用仓颉语言开发时调出覆盖率的方法

在vscode中仓颉语言想得到在idea中利用junit和jacoco的覆盖率&#xff0c;需要如下几个步骤&#xff1a; 1.在vscode中搭建仓颉语言开发环境&#xff1b; 2.在源代码中右键运行[cangjie]coverage. 思路1&#xff1a;编写了测试代码的情况&#xff08;包管理工具&#xff09; …

基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API

前言&#xff1a; 本片博客只讲述了操作的大致流程&#xff0c;具体实现步骤并不标准&#xff0c;请以参考为准。 本文前提&#xff1a;熟悉使用webSocket 如果大家还不了解什么是WebSocket&#xff0c;可以参考我的这篇博客&#xff1a; rWebSocket 详解&#xff1a;全双工…

積分方程與簡單的泛函分析8.具連續對稱核的非齊次第II類弗雷德霍姆積分算子方程

1)def求解具連續對稱核的非齊次第II類弗雷德霍姆積分算子方程 设 是定义在上的连续对称核函数&#xff0c; 非齐次第二类弗雷德霍姆积分算子方程的形式为&#xff1a; &#xff0c; 其中是未知函数&#xff0c;是给定的连续函数&#xff0c;是参数。 2)def其特徵值是否一致…

RV1126画面质量四:GOP改善画质

一&#xff0e; 什么是 GOP GOP 实际上就是两个 I 帧的间隔&#xff0c;比方说分辨率是 1920 * 1080 50 帧&#xff0c;假设 GOP 为 5&#xff0c;那就是大概 2s 插入一个 I 帧。我们再 回顾下&#xff0c;H264/H265 的帧结构。H264/H265 分别分为三种帧类型&#xff1a;I 帧、…

一文了解二叉树的基本概念

文章目录 二叉树1二叉树的定义及其主要特征1.1二叉树的定义1.2二叉树的特点1.3二叉树的五种形态1.4二叉树与度为2的有序树的区别1.5几个特殊的二叉树1.6二叉树的性质 2二叉树的存储结构2.1二叉树的顺序存储2.2二叉树的链式存储 二叉树 1二叉树的定义及其主要特征 1.1二叉树的定…

MAX98357A一款数字脉冲编码调制(PCM)输入D类音频功率放大器

MAX98357A是一款数字脉冲编码调制&#xff08;PCM&#xff09;输入D类音频功率放大器&#xff0c;以下是对其的详细介绍&#xff1a; 一、主要特性 音频性能&#xff1a; 提供D类效率与AB类音频性能。支持高达3.2W&#xff08;4Ω负载&#xff0c;5V供电&#xff09;的输出功率…

nacos(基于docker最详细安装)

1、什么是Spring Cloud Spring Cloud是一系列框架的集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用Spring Boot的开发风格做到一键启动和部署。…

78,【2】BUUCTF WEB .[安洵杯 2019]不是文件

进入靶场 解题过程 点击最下面的英文字即可上传图片 新建一个文本文档 里面内容为空 更改名字为 1,2,3,4,0x4f3a363a2268656c706572223a323a7b733a393a22002a00696676696577223b623a313b733a393a22002a00636f6e666967223b733a353a222f666c6167223b7d)#.png 知道id1&#x…

Git 如何将旧仓库迁移新仓库中,但不显示旧的提交记录

一、异常错误 场景&#xff1a;我想把旧仓库迁移新仓库中&#xff0c;放进去之后&#xff0c;新仓库会显示这个项目之前的所有提交&#xff0c;如何不显示这些旧的提交&#xff1f; 二、原因 我们需要将旧仓库迁移新仓库中&#xff0c;但是又不想在新仓库中显示旧的提交记录…

Mysql索引(学习自用)

目录 一、索引概述 优缺点 二、索引结构 1、索引数据结构 2、索引支持结构 3、B树 4、B树 5、hash索引 6、为啥采用B树索引 三、索引分类 四、索引语法 五、索引性能分析 5.1查看执行频率 5.2慢查询日志 5.3profiling 5.4explain 六、索引使用规则 6.1验证索…