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

【Mac 从 0 到 1 保姆级配置教程 16】- Docker 快速安装配置、常用命令以及实际项目演示

文章目录

    • 前言
      • 1. Docker 是什么?
      • 2. 为什么要使用 Docker?
    • 安装 Docker
      • 1. 安装 Docker Desktop
      • 2. 安装 OrbStack
      • 3. Docker Desktop VS OrbStack
      • 5. 验证安装
    • 使用 Docker 运行项目
      • 1. 克隆项目到本地
      • 2. 进入项目目录
      • 3. 启动容器:
    • 查看运行效果
      • 1. OrbStack 中查看运行中的容器
      • 2. 访问页面
    • Docker 常用命令
      • 1. 镜像操作
      • 2. 容器操作
    • 最后
    • Docker 学习资源
    • 系列教程

Mac 从 0 到 1 保姆级配置教程目录,点击即可跳转对应文章:
【🚀🚀🚀 教程开源地址】:https://github.com/tonngw/macman
【Mac 从 0 到 1 保姆级配置教程 00】 - 教程说明
【Mac 从 0 到 1 保姆级配置教程 01】 - 安装无敌的 brew
【Mac 从 0 到 1 保姆级配置教程 02】 - 你真的会装软件吗?内含常用软件安装教程
【Mac 从 0 到 1 保姆级配置教程 03】 - 安装配置美化 iterm2 一气呵成,Mac 下经久不衰的终端
【Mac 从 0 到 1 保姆级配置教程 04】 - 手把手教你安装配置 zsh 和 oh my zsh,一看就会!
【Mac 从 0 到 1 保姆级配置教程 05】 - 全网最详细 20+ 张图逐帧安装 powerlevel10k zsh 主题(上)
【Mac 从 0 到 1 保姆级配置教程 05】 - 全网最详细 20+ 张图逐帧安装 powerlevel10k zsh 主题(下)
【Mac 从 0 到 1 保姆级配置教程 06】 - iterm2 常用快捷键和 zsh 别名配置
【Mac 从 0 到 1 保姆级配置教程 07】 - 配置 Git、GitHub、SSH 免密提交以及 Git 常用基础命令
【Mac 从 0 到 1 保姆级配置教程 08】 - 快速配置 Neovim、LazyVim 以及常用开发环境,如果之前有人这么写就好了
【Mac 从 0 到 1 保姆级配置教程 09】 - 快速配置终端复用工具 tmux 和 oh-my-tmux
【Mac 从 0 到 1 保姆级配置教程 10】 - sdkman 几分钟搞定 Java 开发环境,一定不要错过啊!
【Mac 从 0 到 1 保姆级配置教程 11】 - Mac 基础配置 Finder、触控板、常用快捷键等
【Mac 从 0 到 1 保姆级配置教程 12】- 安装配置万能的编辑器 VSCode 以及常用插件
【Mac 从 0 到 1 保姆级配置教程 13】- 详细介绍一款 Mac 下无敌好用的宝藏软件 RayCast
【Mac 从 0 到 1 保姆级配置教程 14】- 那些 Mac 非常常用的高效率工具,肯定有你不知道的
【Mac 从 0 到 1 保姆级配置教程 15】- Python 环境一键安装与配置,就是这么的丝滑
持续更新中…

前言

1. Docker 是什么?

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖打包到一个可移植的容器 (container) 中。这些容器可以在任何支持 Docker 的环境中运行,确保应用程序在不同环境中的一致性。

2. 为什么要使用 Docker?

回想一下我们学习编程的时候最折磨的就是环境问题,比如安装依赖、配置环境变量、兼容性等等。Docker 就是为了解决这个问题而生的,有了 Docker 之后我们就可以直接使用别人在 Dcoker Hub 仓库打包好的镜像 (image) 运行在我们的容器 (container) 中,大大地减轻了很多的人力和时间成本。

注:Dcoker Hub 仓库是 Docker 官方维护的镜像仓库,里面有很多开源软件的镜像,包括 MySQL、Redis、MongoDB、Nginx 等等。

