快速上手 Docker:从入门到安装的简易指南(Mac、Windows、Ubuntu)

PS:笔者在五一刚回来一直搞Docker部署AI项目,发现从开发环境迁移到生成环境时,Docker非常好用。但真的有一定上手难度,推荐读者多自己尝试踩踩坑。
本篇幅有限,使用与修改另起篇幅。

一、Docker是什么

#1. Docker是什么?

Docker是一个开源软件(平台),通过容器技术能够自动化应用程序的部署、扩展和管理

其中,容器Container是一种轻量级、便携且自给自足的软件打包格式,它包含了运行软件所需的一切(栗如运行环境、配置文件、代码等)。

这里笔者直接进入一个Docker容器,让读者快速感受一下。如下图所示:
在这里插入图片描述
如上图所示,笔者通过docker exec命令进入了一个容器,并进入根目录/打印所有目录。我们可以看到,就是一个Linux目录嘛,不过容器和虚拟机有点不同,下面的#2.会讲到。


#2. 了解一些Docker的关键概念

1️⃣镜像 (Image):
  • Docker镜像是一个只读的模板,用于创建 Docker 容器。它包含运行应用程序所需的所有信息和依赖项。镜像可以从公共存储库中获取,可以自己进行构建。
2️⃣容器 (Container):
  • 容器是镜像的一个可执行实例。它们是隔离的进程,可以在同一主机上并行运行多个容器。容器与传统虚拟机不同,因为它们共享操作系统的内核,而不是每个容器都运行一个完整的操作系统实例,所以更省资源。
3️⃣文件Dockerfile
  • 是一个文本文件,包含了一系列命令,用于自动化地构建 Docker 镜像。这些命令定义了镜像的基础、要安装的软件、环境变量设置,以及启动容器时需要执行的指令。
4️⃣公共资源库Docker Hub
  • Docker Hub 是一个云端的镜像存储库服务,允许用户发布、存储和下载 Docker 镜像。官方网址是:https://hub.docker.com/。
5️⃣编排工具(咳咳,笔者还没有用过,想着开始自己手敲了解一下后面再借助工具):
  • Docker Swarm 和 Kubernetes 等工具可用于容器的编排和管理。这些工具提供了自动化部署、负载均衡、扩展以及故障恢复等功能。

#3. 为什么要用Docker(这里仅讲到笔者的使用感受)

1️⃣部署方便

开发人员可以使用 Dockerfile 定义开发环境,一行代码生成运行环境,拿到生产环境开包即用。

2️⃣节约资源

相较于虚拟机,Docker共享主机操作系统的内核,因此更节省资源。

3️⃣具有备份与回滚功能

每个 Docker 镜像都有其特定版本,可以随时回滚或更新。



二、Mac&Windows以图形化界面安装Docker

安装程序下载地址:https://www.docker.com/products/docker-desktop/

Mac安装后的界面如下图所示:
在这里插入图片描述



三、Ubuntu以命令行安装Docker

Docker镜像搜索:https://hub.docker.com/

#1. 安装依赖

# (可选)删除默认的旧版本docker
sudo apt-get remove docker docker-engine docker.io containerd runc# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release apt-transport-https software-properties-common

#2. 添加“官方密钥”与“国内软件源”

# 添加官方GPG密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -# 添加Docker软件源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

#3. 安装Docker

# 安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io# 将用户添加到docker组
sudo usermod -aG docker $USER# 查看版本验证安装
docker version

出现以下界面即安装成功:
在这里插入图片描述



四、Ubuntu下配置国内镜像

#1. 配置国内镜像源

sudo vim /etc/docker/daemon.json# daemon.json
{"registry-mirrors":[ "https://docker.m.daocloud.io", "https://docker.imgdb.de", "https://docker-0.unsee.tech", "https://docker.hlmirror.com", "https://docker.1ms.run", "https://func.ink", "https://lispy.org", "https://docker.xiaogenban1993.com" ]
}# 重新启动
sudo systemctl daemon-reload && sudo systemctl restart docker# 查看镜像生效
docker info

