docker 简要笔记

news2025/1/27 22:28:11

文章目录

  • 一、前提内容
    • 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-test
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "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-test
    image: demo:1.10
    ports:
      - "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"  # 限制内存使用为 512MB
        reservations:
          cpus: "0.25"    # 保留 CPU 使用率为 25%
          memory: "256M"  # 保留内存使用为 256MB

非Swarm模式

version: "3"
services:
  demo:
    mem_limit: 512m  # 限制内存使用为 512MB
    cpus: 0.5       # 限制 CPU 使用率为 50%

4、进入容器

docker exec -it demo bash

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 与 Linux 文件权限的对比与转换

Windows和Linux在文件权限管理方面存在显著差异。了解它们的对比和转换方法对于跨平台操作和管理文件非常重要。以下是详细的对比和转换方法: 一、Windows 文件权限 1. 权限类型 Windows使用基于用户和组的权限模型,常见的权限类型包括: 读…

FireFox | Google Chrome | Microsoft Edge 禁用更新 final版

之前的方式要么失效,要么对设备有要求,这次梳理一下对设备、环境几乎没有要求的通用方式,universal & final 版。 1.Firefox 方式 FireFox火狐浏览器企业策略禁止更新_火狐浏览器禁止更新-CSDN博客 这应该是目前最好用的方式。火狐也…

华硕笔记本装win10哪个版本好用分析_华硕笔记本装win10专业版图文教程

华硕笔记本装win10哪个版本好用?华硕笔记本还是建议安装win10专业版。Win分为多个版本,其中家庭版(Home)和专业版(Pro)是用户选择最多的两个版本。win10专业版在功能以及安全性方面有着明显的优势&#xff…

Android多语言开发自动化生成工具

在做 Android 开发的过程中,经常会遇到多语言开发的场景,尤其在车载项目中,多语言开发更为常见。对应多语言开发,通常都是在中文版本的基础上开发其他国家语言,这里我们会拿到中-外语言对照表,这里的工作难…

Java数据结构 (链表反转(LinkedList----Leetcode206))

1. 链表的当前结构 每个方框代表一个节点,每个节点包含两个部分: 左侧的数字:节点存储的值,例如 45、34 等。右侧的地址(如 0x90):表示该节点 next 指针指向的下一个节点的内存地址。 例子中&a…

LabVIEW 太阳能光伏发电系统智能监控

本文介绍了基于 LabVIEW 的太阳能光伏发电监控系统的设计与实现,着重探讨了其硬件配置、软件架构以及系统的实现方法。该系统能够有效提高太阳能光伏发电的监控效率和精确性,实现了远程监控和数据管理的智能化。 ​ 项目背景 在当前能源紧张与环境污染…

记录让cursor帮我给ruoyi-vue后台管理项目整合mybatis-plus

自己整合过程中会出现 work.web.exception.GlobalExceptionHandler :100 | 请求地址/admin/device/install/detail/1,发生未知异常. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.fire.mapper.DeviceInstallMapper.selectById at o…

Prometheus+grafana实践:Doris数据库的监控

文章来源:乐维社区 Doris数据库背景 Doris(Apache Doris)是一个现代化的MPP(Massive Parallel Processing,大规模并行处理)数据库,主要用于在线分析处理(OLAP)场景。 D…

CYT3BB_4BB:Clock system

CYT3BB/4BB的时钟系统包括8-MHz IMO、2个ILO、4个看门狗计时器、4个PLL、一个FLL、5个时钟监控器(CSV)、一个8-33.34MHzECO和一个32.768-kHz WCO。   该时钟系统支持三个主时钟域: CLK_HF、CLK_SLOW和CLK_LF。 - CLK_HFx: CLK_HFx是活动模式的时钟。每个人都可以使用任…

神经网络|(四)概率论基础知识-古典概型

【1】引言 前序学习了线性回归的基础知识,了解到最小二乘法可以做线性回归分析,但为何最小二乘法如此准确,这需要从概率论的角度给出依据。 因此从本文起,需要花一段时间来回顾概率论的基础知识。 【2】古典概型 古典概型是我…

OpenFGA

1.什么是OpenFGA Fine-Grained Authorization 细粒度关系型授权 2.什么是细粒度授权 细粒度授权 (FGA) 意味着能够授予特定用户在特定资源中执行特定操作的权限。 精心设计的 FGA 系统允许您管理数百万个对象和用户的权限。随着系统不断添加对象并更新用户的访问权限&#…

C语言程序设计:算法程序的灵魂

文章目录 C语言程序设计:算法程序的灵魂算法数据结构程序数据结构算法数值运算算法非数值运算算法 简单的算法举例【例2.1】求12345【例2.2】有50个学生,要求输出成绩在80分以上的学生的学号和成绩 简单的算法举例【例2.3】判定2000—2500年中的每一年是…

React和Vue有什么区别,如何选择?

React和Vue有什么区别,如何选择? React 和 Vue 是当前最受欢迎的前端框架之一,两者在开发者中都有极高的声誉。它们都旨在帮助开发人员构建用户界面,但在实现方式和适用场景上有所不同。如果你正考虑在项目中选择 React 或 Vue&a…

寒假1.23

题解 web:[极客大挑战 2019]Secret File(文件包含漏洞) 打开链接是一个普通的文字界面 查看一下源代码 发现一个链接,点进去看看 再点一次看看,没什么用 仔细看,有一个问题,当点击./action.ph…

从spec到iso的koji使用

了解一下Linux发行版流程::从spec到iso的koji使用 for Fedora 41。 Fedora 41有24235个包,我们选择 minimal 的几十个源码包,百多个rpm包构建。 配3台服务器 40C64G 48C64G 80C128G,有点大材小用,一台就够了 &#xf…

【游戏设计原理】81 - 功能可见性暗示

一、什么是功能可见性? 功能可见性(Affordance)是一个设计心理学的概念,指的是物体或界面元素通过其外观或形态向用户传递的功能暗示。换句话说,功能可见性是指一个物体本身所具备的特性,使人能直接感知到…

mathematical-expression 实现 数学表达式解析 Java 篇(最新版本)

mathematical-expression (MAE) 切换至 中文文档 Community QQ group 访问链接进行交流信息的获取:https://diskmirror.lingyuzhao.top/DiskMirrorBackEnd/FsCrud/downLoad/18/Binary?fileNameArticle/Image/-56202138/1734319937274.jpg…

MVCC底层原理实现

MVCC的实现原理 了解实现原理之前,先理解下面几个组件的内容 1、 当前读和快照读 先普及一下什么是当前读和快照读。 当前读:读取数据的最新版本,并对数据进行加锁。 例如:insert、update、delete、select for update、 sele…

WPF实战案例 | C# WPF实现计算器源码

WPF实战案例 | C# WPF实现计算器源码 一、设计来源计算器应用程序讲解1.1 主界面1.2 计算界面 二、效果和源码2.1 界面设计(XAML)2.2 代码逻辑(C#)2.3 实现步骤总结 源码下载更多优质源码分享 作者:xcLeigh 文章地址&a…

vulnhub靶场【kioptrix-3】靶机

前言 靶机:kioptrix-3,IP地址为192.168.1.74 攻击:kali,IP地址为192.168.1.16 都采用虚拟机,网卡为桥接模式 文章中涉及的靶机,来源于vulnhub官网,想要下载,可自行访问官网下载&a…