安装 Docker

通常我们安装提供 Docker 管理工具的软件包会帮我们把 Docker 环境安装好,常用的工具有 Docker Desktop、OrbStack。

1. 安装 Docker Desktop

在官网找到对应 Mac 版本的安装包下载安装即可:https://www.docker.com/products/docker-desktop

Docker Desktop 安装

2. 安装 OrbStack

通过 brew 安装 OrbStack 也很简单,只需要在终端输入以下命令即可:

brew install --cask orbstack

或者在官网下载安装包进行安装:https://www.orbital.io/download,我们发现 OrbStack 只有 Mac 版本,它是 Mac 下特有的一款软件。

OrbStack 安装

3. Docker Desktop VS OrbStack

  1. Docker Desktop 是官方产品,功能完整,社区强大,但是内存磁盘资源占用大,启动慢。
  2. OrbStack 是第三方产品,基础功能完善,界面简洁,资源占用小,启动快,面向个人开发者免费。
  3. 个人使用可以尝试 OrbStack,生产环境推荐 Docker Desktop。

5. 验证安装

docker --version

如果安装成功,会输出 Docker 版本号。

docker version

我最近在使用 OrbStack,下面以 OrbStack 为例进行演示。

使用 Docker 运行项目

我们通过官方的一个样例项目来看一下如何在本地把它跑起来,https://github.com/dockersamples/example-voting-app#

1. 克隆项目到本地

git clone git@github.com:dockersamples/example-voting-app.git

2. 进入项目目录

cd example-voting-app

3. 启动容器:

docker-compose up -d

如果拉取镜像出现如下错误提示,大概率是网络原因
Docker Pull Image Error

需要配置一下 Docker 镜像源,比如 OrbStack 在设置中进行配置,添加如下镜像源后点击 Apply,重启 OrbStack,重启才能生效:

以下镜像均已生效

{"registry-mirrors": ["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://ccr.ccs.tencentyun.com"]
}

找到一个有效的镜像源,且用且珍惜吧…

{"registry-mirrors" : ["https://docker.xuanyuan.me"]
}

Docker 镜像源配置

重新执行命令,拉取的内容较多,需要耐心等待一会,执行成功后,我们可以看到如下输出:

Start success

如果这里提示端口 8081 被占用,查看一下占用端口的进程

lsof -i tcp:8081

8081 port

我的是被 OrbStack 占用了,没法杀掉进程,所以需要修改 docker-compose.yml 文件中的端口映射,比如把 8081 改成 8082

8081 port

如果你的进程可以杀掉,直接 kill -9 进程号 即可。

注:这个过程还是需要我们能够定位问题解决问题,比如网络问题、端口占用等等。这个例子也是我们现实场景中的一个真实显照。

查看运行效果

1. OrbStack 中查看运行中的容器

这是样例工程的项目架构

System Architecture

包括 Postgres 数据库、Redis 缓存、NodeJS 后端服务、Python 前端服务、Worker 任务。

运行中的容器

2. 访问页面

  1. 投票页面,访问 http://localhost:8080,可以选择选项进行投票,每个客户端只能投票一次。

投票页面

  1. 统计页面,访问 http://localhost:8082,查看投票结果。

统计页面

Docker 常用命令

以下是之前学习的部分笔记整理,如果是初学者建议根据文章最后提供的资源进行系统性学习。

1. 镜像操作

docker 仓库中的每个镜像都是由 name:tag - 应用名称:版本号 构成的。

可以在 Docker 中央仓库中查找想要的镜像 https://hub.docker.com/

  • docker pull ubuntu:20.04:拉取一个镜像
  • docker iamges:查看本地所有的镜像
  • docker rmi ubuntu:20.04 :删除指定镜像,rmi - remvoe image
  • docker save -o ubuntu_20_04.tar ubuntu:20.4:将镜像 ubuntu:20.4 导出到本地文件 ubuntu_20_04.tar
    默认导出后其他用户是没有可读权限的,需要给它加一个可读权限 chmod +r ubuntu_20_04.tar
  • docker load -i ubuntu_20_04.tar :将镜像 ubuntu:20.04 从本地文件 ubuntu_20_04.tar 中加载出来。
    docker savedocker load 配合可以实现 docker 镜像在不同服务器之间的迁移。

