Docker 基本管理
Docker 是一个开源的容器化平台,旨在帮助开发人员、系统管理员和 DevOps 团队更轻松地打包、交付和运行应用程序。通过使用 Docker,用户可以将应用程序及其依赖项打包到一个独立的容器中,实现应用程序在不同环境中的一致性运行。Docker 提供了一种轻量级、灵活和可移植的解决方案,使应用程序的部署和管理变得更加简单和高效。Docker是一个开源的应用容器引擎,基于go语言开发并遵循了ap
一、前言
1. 云端服务提供商
国内云服务提供商:
- 阿里云(Alibaba Cloud):
- 阿里巴巴集团旗下的云计算服务提供商,提供计算、存储、数据库、安全、人工智能等服务。阿里云在中国乃至全球的市场份额逐渐增加,适用于亚洲地区的用户和跨境业务。
- 腾讯云(Tencent Cloud):
- 腾讯提供的云计算服务,包括计算、存储、数据库、人工智能、区块链等服务。腾讯云在中国市场具有较大影响力,适用于各种互联网和企业应用场景。
- 华为云(Huawei Cloud):
- 华为提供的云计算服务,包括计算、存储、数据库、人工智能、物联网等服务。华为云在中国及全球市场逐渐扩大,适用于各种行业和领域的用户。
-
京东云(JD Cloud):
京东集团旗下的云计算服务提供商,提供计算、存储、数据库、人工智能、大数据等服务。京东云在中国云计算市场占有一席之地。
-
网易云(NetEase Cloud):
网易提供的云计算服务,包括云主机、对象存储、CDN 加速等服务。网易云适用于游戏、媒体等行业的用户。
国际云服务提供商:
-
亚马逊云(Amazon Web Services,AWS):
- 提供全球领先的云计算服务,包括计算、存储、数据库、人工智能、物联网等服务。AWS 在全球范围内拥有广泛的用户群体,适用于各种规模和类型的企业和个人用户。
- 微软云 Azure:
- 微软提供的云计算平台,提供基础设施即服务、平台即服务和软件即服务等服务。Azure 在全球范围内具有较大的市场份额,适用于企业的混合云解决方案和应用程序开发。
- 谷歌云(Google Cloud Platform,GCP):
- 谷歌提供的云计算服务,包括计算、存储、数据库、人工智能、大数据等服务。GCP 在人工智能和数据分析领域具有优势,适用于需要大规模数据处理和人工智能应用的用户。
- IBM 云(IBM Cloud):
- IBM 提供的云计算服务,包括基础设施即服务、平台即服务、软件即服务等。IBM 云在企业级解决方案和混合云环境方面具有丰富的经验和技术积累。
2. 云计算服务模式
云计算的服务模式通常包括以下几种主要形式:
- IaaS:基础设施即服务(Infrastructure as a Service):
- 在基础设施即服务模式下,云服务提供商提供基础的计算、存储、网络等基础设施资源,用户可以根据需求自行管理和配置这些资源。用户可以按需使用虚拟机、存储空间、网络带宽等资源,实现灵活的扩展和管理。
- PaaS:平台即服务(Platform as a Service):
- 在平台即服务模式下,云服务提供商提供应用程序开发和部署所需的平台和工具,包括开发环境、数据库管理系统、应用程序部署环境等。用户可以在提供的平台上开发、测试和部署应用程序,无需关注底层基础设施的管理。
- SaaS:软件即服务(Software as a Service):
- 软件即服务模式是指云服务提供商将应用程序作为服务提供给用户,用户通过互联网访问和使用这些应用程序,而无需安装和管理软件。常见的 SaaS 应用包括电子邮件、在线办公套件、客户关系管理等。
目前国内使用最多的服务模式为 PaaS ,国外使用最多的服务为 SaaS 。
二、虚拟化概述
1. Docker 是什么产品?
Docker 是一个开源的容器化平台,旨在帮助开发人员、系统管理员和 DevOps 团队更轻松地打包、交付和运行应用程序。通过使用 Docker,用户可以将应用程序及其依赖项打包到一个独立的容器中,实现应用程序在不同环境中的一致性运行。Docker 提供了一种轻量级、灵活和可移植的解决方案,使应用程序的部署和管理变得更加简单和高效。
2. 虚拟化产品有哪些?
当按照不同类型对虚拟化产品进行分类时,可以将它们分为以下几类,并列举一些代表性的产品:
-
全虚拟化(Full Virtualization):
- VMware vSphere:提供全面的虚拟化功能,适用于企业数据中心和云环境。
- Microsoft Hyper-V:微软的虚拟化平台,可在 Windows Server 上运行虚拟化环境。
- Citrix XenServer:开源虚拟化平台,适用于企业虚拟化部署。
- 硬件辅助虚拟化(Hardware-assisted Virtualization):
- KVM (Kernel-based Virtual Machine)**:基于 Linux 内核的虚拟化解决方案。
-
桌面虚拟化(Desktop Virtualization):
- Oracle VM VirtualBox:免费的开源虚拟化软件,适用于桌面虚拟化环境。
- VMware Workstation:用于桌面虚拟化和开发测试环境的产品。
- Parallels Desktop:专为 Mac 用户设计的桌面虚拟化软件。
-
容器虚拟化(Containerization):
- Docker:流行的容器化平台,用于构建、发布和管理容器化应用程序。
- Kubernetes:用于自动部署、扩展和管理容器化应用程序的开源平台。
- OpenShift:基于 Kubernetes 的容器应用平台,提供企业级容器化解决方案。
-
开源虚拟化平台(Open Source Virtualization Platforms):
- KVM:基于 Linux 内核的开源虚拟化技术。
- Proxmox Virtual Environment:基于 KVM 和 LXC 的开源虚拟化平台。
- OpenStack:开源的云计算平台,提供虚拟化、网络和存储服务。
3. 虚拟机架构
3.1 寄居架构
- 本机(真实的操作系统) ----> 虚拟化产品 ----> 虚拟化操作系统或软件
3.2 源生架构
- 裸金属 服务器 ---> 虚拟化产品
4. 虚拟化技术概述
- 仿真虚拟化:对系统硬件没有要求,性能要求最低
- 半虚拟化:虚拟机可以使用真机
- 全虚拟化:直接使用物理硬件,性能要求高
- ① vmware:客户端
- vmware workstation:个人在windows安装的虚拟机
- vmware Fusion MAC
- ② vmware服务端 exsi VMware vsphere 裸金属
- 全虚拟化,直接使用物理硬件,性能高
- 客户端连接 VMware vsphere
- 现企业,网页端连接 VMware vsphere
- ③ KVM、openstack linux环境虚拟机 私有云环境
- KVM基于内核的虚拟机主机
- ④ 半虚拟化:reh1 5 自带的xen(虚拟机监视器)
- 微软:Microsoft Hyper-v
- virtualBOX 7.0--->虚拟盒子
- cirix Hypervisor
- ① vmware:客户端
重点:
① KVM 全虚拟化产品 调用linux内核 来完成
② ESXI (裸金属虚拟化) 企业用的特别多 除了云 就是它
三、Docker 概述
Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,
即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
1. Docker 容器的优点
容器化越来越受欢迎,因为容器是:
- 灵活:即使是最复杂的应用也可以集装箱化。
- 轻量级:容器利用并共享主机内核。
- 可互换:可以即时部署更新和升级。
- 便携式:可以在本地构建,部署到云,并在任何地方运行。
- 可扩展:可以增加并自动分发容器副本。
- 可堆叠:可以垂直和即时堆叠服务。
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
2. Docker与虚拟机的区别:
特点 | 虚拟机 | Docker |
---|---|---|
虚拟化层面 | 使用Hypervisor在物理硬件上创建独立虚拟机 | 利用容器技术在宿主操作系统上创建容器 |
资源利用 | 消耗更多资源(CPU、内存、存储) | 更高的资源利用率 |
启动时间 | 启动时间较长(几分钟) | 启动时间较短(几秒钟) |
性能 | 存在一定性能开销,尤其在I/O和网络方面 | 性能开销较小,速度较快 |
部署复杂度 | 部署和管理相对复杂 | 部署和管理相对简单 |
隔离性 | 较高的隔离性,虚拟机之间相互独立 | 隔离性较弱,容器共享宿主内核 |
3. 容器技术有哪些:
- docker
- podman 与docker相似 OCI redhat
- K8s
- container docker核心组件之一
- LXC linux 容器化技术
- crio: 轻量级 专门用于 k8s
- apche mesos 容器编排平台
4. 容器在内核中支持 2 种重要技术:
docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)。
5. namespace 的六项隔离
namespace | 系统调用参数 | 隔离内容 |
---|---|---|
UTS | CLONE_NEWUTS | 主机名与域名 |
IPC | CLONE_NEWWIPC | 信号量、消息队列和共享内存 |
PID | CLONE_NEWPID | 进程编号 |
NETWORK | CLONE_NEWNET | 网络设备、网络栈、端口等 |
MOUNT | CLONE_NEWNS | 挂载点(文件系统) |
USER | CLONE_NEWUSER | 用户和用户组(3.8以后的内核才支持) |
6. Docker 三个核心概念:
镜像 image
- Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。
- 通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。
- Docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是Docker镜像的精髓。
容器 container
- Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
- 可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。
- 镜像 nginx (run) 起来之后的一个实例,可以把容器看做时一个简易版的linux环境容器 就是集装箱(logo上的集装箱)
仓库 repostory
- Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
- Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker
- 仓库就是放镜像的场所,做大的公开库 docker hub
四、安装 Docker
目前 Docker 只能支持 64 位系统。
#关闭核心防护
systemctl stop firewalld.service
setenforce 0
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
--------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
--------------------------------------------------------------------------------------------
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io 安装最新版本
docker-ce-20.10.18
systemctl start docker.service
systemctl enable docker.service
--------------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。
Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。
大部分情况下Docker服务端和客户端运行在一台机器上。
--------------------------------------------------------------------------------------------
1. 关闭防火墙:
2. 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
--------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
--------------------------------------------------------------------------------------------
3. 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4. 安装 Docker-CE 并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
#安装最新版本
docker-ce-20.10.18
systemctl start docker.service
systemctl enable docker.service
5. 查看 docker 版本信息
docker version
docker 信息查看
docker info
以下是 "docker info" 输出结果的一些常见部分及其可能的含义:
Containers:显示当前正在运行的容器数量以及已经创建的容器总数。这可以帮助您了解当前 Docker 主机上的容器使用情况。
Images:显示 Docker 中可用镜像的数量。这可以让您知道有多少镜像可供使用。
Server Version:显示 Docker 守护程序的版本信息。这对于确定您正在使用的 Docker 版本非常重要。
Storage Driver:显示 Docker 使用的存储驱动程序。存储驱动程序负责管理容器和镜像的存储。
Logging Driver:显示 Docker 使用的日志记录驱动程序。这是指定 Docker 如何记录容器的输出和日志信息的设置。
Cgroup Driver:显示 Docker 使用的 cgroup 驱动程序。cgroup 用于限制和隔离容器的资源使用。
Kernel Version:显示宿主操作系统的内核版本。这是 Docker 运行所依赖的底层操作系统内核的版本信息。
Operating System:显示宿主操作系统的名称。这让您知道 Docker 正在运行的操作系统是什么。
Architecture:显示宿主操作系统的架构。这告诉您 Docker 主机的硬件架构是什么。
CPUs 和 Total Memory:显示宿主系统的 CPU 数量和总内存量。这可以帮助您了解 Docker 主机的硬件配置。
Name of the Docker Host:显示 Docker 主机的名称。这是为了区分不同的 Docker 主机。
Registry Mirrors:显示 Docker 镜像仓库的镜像地址。这可以告诉 Docker 在哪里查找镜像。
五、Docker 镜像操作
1. 搜索镜像
#搜索镜像
格式:docker search 关键字
docker search nginx
2. 获取镜像
#获取镜像 nginx
格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
docker pull nginx
3. 镜像加速下载
#镜像加速下载
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
4. 查看镜像信息
#查看镜像信息
镜像下载后存放在 /var/lib/docker 。
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。
5. 查看下载的镜像文件信息
#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
6. 查看下载到本地的所有镜像
#查看下载到本地的所有镜像
docker images
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
7. 根据镜像的唯一标识 ID 号,获取镜像详细信息
#根据镜像的唯一标识 ID 号,获取镜像详细信息
格式:docker inspect 镜像ID号
docker inspect 2ac752d7aeb1
8. 为本地的镜像添加新的标签
#为本地的镜像添加新的标签
格式:docker tag 名称:[标签] 新名称:[新标签]
docker tag nginx:latest nginx:web
#查看信息
docker images | grep nginx
9. 删除镜像
删除镜像
格式:
docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号 #会彻底删除该镜像
注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
docker rmi nginx:web
10. 存出镜像
#存出镜像:将镜像保存成为本地文件
格式:docker save -o 存储文件名 存储的镜像
docker save -o nginx nginx:latest #存出镜像命名为nginx存在当前目录下
ls -lh
11. 载入镜像
#载入镜像:将镜像文件导入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
docker load < nginx
docker load -i nginx
12. 上传镜像
#上传镜像
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
docker tag nginx:latest soscscs/nginx:web #添加新的标签时必须在前面加上自己的dockerhub的username
docker login #登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web #上传镜像
更多推荐
所有评论(0)