当前位置: 首页 > news >正文

Docker、Docker composer与Docker desktop

文章目录

  • Docker、Docker composer与Docker desktop
  • 一、docker、docker composer、docker desktop
    • 1.1 Docker
    • 1.2 Docker Compose
    • 1.3 Docker Desktop
    • 1.4 三者之间的区别
  • 二、docker desktop的安装和换源
    • 2.1 前期准备
      • WSL2
    • 2.1 Docker Desktop 安装
      • 下载 Docker Desktop
      • 安装 Docker Desktop
    • 2.2 镜像源设置
  • 三、Opengauss数据库的配置
    • 3.1 Opengauss简介
    • 3.2 镜像拉取
    • 3.3 创建容器
    • 3.4 进入数据库
  • 四、通过vscode连接docker环境
    • 4.1 前提条件
    • 4.2 安装 Docker 扩展
    • 4.3 验证连接
  • 五、通过docker管理环境,封装环境成为docker包
    • 5.1 基本步骤
    • 5.2 麻将机实例
      • 5.2.1项目下载
      • 5.2.2 封装环境docker包
        • 创建Dockerfile
        • 构建 Docker 镜像
        • 运行 Docker 容器
        • 运行结果

Docker、Docker composer与Docker desktop

一、docker、docker composer、docker desktop

1.1 Docker

  • 定义和功能 :Docker 是一个开源的应用容器引擎。你可以把它想象成一种“包装”软件的方式。在传统的软件部署环境中,软件运行依赖于各种系统库、配置文件等。如果不小心更改了系统环境,就可能影响软件的正常运行。而 Docker 就像是给软件打造了一个“小房间”,把这些软件以及它需要的所有依赖(比如特定版本的库、配置等)都装在这个房间里。这个“房间”就是一个容器。例如,你有 一个 Python 应用程序,它需要特定版本的 Python 解释器和一些第三方库(如 Numpy、Pandas)。使用 Docker,你可以将这个 Python 应用连同它所需要的 Python 环境和库打包成一个 Docker 镜像。然后,无论是在你的本地开发机器、测试服务器还是生产服务器上,只要安装了 Docker,就可以用这个镜像来启动一个容器,软件就能在这个独立的环境中稳定运行。
  • 优点
    • 隔离性 :每个容器都有自己独立的运行环境,不会互相干扰。就像不同的箱子,里面的东西不会混在一起。
    • 一致性 :无论在什么操作系统(只要支持 Docker)上,容器内的软件运行环境都是一致的。这解决了“在我的机器上可以运行”的问题,避免了因为环境差异导致的软件部署难题。
    • 轻量级 :和虚拟机相比,Docker 容器不需要像虚拟机那样虚拟整个操作系统。它共享宿主机的内核,所以容器启动很快,资源占用也少。

1.2 Docker Compose

  • 定义和功能 :Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。当你的应用程序需要多个服务协同工作时,Docker Compose 就派上用场了。例如,你有一个基于微服务架构的电商系统,包括前端服务(处理用户界面)、后端服务(处理业务逻辑,如订单处理、用户认证等)、数据库服务(存储用户信息、商品信息等)。你可以使用 Docker Compose 来定义这些服务,通过一个 YAML 文件来描述每个服务的配置,包括镜像名称、端口映射、环境变量、挂载的卷等信息。然后,只需要一个命令(docker - compose up),就可以启动所有这些相关联的容器,并且 Docker Compose 会根据你定义的配置来正确地配置它们之间的网络连接等关系。
  • 优点
    • 简化配置 :通过一个文件来定义多个服务的配置,避免了逐个手动去配置和启动容器的繁琐过程。
    • 可复用性 :这个 YAML 文件可以被团队成员共享,或者用于不同的环境(开发、测试、生产等),实现了配置的标准化和可复用性。