2. 容器操作

根据一个镜像可以创建多个容器。

说明:

  • [container] 表示可选,可以不写
  • CONTAINER:可以是容器 name 或者是容器 id

命令:

  • docker [container] create -it ubuntu:20.04:利用镜像 ubuntu:20.04 创建一个容器
  • docker ps -a:查看本地所有的容器
    • docker ps:只显示正在运行的容器
  • docker [container] start CONTAINER:启动容器
  • docker [container] stop CONTAINER:停止容器
  • docker [container] restart CONTAINER:重启容器
  • docker [container] run -itd ubuntu:20.04:创建并启动一个容器
    • docker [container] run -it ubuntu:20.04 创建并直接进入容器,少了参数 d
  • docker [container] attach CONTAINER:进入容器
    • 退出后不关闭容器(挂起容器): Ctrl + p + Ctrl + q推荐使用
    • 退出后关闭容器:Ctrl + d
  • docker [container] exec CONTAINER COMMAND:在容器中执行命令
    • 可以把 docker 容器看成一个全新的 Linux 服务器。ls 查看根目录就是 linux 文件目录
  • docker [container] rm CONTAINER:删除容器
  • docker container prune:删除所有已停止的容器,prune - 删去
  • docker export -o xxx.tar CONTAINER:将容器 CONTAINER 导出到本地文件 xxx.tar
  • docker import xxx.tar image_name:tag:将本地文件 xxx.tar 导入成镜像,并将镜像重命名为 image_name:tag
  • docker exprot/importdocker save/load 的区别
    • export/impot 会丢失历史记录和元数据信息,仅保存容器当时的快照状态。
    • save/load 会保存完整记录,体积更大。
  • docker top CONTAINER:查看某个容器内的所有进程
  • docker stats:查看所有容器的统计信息,CPU、内存、存储、网络等信息。
    • Ctrl + c 结束查看
  • docker cp xxx CONTAINER:xxxdocker cp CONTAINER:xxx xxx:在本地和容器之间复制文件
  • docker rename CONTAINER1 CONTAINER2:重命名容器
  • docker update CONTAINER --memory 500M:修改容器大小限制

最后

如果感觉文章对你有所帮助,请三连支持一下博主哦,感谢大家~

最重要的是给博主留一个大大的关注,你的支持是我更新的最大动力!

这个系列会继续更新下去的!

Docker 学习资源

  • 官方文档:https://docs.docker.com/
  • 3 小时速通 Docker 教程:https://www.bilibili.com/video/BV1Zn4y1X7AZ
  • https://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

系列教程