#2. 连接错误的处理

但有时国内镜像更新不及时,比如这种报错:
ERROR: failed to solve: node:lts-alpine: failed to do request: Head "https://registry.docker-cn.com/v2/library/node/manifests/lts-alpine?ns=docker.io": net/http: TLS handshake timeout

解析报错:其中registry.docker-cn.com就是国内的镜像站。这时候有两个选择:

  1. 继续上网找镜像站,然后尝试(笔者最后采用的是该方法)

  2. 走代理(但笔者挂代理也请求不到资源,最后也没时间确认原因)


#3. 拉取「测试镜像hello-world」来测试一下(假设你已经解决了连接错误的问题):

sudo docker run hello-world		# 该命令先寻找本地的镜像,然后去镜像源寻找。找到后构建。

出现以下信息即成功:
在这里插入图片描述

如果这篇文章对您有些许帮助,请帮忙点个赞👍或收个藏📃。您的支持是我继续创作的动力💪!


不要害怕,不要着急。保持每日的前进☀️与积极的内心❤️,命运总在曲折中馈赠最好的礼物。

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

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

相关文章

LabVIEW高冲击加速度校准系统

在国防科技领域,高 g 值加速度传感器广泛应用于先进兵器研制,如深侵彻系统、精确打击弹药及钻地弹药等。其性能指标直接影响研究结果的准确性与可靠性,因此对该传感器进行定期校准意义重大。高冲击加速度校准系统具备多方面功能,适…

FPGA 纯逻辑NVME raid0 IP核

系统采用XCZU19EG搭载4个三星990 PRO SSD 单盘读写不低于3GB/s 4盘总带宽不低于12GB/s

GStreamer开发笔记(三):测试gstreamer/v4l2+sdl2/v4l2+QtOpengl打摄像头延迟和内存

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/147714800 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、O…

CATIA高效工作指南——零件建模篇(二)

一、PowerCopy特征复用技术 1.1 智能特征封装 通过​​几何图形集(Geometrical Set)​​构建参数化特征组,将关联的草图、曲面、实体等元素进行逻辑封装。操作流程如下: 创建新几何图形集并完成特征建模激活PowerCopy命令,选择目标几何集定…

CentOS 7 安装OpenJDK 17 JRE

CentOS 7 自带的java 版本为:java version "1.8.0_311", 有些软件的运行需要更高的java版本。CentOS 7 自带的默认仓库里 没有 OpenJDK 17,但是 Adoptium 项目(前身 AdoptOpenJDK)提供了稳定的 OpenJDK 17 版…

【c++】 我的世界

太久没更新小游戏了 给个赞和收藏吧&#xff0c;求求了 要游戏的请私聊我 #include <iostream> #include <vector>// 定义世界大小 const int WORLD_WIDTH 20; const int WORLD_HEIGHT 10;// 定义方块类型 enum BlockType {AIR,GRASS,DIRT,STONE };// 定义世界…

angular的cdk组件库

目录 一、虚拟滚动 一、虚拟滚动 <!-- itemSize相当于每个项目的高度为30px --><!-- 需要给虚拟滚动设置宽高&#xff0c;否则无法正常显示 --> <cdk-virtual-scroll-viewport [itemSize]"40" class"view_scroll"><div class"m…

视频编解码学习三之显示器

整理自&#xff1a;显示器_百度百科&#xff0c;触摸屏_百度百科,百度安全验证 分为阴极射线管显示器&#xff08;CRT&#xff09;&#xff0c;等离子显示器PDP&#xff0c;液晶显示器LCD 液晶显示器的组成。一般来说&#xff0c;液晶显示器由以下几个部分组成&#xff1a; […

尚硅谷-硅谷甄选项目记录

一、Vue3 1 基础配置 1.1 路径别名 vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue// 引入path&#xff0c;node提供的模块&#xff0c;可以获取文件或文件夹的路径 import path from pathexport default defineConfig({plugins: […

ThinkPHP5 case when的使用