1.3 Docker Desktop

  • 定义和功能 :Docker Desktop 是 Docker 为开发者提供的本地开发环境。它是一个集成了 Docker Engine(用于运行容器)、Docker Compose(用于管理多容器应用)、Kubernetes(一个容器编排工具,用于管理大规模的容器集群,这里先简单提一下,后续可能还会深入学习)等工具的软件。它主要是方便开发者在本地机器上快速安装和使用 Docker 相关技术。例如,如果你是一个 Windows 或 Mac 系统的开发者,想要在本地运行和测试基于 Docker 的应用,安装 Docker Desktop 就可以轻松实现。它提供了图形化界面来查看容器、镜像的信息,还可以方便地管理容器的启动、停止等操作。
  • 优点
    • 方便安装和使用 :为不同操作系统的开发者提供了一个易于安装和使用的 Docker 环境。
    • 功能集成 :把多种 Docker 相关工具集成在一起,方便开发者在一个统一的环境中完成开发和测试工作。

1.4 三者之间的区别

  • 功能侧重点不同
    • Docker 是基础,主要关注于容器的创建、运行和管理,它是一个核心的容器引擎。
    • Docker Compose 是在 Docker 基础上,侧重于多容器应用的编排和管理,把多个容器组合成一个完整应用的过程。
    • Docker Desktop 更侧重于提供给开发者一个本地的、易用的 Docker 环境,它包含了 Docker 和 Docker Compose 等工具,方便开发者进行本地开发和测试。
  • 使用场景不同
    • Docker 可以单独使用来运行单个容器。例如,你只需要运行一个简单的 Nginx 服务器来测试网页内容,就可以使用 Docker 来拉取 Nginx 镜像并启动容器。
    • Docker Compose 在需要运行多个相互关联的容器来构成一个应用时使用。比如,在开发一个复杂的分布式系统,涉及多个微服务和数据库等组件时,使用 Docker Compose 来定义和启动这些组件是很方便的。
    • Docker Desktop 主要用于本地开发环境。当你在自己的电脑上进行应用开发,想要使用 Docker 技术来测试和调试应用时,它提供了一个简洁的本地环境。
  • 部署方式不同
    • Docker 可以在服务器等环境中直接部署,用于生产环境的容器运行(当然,也可以在本地运行,但 Docker Desktop 更侧重于本地场景)。
    • Docker Compose 通常是在开发和测试阶段用于编排多容器应用,它依赖于 Docker 来运行容器。在生产环境中,可能还会有更复杂的编排工具,但它在开发阶段是很实用的。
    • Docker Desktop 是安装在本地开发机器上的软件,主要是为了方便开发过程中的容器操作,它本身不是直接用于生产环境中的大规模应用部署。

二、docker desktop的安装和换源

2.1 前期准备

WSL2

  • WSL2(Windows Subsystem for Linux 2)是微软推出的一项功能,它允许用户在 Windows 10 和 Windows 11 操作系统上运行 Linux 二进制可执行文件(ELF 文件)
  • 让你能在 Windows 电脑上直接运行 Linux 程序

WSL是window的子系统,在本机上用命令直接安装会很慢,所以我提供了安装包,在zip中,下载安装就行

2.1 Docker Desktop 安装

下载 Docker Desktop

  • 访问 Docker 官网:https://www.docker.com/。
  • 点击页面上的“Download for Windows - AMD64”按钮,以下载适用于 Windows 系统的 Docker Desktop 安装文件

安装 Docker Desktop

Windows下安装Docker Desktop到非C盘指南

C盘内存充足可以直接点击 Docker Desktop Installer.exe 下载

  • 打开powershell 输入以下指令(路径先建好,再输入指令)
& "D:\load\DockerDesktop\Docker Desktop Installer.exe" install --installation-dir="D:\Program Files\Docker"

D:\load\DockerDesktop\Docker Desktop Installer.exe对应Docker Desktop Installer.exe的保存路径

D:\Program Files\Docker对应目的安装路径

2.2 镜像源设置

在这里插入图片描述

{"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"]
}

三、Opengauss数据库的配置

3.1 Opengauss简介

OpenGauss 是一款由华为发起并贡献给开源社区的企业级开源关系型数据库,旨在为全球用户提供高性能、高可靠、高安全的数据库服务。它基于 PostgreSQL 进行深度优化和扩展,融合了华为在数据库领域多年的技术积累,支持多核架构、分布式部署、智能运维等特性,适用于金融、电信、政务、能源等对数据安全与业务连续性要求极高的行业场景。