【🚀🚀🚀 教程开源地址】:https://github.com/tonngw/macman
【Mac 从 0 到 1 保姆级配置教程 00】 - 教程说明
【Mac 从 0 到 1 保姆级配置教程 01】 - 安装无敌的 brew
【Mac 从 0 到 1 保姆级配置教程 02】 - 你真的会装软件吗?内含常用软件安装教程
【Mac 从 0 到 1 保姆级配置教程 03】 - 安装配置美化 iterm2 一气呵成,Mac 下经久不衰的终端
【Mac 从 0 到 1 保姆级配置教程 04】 - 手把手教你安装配置 zsh 和 oh my zsh,一看就会!
【Mac 从 0 到 1 保姆级配置教程 05】 - 全网最详细 20+ 张图逐帧安装 powerlevel10k zsh 主题(上)
【Mac 从 0 到 1 保姆级配置教程 05】 - 全网最详细 20+ 张图逐帧安装 powerlevel10k zsh 主题(下)
【Mac 从 0 到 1 保姆级配置教程 06】 - iterm2 常用快捷键和 zsh 别名配置
【Mac 从 0 到 1 保姆级配置教程 07】 - 配置 Git、GitHub、SSH 免密提交以及 Git 常用基础命令
【Mac 从 0 到 1 保姆级配置教程 08】 - 快速配置 Neovim、LazyVim 以及常用开发环境,如果之前有人这么写就好了
【Mac 从 0 到 1 保姆级配置教程 09】 - 快速配置终端复用工具 tmux 和 oh-my-tmux
【Mac 从 0 到 1 保姆级配置教程 10】 - sdkman 几分钟搞定 Java 开发环境,一定不要错过啊!
【Mac 从 0 到 1 保姆级配置教程 11】 - Mac 基础配置 Finder、触控板、常用快捷键等
【Mac 从 0 到 1 保姆级配置教程 12】- 安装配置万能的编辑器 VSCode 以及常用插件
【Mac 从 0 到 1 保姆级配置教程 13】- 详细介绍一款 Mac 下无敌好用的宝藏软件 RayCast
【Mac 从 0 到 1 保姆级配置教程 14】- 那些 Mac 非常常用的高效率工具,肯定有你不知道的
【Mac 从 0 到 1 保姆级配置教程 15】- Python 环境一键安装与配置,就是这么的丝滑
持续更新中…

相关文章:

【Mac 从 0 到 1 保姆级配置教程 16】- Docker 快速安装配置、常用命令以及实际项目演示

文章目录 前言1. Docker 是什么?2. 为什么要使用 Docker? 安装 Docker1. 安装 Docker Desktop2. 安装 OrbStack3. Docker Desktop VS OrbStack5. 验证安装 使用 Docker 运行项目1. 克隆项目到本地2. 进入项目目录3. 启动容器: 查看运行效果1. OrbStack 中…...

2025-05-01-决策树算法及应用

决策树算法及应用 参考资料 GitHub - zhaoyichanghong/machine_learing_algo_python: implement the machine learning algorithms by p(机器学习相关的 github 仓库)决策树实现与应用决策树 概述 机器学习算法分类 决策树算法 决策树是一种以树状结构对数据进行划分的分类…...

Redis知识体系

1. 概述 本文总结了Redis基本的核心知识体系,在学习Redis的过程中,可以将其作为学习框架,以此更好的从整体的角度去理解和学习Redis的内容和设计思想。同时知识框架带来的好处是可以帮助我们更好的进行记忆,在大脑中形成相应的知识…...

mysql-MySQL体系结构和存储引擎

1. MySQL体系结构和存储引擎 MySQL被设计成一个单进程多线程架构的数据库,MySQL数据库实例在系统上的表现就是一个进 程当启动实例时,读取配置文件,根据配置文件的参数来启动数据库实例;若没有,按编译时的默认 参数设…...

Pycharm 函数注释

1 Docstring format File -> Settings -> Tools -> Python Integrated Tools -> Docstrings -> Docstring format,选择google File -> Settings -> Editor -> General -> Smart Keys -> Insert type placeholders in the documenta…...

如何使用 Redis 快速实现布隆过滤器?

以下是使用 Redis 实现布隆过滤器的两种方案,结合原理说明和操作步骤: 方案一:手动实现(基于 Redis Bitmap) 原理 利用 Redis 的 SETBIT 和 GETBIT 操作位数组,结合多个哈希函数计算位置。 步骤 确定参数…...

黑马Javaweb Request和Response

一.介绍 在 Web 开发中,HttpServletRequest 和 HttpServletResponse 是两个非常重要的类,它们分别用于处理客户端的请求和服务器的响应。以下是它们的详细说明和使用方法: 1. HttpServletRequest HttpServletRequest 是一个接口&#xff0…...

山东大学深度学习2025年期末考试

一、名词解释(24) 1.反向传播 2.激活函数 3.梯度裁剪 4.数据增强 5.迁移学习 6.过拟合 7.word2Vec 8.注意力机制 二、简答题(48) 1.池化的概念(作用)以及常见的两种池化操作 2.LSTM为什么能解决…...

