【Docker】Windows11操作系统下安装、使用Docker保姆级教程
大家好 我是寸铁👊
总结了一篇【Docker】Windows11操作系统下安装、使用Docker保姆级教程的文章✨
喜欢的小伙伴可以点点关注 💝
前言
什么是 Docker?
Docker 是一个开源平台,支持开发人员
构建
、
部署
、
运行
、
更新
和
管理
容器,这些容器是标准化的可执行组件,结合了应用源代码以及在任何环境中运行该代码所需的操作系统 (OS) 库和依赖项。
容器简化了
分布式应用的部署和交付
过程。 随着组织转向
云原生
开发和混合多云环境,它们已变得越来越流行。 开发人员可以直接使用 Linux 和其他操作系统中内置的功能,在没有 Docker 的情况下创建容器。 但 Docker 使容器化更加迅速、简便和安全。 截至本文撰写之时,Docker 报告称,已有超过 1300 万名开发人员在使用该平台(链接位于 ibm.com 外部)。
Docker 也指 Docker, Inc.(链接位于 ibm.com 外部),即销售 Docker 商业版本的企业,还可以是 Docker, Inc. 和许多其他组织和个人开展的 Docker 开源项目。
容器的工作原理
容器是通过 Linux 内核中内置的过程
隔离和虚拟化功能
来实现的。 控制组 (
Cgroups)
用于为各进程分配资源,
名称空间(namespace)
用于限制进程访问或对其他资源或系统区域的可视性 ,这些功能支持多个应用组件共享主机操作系统的
单个实例
的资源,这与系统管理程序支持多台虚拟机 (
VM
) 共享单个硬件服务器的
CPU
、
内存
和其他资源的方式大致相同。
容器的架构
Docker 包括三个基本概念:
镜像(Image)
:Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container)
:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的
类和实例
一样,镜像是
静态的定义
,容器是镜像
运行时的实体
。容器可以被
创建
、
启动
、
停止
、
删除
、
暂停
等。
仓库(Repository)
:仓库可看成一个代码控制中心,用来保存
镜像
。
Docker的优势
因此,容器技术可提供虚拟机的所有功能和优势,包括应用隔离、经济高效的可扩展性和可处置性,以及其他重要的优势:
- 更轻巧:与虚拟机不同,容器不会承载整个操作系统实例和系统管理程序的有效负载。 它们仅包括执行代码所需的操作系统进程和依赖项。 容器大小以
兆字节
为单位(某些虚拟机则是以千兆字节
为单位)来衡量,因此它们可以更好地利用硬件容量,启动速度也更快
。 - 提高了开发人员的工作效率:容器化应用可以
“一次编写,随处运行”
。 与虚拟机相比,容器的部署、配置和重启过程更迅速且更简单。 这使得容器非常适合在持续集成和持续交付 (CI/CD)
管道中使用,并且更适合采取敏捷
和DevOps
实践的开发团队。 - 提高了资源利用率:开发人员使用容器在硬件上运行的应用副本数量是使用虚拟机的
数倍
。 这可以减少云支出
。
为何使用 Docker?
Docker 如今非常受欢迎,甚至可以与“容器”一词互换使用。 而在 Docker 于 2013 年面世之前,第一批与容器相关的技术早已存在数年,甚至数十年(链接位于 IBM 外部)。
最值得注意的是,2008 年,Linux 内核中实现了 LinuXContainers (LXC),LXC 完全支持单个 Linux 实例的虚拟化。 虽然目前仍在使用
LXC
,但也提供了使用 Linux 内核的新技术。 现代的开源 Linux 操作系统 Ubuntu 也提供了此功能。
Docker 支持开发人员使用简单的命令访问这些本机容器化功能,并通过节省工作量的应用程序编程接口 (API) 自动执行。 与 LXC 相比,Docker 提供了以下功能:
- 增强的无缝容器
可移植性
:虽然 LXC 容器通常引用特定于机器的配置,但 Docker 容器无需修改即可在任何桌面、数据中心和云环境中运行。 - 更轻巧且
更细粒度的更新
:通过使用 LXC,可以在单个容器中组合多个进程。 这样就可以构建持续运行的应用,即使为了更新或修复而关闭某个部分也不例外。 自动化容器创建
:Docker 可以基于应用源代码自动构建容器。容器版本控制
:Docker 可以跟踪容器映像的版本,回滚到先前的版本,以及跟踪版本的构建者和构建方式。 它甚至可以只上传现有版本和新版本之间的增量
。容器复用
:现有容器可用作基本映像
(本质上类似于用于构建新容器的模板)。共享容器库
:开发人员可以访问包含数千个用户贡献容器的开源注册表
。
如今,Docker 容器化也适用于 Microsoft Windows 和 Apple MacOS。 开发人员可以在任何操作系统上运行 Docker 容器,大多数领先的云提供商(包括 Amazon Web Services (AWS)、Microsoft Azure 和 IBM Cloud)都提供了一些专用服务,这些服务可帮助开发人员构建、部署和运行使用 Docker 进行容器化的应用。
***在初步认识了解了
Docker
后,下面正式进入
Docker
使用环节!***
一、进入Docker官网
首先先到Docker官网下载最新官方Docker for Windows链接:Docker下载
二、启动Microsoft Hyper-V
在电脑上打开“控制面板”->“程序”-> “启动或关闭Windows功能”。
- 勾选
Hype-V
功能
- 并勾选如下内容:
三、安装Docker
在Windows上安装Docker桌面版
- 双击程序,如下:
- 点击OK,确定安装
WSL
- 等待安装完毕!
- 安装完毕后,点击
Close and restart
- 电脑重启后,点击
Docker
程序会看到如下界面
- 默认勾选,点击
Finish
即可完成 - 等待启动
Docker
引擎
- 报错如下:
- 重新更新一下
wsl
版本,如下命令
- 报错如下:点击
restart
重启即可。 - 现在程序正常启动并稳定啦
四、玩转Docker
- 命令行输入如下命令
docker--version
至此就可以在windows上开始Docker之路啦!
五、运行Hello-world
- 运行Hello-world,使用如下命令:
docker pull hello-world
- 查看是否拉取成功?
显示Hello-world镜像确实存在!
- 查看可视化容器镜像,显示如下:
至此拉取Hello-world成功!
六、配置阿里云镜像加速
- 刚才的
pull
操作比较慢,接下来需要配置一下镜像代理,便于更快速的拉取资源! - 登录阿里云官网:镜像加速器(需要账号登录)
地址是免费的,每个人都有。
- 将如下代码添加到
Docker
的设置中
"registry-mirrors":["https://inhj05a1.mirror.aliyuncs.com"]
- 进入设置的页面
- 添加如下:点击
Apply andr esatrt
运用并重启即可
至此配置阿里云镜像加速完毕!
七、容器常用命令
查看版本
docker--version
获取镜像
如果我们本地没有
mysql
镜像,我们可以使用
docker pull
命令来载入
mysql
镜像:
启动容器
以下命令使用
mysql
镜像启动一个容器,参数为以命令行模式进入该容器:
docker run -it mysql /bin/bash
输入
exit
容器停止运行
所以,更常用的是这种后台启动的方式:
docker run -itd mysql /bin/bash
注意每
run
一个就创建一个容器!
参数说明:
-i
: 交互式操作。-t
: 终端。mysql
: mysql镜像。/bin/bash
:放在镜像名后的是命令,这里我们希望有个交互式Shell
,因此用的是/bin/bash
。 要退出终端,直接输入exit
查看容器
常用命令如下:
dockerps-a
dockerps-q
ps
:列出正在运行的容器。
参数说明:
-a
:列出所有容器(包括停止的容器)。-q
:仅显示容器ID。-f
:根据过滤器条件过滤输出。"name=CONTAINER_NAME"
:过滤器条件,匹配指定名称的容器。
停止容器
docker stop 容器ID
重启容器
docker restart 容器ID
发现容器的状态为
Up
代表启动!
查找进程号(PID)
在一些场景中需要,通过容器ID来查找背后的
进程号
(PID),操作如下:
- 先查找容器ID
dockerps-a
- 传入容器ID查找PID
方式二如下:
docker inspect -f'{{.State.Pid}}' 容器ID
方式三如下:
docker container top 容器ID
这里显示pid 需要特别说明一下,容器的
pid
是932 ,
PPID
是它的
父进程
。下面的显示的内容都是它的子进程。
linux
下还提供
ps
命令来提供查询
ps aux |grep 容器ID
运行结果如下:
补充
- 如何通过
PID
来启停一个容器?
在Windows中无法通过
PID
来启停一个容器。
只能通过
docker
命令控制容器的
ID
来启停容器。
但是,linux可以使用
sudo
命令
kill
掉容器的
pid
从而控制容器的停止。
如下,容器被关闭,处于
not running
状态。
看到这里的小伙伴,恭喜你又掌握了一个技能👊
希望大家能取得胜利,坚持就是胜利💪
我是寸铁!我们下期再见💕
往期好文💕
保姆级教程
【保姆级教程】Windows11下go-zero的etcd安装与初步使用
【保姆级教程】Windows11安装go-zero代码生成工具goctl、protoc、go-zero
【Go-Zero】手把手带你在goland中创建api文件并设置高亮
报错解决
【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 报错解决方案及api路由注意事项
【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案
【Go-Zero】【error】 failed to initialize database, got error Error 1045 (28000):报错解决方案
【Go-Zero】Error 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)报错解决方案
【Go-Zero】type mismatch for field “Auth.AccessSecret“, expect “string“, actual “number“报错解决方案
【Go-Zero】Error: user.api 30:2 syntax error: expected ‘)‘ | ‘KEY‘, got ‘IDENT‘报错解决方案
【Go-Zero】Windows启动rpc服务报错panic:context deadline exceeded解决方案
Go面试向
【Go面试向】defer与time.sleep初探
【Go面试向】defer与return的执行顺序初探
【Go面试向】Go程序的执行顺序
【Go面试向】rune和byte类型的认识与使用
【Go面试向】实现map稳定的有序遍历的方式
版权归原作者 寸 铁 所有, 如有侵权,请联系我们删除。