3.2 镜像拉取

高版本(5.x或以上)opengauss EE容器无法在macOS或Windows上正常启动。此时议把镜像换成lite版,将拉取指令切换成(docker pull enmotech/opengauss-lite)

  • 在PowerShell中运行
docker pull enmotech/opengauss-lite

3.3 创建容器

在C盘或者其他盘根目录下创建一个文件夹为opengauss,确保其绝对路径为C:\opengauss”或者D:\opengauss即可。然后在PowerShell中输入如下代码创建容器

docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Dwq@123456 -v D:\opengauss:/var/lib/opengauss -p 15432:5432 enmotech/opengauss-lite

​ 其中name可以自己修改,PASSWORD后的密码()也可以自己设计修改(要求包含大小写字母、普通字符和数字,并且密码长度不少于8位)接下来回到Docker主界面就可以看到新容器已经创建成功了
在这里插入图片描述

3.4 进入数据库

打开cmd 依次输入以下指令

# 先打开docker里的opengause
docker exec -it opengauss bash# 切换用户到omm(登录到超级用户omm)
su - omm# gsql工具通过默认端口5432连接到postgres数据库
gsql -d postgres -p 5432#查看数据库清单
\l  

在这里插入图片描述

四、通过vscode连接docker环境

4.1 前提条件

已安装 VSCode

4.2 安装 Docker 扩展

在这里插入图片描述

4.3 验证连接

  • 新增了一个 图标
  • 右侧显示了容器、镜像
  • 显示错误可能是因为没有打开docker desktop

在这里插入图片描述

启动

在这里插入图片描述

五、通过docker管理环境,封装环境成为docker包

5.1 基本步骤

  1. 创建 Dockerfile:在项目根目录下创建一个名为 Dockerfile 的文件,并编写指令来定义环境。例如,指定基础镜像、安装必要的软件包、设置工作目录等。

  2. 构建 Docker 镜像:在包含 Dockerfile 的目录下,运行 docker build 命令来构建 Docker 镜像。例如:

    docker build -t your-image-name:tag .
    

    其中 -t 参数用于指定镜像的标签,. 表示使用当前目录下的 Dockerfile 进行构建。

  3. 运行 Docker 容器:构建完成后,您可以使用 docker run 命令来启动 Docker 容器。例如:

    docker run -it --name your-container-name your-image-name:tag
    

    -it 参数表示以交互式终端模式运行容器,--name 参数用于指定容器的名称。

5.2 麻将机实例

5.2.1项目下载

1.进入网页直接下载https://github.com/MahjongRepository/tenhou-python-bot?tab=readme-ov-file