添加按钮跳转页面并且根据网站的用户状态判断是否显示按钮

现在我们需要的是为页面添加一个按钮,这个按钮是动态的,需要根据网站用户登录过后是否是vip来判断是否显示,然后按钮的效果是跳转到某个页面。 首先我们需要在页面中找到我们需要添加按钮的位置,找到对应的文件,然后比…...

Gerrit+repo管理git仓库,如果本地有新分支不能执行repo sync来同步远程所有修改,会报错

问题:创建一个本地分支TEST 来关联远程已有分支origin/TEST,直接执行repo sync可能会出现问题:比如,本地分支TES会错乱关联到origin/master,或者拉不下最新代码等问题。 // git checkout -b 新分支名 远程分支名字 git…...

豆瓣图书评论数据分析与可视化

【题目描述】豆瓣图书评论数据爬取。以《平凡的世界》、《都挺好》等为分析对象,编写程序爬取豆瓣读书上针对该图书的短评信息,要求: (1)对前3页短评信息进行跨页连续爬取; (2)爬取…...

Vue ④-组件通信 || 进阶语法

组件三大部分 template:只有能一个根元素 style:全局样式(默认):影响所有组件。局部样式:scoped 下样式,只作用于当前组件 script:el 根实例独有,data 是一个函数,其他配置项一致…...

0x-2-Oracle Linux 9上安装JDK配置环境变量

一、JDK选择和使用 安装完Oracle Linux9.6,同时使用rpm包安装Oracle 23 ai free后, 将面临sqlcl程序无法使用和java无法使用,需要相应进行变量配置问题。 1、java 环境运行不存在,Oracle 23ai free安装后默认安装JDK 11 /opt/…...

深入理解卷积神经网络:从原理到应用

在人工智能领域,卷积神经网络(Convolutional Neural Network, CNN)无疑是计算机视觉领域的璀璨明珠。从 1998 年 Yann LeCun 提出 LeNet-5 实现手写数字识别,到 2012 年 AlexNet 在 ImageNet 大赛上创造历史性突破,CNN…...

从入门到实战:AI学习路线全解析——避坑指南

分享一下阿里的人工智能学习路线,为感兴趣系统学习的小伙伴们探路。 一、谁适合学这门AI课程?五类人群的精准定位 无论你是零基础小白还是职场转型者,这套系统化课程都能为你量身定制成长路径: 零基础爱好者(无编程/数学背景) 课程提供Python和数学前置学习建议,先补基…...

Spring Boot + Thymeleaf 防重复提交

在 Spring Boot 与 Thymeleaf 结合的 Web 应用中,防止重复提交可以采用token 机制 客户端禁用按钮的方式实现,在高并发场景下,考虑使用 Redis 存储 token 而非 Session。 第一步:后端实现 Controller public class FormControl…...

uniapp实现的简约美观的星级评分组件

采用 uniapp 实现的一款简约美观的星级评分模板,提供丝滑动画效果,用户可根据自身需求进行自定义修改、扩展,纯CSS、HTML实现,支持web、H5、微信小程序(其他小程序请自行测试) 可到插件市场下载尝试&#x…...

AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)

目标 需要使用AWS Elastic Beanstalk 部署一个Python的Flask Web应用,并且使用CodePipeline作为CI/CD工作流。 eb部署图 前提 假设你已经有一个能够正常运行的Python的Flask Web应用项目代码,而且需要对已有Flask工程做一些调整。由于AWS Elastic Bea…...

多线程语音识别工具

软件介绍 本文介绍一款支持大厂接口的语音转文字工具,具备免配置、免费使用的特点。 软件特性 该工具是一款完全免费的桌面端应用程序,部署于开源社区平台,其核心优势在于整合了多家技术供应商的接口资源。 操作方式 用户只需将音频…...

前端对WebSocket进行封装,并建立心跳监测