主表的类型不同&#xff0c;需要连接查询不同的表时&#xff0c;可以使用case when 在主表(上面的表中)的模型里面&#xff0c;写如下代码来获取列表&#xff1a; $res $this->alias("p")->field([p.*,"CASE WHEN p.pd_ticket_type 1 THEN (select s.s…

Android 10.0 SharedPreferences in credential encrypted storage are not avai

1.前言 在10.0的系统rom定制化开发中,在开机的过程中,由于某些应用在开机解锁阶段就开始访问查询短信和联系人等功能,所以 会出现抛异常的情况出现,接下来分析下相关的情况,然后来解决这些问题 2.SharedPreferences in credential encrypted storage are not available …

LeetCode[102]二叉树的层序遍历

思路&#xff1a; 题目描述从左到右一层一层的进行遍历&#xff0c;就遍历二叉树的这种题我更喜欢用递归来做&#xff0c; 我使用java来做的&#xff0c;结果集是两个List集合&#xff0c;那么我们是不是应该每到新的一层就给这个结果集添加一个内部的List&#xff0c;那么怎么…

二种MVCC对比分析

文章目录 前言MVCCInnodb的MVCC版本链回滚与提交可见性判断 Oracle的MVCC版本链 PostgreSQL的MVCCMVCC实现可见性判断特点 前言 ​ MVCC&#xff08;多版本并发控制&#xff0c;Multi-Version Concurrency Control&#xff09;是一种数据库管理系统&#xff08;DBMS&#x…

FAST-LIO笔记

1.FAST-LIO FAST-LIO 是一个计算效率高、鲁棒性强的激光-惯性里程计系统。该系统通过紧耦合的迭代扩展卡尔曼滤波器&#xff08;IEKF&#xff09;将激光雷达特征点与IMU数据进行融合&#xff0c;使其在快速运动、噪声较大或环境复杂、存在退化的情况下仍能实现稳定的导航。 1…

C++并发编程完全指南:从基础到实践

在当今多核处理器普及的时代&#xff0c;充分利用硬件并发能力已成为高性能编程的关键。C11引入的现代并发编程支持使得开发者能够以标准化、可移植的方式编写多线程程序。本文将全面介绍C并发编程的各个方面&#xff0c;从基础概念到实际应用&#xff0c;帮助您掌握这一重要技…

如何使用docker配置ros-noetic环境并使用rviz,gazebo

参考链接&#xff1a;【Ubuntu】Docker中配置ROS并可视化Rviz及Gazebo_docker ros-CSDN博客 前言&#xff1a; 其实这个东西是相当必要的&#xff0c;因为我们有时候需要在一台电脑上跑好几个项目&#xff0c;每个项目都有不同的依赖&#xff0c;这些依赖冲突搞得人头皮发麻&…

使用 Java 11 的 HttpClient 处理 RESTful Web 服务

在现代 Web 开发中,与 RESTful Web 服务交互是一项核心任务。Java 作为一种广泛使用的编程语言,提供了多种处理 HTTP 请求的方法。在 Java 11 之前,开发者通常使用 HttpURLConnection 或第三方库(如 Apache HttpClient)。然而,这些方法要么过于底层,要么需要额外依赖。J…

JVM——垃圾回收

垃圾回收 在Java虚拟机&#xff08;JVM&#xff09;的自动内存管理中&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;是其核心组件之一。它负责回收堆内存中不再使用的对象所占用的内存空间&#xff0c;以供新对象的分配使用。下面我们将深入探讨JVM中的…

经典密码学算法实现

# AES-128 加密算法的规范实现&#xff08;不使用外部库&#xff09; # ECB模式S_BOX [0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B,0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0x…

追踪大型语言模型的思想(下)(来自针对Claude的分析)

多步推理 正如我们上面所讨论的&#xff0c;语言模型回答复杂问题的一种方式就是简单地记住答案。例如&#xff0c;如果问“达拉斯所在州的首府是哪里&#xff1f;”&#xff0c;一个“机械”的模型可以直接学会输出“奥斯汀”&#xff0c;而无需知道德克萨斯州&#xff0c;达拉…