2.或者用命令下载

  • 预先建好一个文件夹,我创建了一个文件夹maj位于D:\lab\maj

  • git 命令进行克隆,下载 tenhou-python-bot 项目的代码

    进入文件夹D:\lab\maj后输入以下命令

    git clone https://github.com/MahjongRepository/tenhou-python-bot.git
    
  • 克隆速度过慢或失败,可以尝试使用 GitHub 镜像(如https://ghproxy.com/前缀)

    git clone https://ghproxy.com/https://github.com/MahjongRepository/tenhou-python-bot.git
    

在这里插入图片描述

5.2.2 封装环境docker包

创建Dockerfile

根目录中已包含dockerfile文件,所以不需要自己编写

FROM pypy:3.7-7.3.6-slim
//选择基础镜像:使用 PyPy 3.7 版本(7.3.6 是 PyPy 版本号)的精简版镜像。RUN useradd -ms /bin/bash docker-user
//创建一个名为docker-user的用户,并设置其默认shell为bash
//避免容器以 root 权限运行,提升安全性。WORKDIR /app/
//设置容器内的工作目录为/app,后续操作(如复制文件)都在这个目录下进行。RUN python3 -m pip install pip==21.3
//升级 pip(Python 包管理器)到 21.3 版本,确保安装依赖时更稳定。COPY requirements /requirements
//将本地的requirements文件夹复制到容器的/requirements路径下
//这里通常存放项目需要的依赖包列表RUN pip install --no-cache-dir -r /requirements/dev.txt
//安装dev.txt文件中列出的所有依赖包。
//--no-cache-dir:不保存安装包的缓存,减少镜像体积;
//-r:指定从文件读取依赖列表。COPY ./project .
//将本地的project文件夹内容复制到容器的当前工作目录(/app)下
//这一步把项目代码放进容器里,让容器知道要运行什么程序USER docker-user
//切换到之前创建的docker-user用户运行后续命令和程序
//确保容器不以管理员(root)权限运行,防止恶意操作或文件权限问题
构建 Docker 镜像

在项目根目录下(powershell),使用以下命令来构建 Docker 镜像

docker build -t mahjong_bot .

如果报错

在这里插入图片描述

docker pull pypy:3.7-7.3.6-slim
docker build -t mahjong_bot .
运行 Docker 容器
docker run -it --rm `-v "${PWD}/project:/app" `mahjong_bot `pypy3 bots_battle.py -g 1 --logs

基础参数

docker run -it --rm
参数作用
-i交互式模式(Interactive):保持标准输入流(stdin)开放,允许与容器交互。
-t分配伪终端(TTY):为容器分配一个终端,使命令输出更像在本地终端运行。
--rm自动删除容器:容器退出时自动删除,避免残留无用容器(适合一次性任务)。

卷挂载参数

-v "${PWD}/project:/app"
参数作用
-v挂载卷(Volume):将宿主机(本地电脑)的目录映射到容器内的目录。
${PWD}/project宿主机路径${PWD} 表示当前 PowerShell 工作目录,project 是子目录。
:/app容器内路径:将宿主机的 project 目录挂载到容器的 /app 目录。

镜像与命令参数

mahjong_bot pypy3 bots_battle.py -g 1 --logs
部分作用
mahjong_bot镜像名称:使用之前通过 docker build 构建的镜像。
pypy3Python 解释器:PyPy 3.x 版本(比 CPython 更快)。
bots_battle.py执行的脚本:运行麻将机器人对战的主程序。
-g 1脚本参数:指定对战局数为 1 局(-g--games)。
--logs启用详细日志:记录 Bot 的决策过程(生成 debug_logs 文件夹)。
运行结果

在这里插入图片描述

  • 查看日志

在这里插入图片描述

相关文章:

  • 专门做简历的网站有哪些可以投放广告的网站
  • 哪个网站做logo好代写文案的软件
  • 聊城做网站的公司精英优化快速排序
  • 做网站挣钱吗和生活爱辽宁免费下载安装
  • 做网站排名需要多少钱什么是seo是什么意思
  • cdr做好排班怎么做网站百度公司的发展历程
  • 【Elasticsearch】es初识,在项目架构中的用途,与mysql和kafka的配合使用,
  • .NET 7.0 EF Core:一、创建Web API 项目基础框架和用户表的增删改查
  • C++ 第二阶段项目三:图形绘制库
  • PDF24 Creator(PDF工具箱)
  • 中文PDF解析准确率排名
  • 设计模式:揭秘Java原型模式——让复杂对象的创建不再复杂
  • 使用pyflink编写demo并将任务提交到yarn集群
  • 【启发式算法】RRT*算法详细介绍(Python)
  • 一篇文章了解XML
  • LeetCode 3298.统计重新排列后包含另一个字符串的子字符串数目2
  • aspose.word在IIS后端DLL中高并发运行,线程安全隔离
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | BackgroundSlider(背景滑块)
  • Web项目开发中Tomcat10+所需的jar包
  • 机器学习复习
  • 自动驾驶数据特征提取实战:用Python打开智能驾驶的新视角
  • C++包管理工具:conan2使用教程
  • 在vscode中,Python程序的内置对象、关键字、自定义函数名/类名、字符串进行着色,说明分别是什么颜色?
  • ant+Jmeter+jenkins接口自动化,如何实现把执行失败的接口信息单独发邮件?
  • Jenkins Pipeline 与 Python 脚本之间使用环境变量通信
  • Flutter 百题斩#8 | 说说 State 抽象类持有的成员变量