WebSocket的介绍: WebSocket 是一种在客户端和服务器之间进行全双工、双向通信的协议。它是基于 HTTP 协议,但通过升级(HTTP 升级请求)将连接转换为 WebSocket 协议,从而提供更高效的实时数据交换。 WebSocket 的特点…...

DiMTAIC 2024 数字医学技术及应用创新大赛-甲状腺B超静态及动态影像算法赛-参赛项目

参赛成绩 项目介绍 去年参加完这个比赛之后,整理了项目文件和代码,虽然比赛没有获奖,但是参赛过程中自己也很有收获,自己一个人搭建了完整的pipeline并基于此提交了多次提高成绩,现在把这个项目梳理成博客&#xff0c…...

window安装docker\docker-compose

安装前配置 打开控制面板,参照下图打开“启动或关闭windows功能”,Hyper-V 和容器需要启用 程序和功能 启动或关闭windows功能 勾选Hyper-V 安装路径配置 Docker在Windows上的默认安装路径为C:\Program Files\Docker。 以管理员身份运行CMD在D盘,dev文件夹下创建Docker文…...

Jenkins的学习与使用(CI/CD)

文章目录 前言背景CI/CDJenkins简介Jenkins特性 安装Jenkins工作流程(仅供参考)安装maven和其他插件新建任务任务源码管理配置maven配置git(非必需) 尝试手动构建jar包可能遇到的错误 发布到远程服务器前置清理工作构建触发器git钩…...

vue-14(使用 ‘router.push‘ 和 ‘router.replace‘ 进行编程导航)

使用 ‘router.push’ 和 ‘router.replace’ 进行编程导航 编程导航是使用 Vue Router 构建动态和交互式 Web 应用程序的一个重要方面。它允许您根据应用程序逻辑、用户作或特定条件控制用户的导航流。您可以使用 router.push 和 router.replace 方法以编程方式导航到不同的路…...

使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件

Nuget下载之后记得要先引用下面的 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" <!-- 鼠标事件 --> <i:EventTrigger EventName"MouseEnter"/> <!-- 鼠标进入 --> <i:EventTrigger EventName"MouseLeave"/&g…...

Elasticsearch中的监控(Monitoring)功能介绍

Elasticsearch 的 监控&#xff08;Monitoring&#xff09; 功能用于实时跟踪集群的运行状态、性能指标和资源使用情况&#xff0c;帮助管理员及时发现潜在问题、优化配置并确保集群稳定高效运行。它通过内置工具和集成方案&#xff0c;提供从节点到集群、从硬件到服务层的全方…...

Centos7.6图文安装mysql8.4详细步骤记录

1 前提条件 1.1 关闭数据库服务器的防火墙 # 关闭数据库服务器的防火墙 systemctl stop firewalld systemctl disable firewalld 1.2 关闭SELinux # 编辑 /etc/selinux/configvi /etc/selinux/config#内容更改为disabledSELINUXdisabled 1.3 卸载系统自身带的mysql&#…...

AI短视频创富营

课程内容&#xff1a; 相关资料 【第一章】前期准备 001.【涨粉技巧】新账号如何快速涨粉?_ev(1).mp4 002.【带贷权限】如何开通账号带贷权限?(1).mp4 003.【费用缴纳】如何缴纳账号保证金?_ev(1).mp4 004.【账号检测】如何检测账号是否限流?(1).mp4 005.【风险规避…...

C++.OpenGL (4/64)纹理(Texture)

纹理(Texture) 纹理映射核心流程 #mermaid-svg-XxVbt4fizulzb5H3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XxVbt4fizulzb5H3 .error-icon{fill:#552222;}#mermaid-svg-XxVbt4fizulzb5H3 .error-text{fill:…...

spring中的@RabbitListener注解详解

基本用法主要属性1. queues / queueNames2. containerFactory3. id4. concurrency5. ackMode6. priority7. bindings 高级特性1. 消息转换器2. 手动确认3. 条件监听4. 错误处理 配置监听容器工厂注意事项完整示例循环依赖解决1. 使用 Setter 注入2. 使用 Lazy 注解3. 重构代码结…...