Docker全阶段详解

1. Docker发展与简介

1.1 云服务与虚拟化基础
1.1.1 云服务模型介绍

云计算通过网络为用户提供可伸缩的计算资源,主要分为以下几种类型:

  • IaaS(基础设施即服务):提供虚拟化计算资源(如虚拟机、存储、网络等)。用户可以灵活配置自己的计算环境,负责安装操作系统、管理资源等。优点是灵活度高、可扩展性强;缺点是管理复杂,需要较多技术支持。

  • PaaS(平台即服务):提供一个开发平台,用户可以在上面开发应用程序,而无需关注底层硬件或操作系统。优点是简化开发过程,适合开发者;缺点是灵活度较低,可能受到平台限制。

  • SaaS(软件即服务):提供已经构建好的应用程序,用户可以直接使用,无需安装和维护。优点是快速部署,省时省力;缺点是定制化差,依赖于服务提供商。

  • DaaS(数据即服务):提供数据处理和分析服务,用户可以访问、分析云端存储的大数据。优点是降低用户管理数据的难度;缺点是可能涉及数据隐私问题。

1.1.2 常见云服务提供商

市场上主要的云服务提供商包括阿里云、腾讯云、AWS、Google Cloud、华为云等。这些提供商通常提供各种服务,如存储、计算、网络、CDN等。

1.2 虚拟化技术概述
1.2.1 虚拟化基础
  • 虚拟化类型

    • 全虚拟化:虚拟化软件完全模拟硬件环境,允许多个操作系统共享硬件资源,彼此之间相互独立。适用场景是需要兼容多个操作系统(如Linux与Windows同时运行)的环境。

    • 半虚拟化:虚拟机与宿主操作系统协作,通过修改操作系统内核来提高性能。适用场景是高性能需求的环境,尤其是优化了开源操作系统(如Linux)的虚拟化。

  • 虚拟化产品

    • VMware:广泛使用的企业级虚拟化平台,支持全虚拟化和半虚拟化。

    • KVM:Linux内核中的虚拟化解决方案,支持硬件虚拟化。

    • Hyper-V:由微软推出的虚拟化平台,集成于Windows Server中。

    • VirtualBox:适用于个人和开发者的虚拟化产品,跨平台支持(Linux、macOS、Windows)。

1.3 Docker简介及其重要性
1.3.1 为什么使用Docker

Docker是一种容器化技术,它使得开发者可以将应用及其依赖打包到一个标准化的容器中,从而在任何环境下都能一致地运行。容器技术相比传统的虚拟化技术(如VMware)具有显著优势。传统虚拟化需要在每个虚拟机中运行完整的操作系统,资源消耗大,而Docker仅在宿主操作系统上运行多个隔离的容器,不需要完整的操作系统,大大减少了系统开销和资源浪费。

通过Docker,应用可以更轻松地实现跨平台部署和运行。例如,一个应用程序可以被打包成一个容器,在不同的操作系统上(如CentOS到Ubuntu)无缝迁移,确保应用始终以相同的方式运行。

1.3.2 Docker发展历史

Docker由Solomon Hykes和他的团队在2013年从DotCloud开始开发。其主要发展节点包括:

  • 2013年:Docker项目发布;

  • 2014年:Docker公司成立;

  • 2015年:发布Docker 1.8,引入新的网络架构和卷管理;

  • 2017年:发布Docker Enterprise Edition(企业版)和Docker Community Edition(社区版),并开始时间驱动的版本发布;

  • 2018年:发布Docker 18.09,加入新的构建功能和改进的性能,重点是多阶段构建和新的容器日志功能;

  • 2019年:发布Docker 19.03,新增对GPU加速的支持,以及Docker CLI的改进;

  • 2020年:发布Docker 20.10,新增对Docker Compose v2的支持,并在性能、功能和稳定性方面进行了一系列增强;

  • 2021年:进一步优化本地开发工具,增强与Kubernetes的集成;

  • 2022年:加大对开发者体验的关注,推出对GitHub等工具的深度集成;

  • 2023年:进一步增强对云原生应用的支持,特别是对Kubernetes生态系统的集成增强。

1.3.3 Docker版本:CE vs EE

Docker提供了两个主要版本:

  • Docker Community Edition(CE):适用于个人开发者或小型团队,提供基本的容器功能,免费使用。

  • Docker Enterprise Edition(EE):适用于大规模生产环境,强调企业级的安全性和支持,通常是付费版本。

每个版本的发布周期不同,CE通常每个月发布新版本,而EE版本则会有更长的维护周期。

1.3.4 Docker与传统虚拟化的区别

Docker通过操作系统级虚拟化(LXC)提供轻量级的虚拟化,容器之间共享宿主机的操作系统内核,因此相比传统虚拟机,Docker容器更加轻便、高效。

特性 Docker容器 虚拟机
启动速度 秒级 分钟级
计算能力损耗 几乎无 损耗50%左右
性能 接近原生 弱于
系统支持量(单机) 上千个 几十个
隔离性 资源隔离/限制 完全隔离
1.3.5 容器化技术的生态系统

容器技术是一种轻量级、提供隔离的虚拟化技术。一些知名的容器技术包括:

  • Docker:市场上最为知名和流行的容器框架之一,拥有完善的生态系统和活跃的社区。

  • Kubernetes:Google开发并开源的容器编排平台,可以管理、调度和扩展容器的应用。

  • OpenShift:Red Hat提供的开源容器平台,基于Kubernetes,但提供了更丰富的功能。

  • LXC:Linux容器技术,比Docker更接近传统的虚拟化技术,可以看作是轻量级的VM。

  • Rkt:由CoreOS开发的一种容器技术,设计上有别于Docker,更注重于安全性和模块化。

  • Apache Mesos:一种用于大规模数据中心的容器编排平台,可以与其他调度系统集成。

  • Containerd:开源的容器运行时,是Docker的核心组件之一,用于管理完整的容器生命周期。

  • Crio:轻量级的容器运行时,专门用于Kubernetes。

  • Singularity:专注于面向性能敏感和计算密集型应用程序的容器技术。

  • Podman:与Docker相似,但无需守护进程,支持运行和管理OCI容器和镜像。

1.3.6 Docker容器的优势
  • 移植性:应用和其依赖打包在容器中,跨平台和跨环境运行无缝。

  • 隔离性:容器内的应用互相隔离,不会影响宿主机或其他容器。

  • 效率高:由于不需要完整的操作系统,容器消耗的资源少,启动速度快。

  • 简化部署:通过Docker,可以轻松创建、复制、修改和删除容器,简化了应用部署和管理的复杂度。

1.3.7 容器技术的应用场景
  • CI/CD(持续集成与持续交付):利用Docker快速构建和部署应用,保证开发、测试、生产环境的一致性。

  • 微服务架构:容器技术与微服务架构相得益彰,可以独立部署和扩展每个微服务。

  • 多云与混合云环境:容器跨平台能力使得应用能在不同云环境和本地环境间无缝迁移。

1.4 Docker基础概念
1.4.1 Docker简介
  • Docker的Logo设计:Docker的Logo设计为一条蓝色鲸鱼,拖着许多集装箱。鲸鱼代表宿主机,集装箱代表相互隔离的容器,每个集装箱中都包含自己的应用程序。

  • Docker的设计宗旨:Build, Ship and Run Any App, Anywhere。通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的"一次封装,到处运行"的目的。

1.4.2 Docker核心概念重点
  • 镜像(Image):包含应用程序及其所有依赖环境的可执行包。它是一个只读模板,基于该模板可以创建容器实例。

  • 容器(Container):镜像的运行实例。容器提供了与外部环境隔离的运行时环境,可以在不同的系统上运行。

  • 仓库(Repository):存放Docker镜像的地方。Docker Hub是最常用的公共仓库,用户也可以创建私有仓库。

1.4.3 Docker安装与配置

Docker目前仅支持64位系统。安装步骤包括关闭防火墙和SELinux,安装依赖包,设置阿里云镜像源,安装Docker-CE并设置为开机自动启动。

1.4.4 Docker与传统虚拟化的区别

Docker容器通过操作系统级虚拟化(LXC)提供轻量级的虚拟化,容器之间共享宿主机的操作系统内核,因此相比传统虚拟机,Docker容器更加轻便、高效。

2. Docker容器管理

2.1 Docker镜像操作
  • 搜索镜像 :使用docker search命令在Docker Hub上搜索相关的镜像。

  • 获取镜像 :使用docker pull命令从Docker Hub拉取镜像。

  • 镜像加速下载:配置阿里云、华为云等镜像加速器来提高镜像下载速度。

  • 查看镜像信息 :使用docker images命令查看本地所有镜像。

  • 获取镜像详细信息 :使用docker inspect命令获取指定镜像的详细信息。

  • 为本地镜像添加标签 :使用docker tag命令为本地镜像添加新的标签。

  • 删除镜像 :使用docker rmi命令删除指定标签的镜像。

  • 存储镜像(导出) :使用docker save命令将本地镜像保存为tar包。

  • 载入镜像(导入) :使用docker load命令从本地tar文件中加载镜像。

  • 上传镜像到Docker Hub :使用docker tagdocker push命令将本地镜像上传到Docker Hub。

2.2 Docker容器操作
  • 创建容器 :使用docker create命令创建一个新容器,但不启动它。

  • 启动容器 :使用docker start命令启动已创建的容器。

  • 停止容器 :使用docker stop命令停止正在运行的容器。

  • 查看容器状态 :使用docker ps命令查看正在运行的容器,使用docker ps -a查看所有容器。

  • 创建并启动容器 :使用docker run命令等同于先执行docker create命令,再执行docker start命令。

  • 在后台持续运行容器 :使用docker run -d命令让Docker容器以守护形式在后台运行。

  • 容器交互 :使用docker exec命令进入运行着的容器。

  • 复制到容器中 :使用docker cp命令将宿主机的文件复制到容器内部,或将容器内部的文件复制到宿主机。

  • 容器的导出与导入 :使用docker exportdocker import命令将容器导出为文件,或从文件导入容器。

  • 删除容器 :使用docker rm命令删除容器。

3. Docker网络管理

3.1 Docker网络实现原理

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。

3.2 Docker的网络模式
  • Host模式:容器与宿主机共享网络环境,不具备独立的IP和网卡,而是使用宿主机的IP和端口。

  • Container模式:新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。

  • 无网络模式(None):容器没有网络配置,只有回环接口(lo)。

  • 桥接模式(Bridge):默认的网络模式,容器使用独立Network Namespace,并连接到docker0虚拟网卡。

  • 自定义模式:用户可以自定义容器的网络范围、子网和路由,从而提供更高的网络控制和隔离性。

4. 资源限制

4.1 CPU资源控制
  • 设置CPU使用率上限 :使用--cpu-period--cpu-quota参数控制CPU使用率。

  • 设置CPU占用比(权重) :使用--cpu-shares参数指定相对权重。

  • 绑定指定CPU :使用--cpuset-cpus参数将容器进程绑定到宿主机的指定CPU核上。

4.2 内存使用限制
  • 限制容器可用的物理内存 :使用-m--memory参数。

  • 限制容器可用的物理内存+swap总量 :使用--memory-swap参数。

4.3 磁盘IO(blkio/io)控制
  • 限制设备读写带宽与IOPS :使用--device-read-bps--device-write-bps--device-read-iops--device-write-iops等参数。

5. 数据卷容器(Data Volumes Containers)

5.1 数据卷

数据卷是Docker中一种专门为容器提供持久化存储的机制。通过使用数据卷,容器可以在其生命周期内访问和修改数据,而不会影响镜像本身。

5.2 数据卷容器

数据卷容器是一种专门用于共享数据的容器,它不是用于运行应用程序的容器,而是仅仅提供一个数据卷,供其他容器挂载并使用。

6. 端口映射

端口映射将宿主机的端口映射到容器内的端口,从而使得外部网络能够通过访问宿主机的端口,进而访问容器内的服务。

7. 容器互联

容器互联是一种让容器之间能够通过网络相互通信的机制。通过在容器间建立网络通信隧道,源容器和接收容器可以互相看到对方的指定信息。

8. Docker镜像的创建

Docker提供了多种方式来创建镜像,常见的有三种方法:基于已有镜像创建、基于本地模板创建和基于Dockerfile创建。

8.3.1 Dockerfile操作常用指令
  • FROM:指定新镜像基于的基础镜像。

  • MAINTAINER:指定镜像的维护者信息。

  • RUN:执行命令并将结果提交到镜像中。

  • ENTRYPOINT:设置容器启动时默认执行的命令。

  • CMD:容器启动时执行的默认命令。

  • EXPOSE:声明容器内的端口。

  • ENV:设置环境变量。

  • ADD:将文件或目录从宿主机复制到镜像中。

  • COPY:将本地文件或目录复制到镜像中。

  • VOLUME:在容器中创建挂载点。

  • USER:设置容器内运行命令时的用户。

  • WORKDIR:设置后续指令的工作目录。

  • ONBUILD:设置当该镜像作为基础镜像时,后续Dockerfile执行的命令。

  • HEALTHCHECK:设置容器的健康检查。

9. Docker Compose编排

9.1 简介

Docker Compose是一个用于定义和运行多容器Docker应用的工具。通过Docker Compose,可以在一个YAML配置文件中定义多个服务,并实现容器之间的联动,简化了应用的部署和管理。

9.3 YAML文件格式及编写注意事项
  • 基本语法:YAML是大小写敏感的,使用空格进行缩进,列表项使用短横线表示,字典使用冒号连接键值对。

  • 常用字段 :包括buildimagecommandcontainer_nameenvironmentnetworksportsvolumes等。

9.4 准备Nginx配置

nginx/nginx.conf中,配置Nginx作为反向代理,转发请求到Tomcat服务。

9.5 编写docker-compose.yml

编写docker-compose.yml配置文件,定义Nginx和Tomcat两个服务。

9.6 启动服务

通过docker-compose up -d命令启动项目。

10. Docker-Harbor私有仓库部署与管理

10.1 搭建本地私有仓库
  • 下载registry镜像 :使用docker pull registry命令下载官方的registry镜像。

  • 配置Docker守护进程 :编辑/etc/docker/daemon.json文件,添加私有仓库地址。

  • 运行Registry容器 :使用docker run命令运行一个registry容器,指定本地存储路径和端口映射。

10.2 Harbor简介

Harbor是一个企业级的Docker镜像仓库管理平台,提供了图形化管理界面、角色访问控制、镜像复制、LDAP集成等功能。

10.3 部署Harbor服务
  • 安装Docker Compose :使用curl命令下载并安装Docker Compose。

  • 下载Harbor安装包:从Harbor官网下载离线安装包。

  • 修改Harbor配置文件 :在/usr/local/harbor/目录中修改harbor.yml配置文件,设置Harbor服务器的地址、管理员密码等。

  • 启动Harbor :运行./prepare./install.sh命令启动Harbor服务。

10.4 客户端上传镜像
  • 配置Docker客户端 :在Docker客户端配置文件中添加--insecure-registry参数,确保Docker客户端能够访问私有仓库。

  • 上传镜像 :使用docker logindocker tagdocker push命令上传镜像到Harbor。

10.5 维护管理Harbor
  • 通过Harbor Web创建项目:在Harbor仓库中创建新项目。

  • 创建Harbor用户:在Web管理界面中创建新用户并分配权限。

  • 查看日志:通过Harbor的Web界面查看操作日志。

  • 修改Harbor.cfg配置文件 :修改harbor.yml配置文件中的可选参数,更新Harbor的配置。

  • 移除Harbor服务容器 :使用docker-compose down -v命令移除Harbor服务容器,同时保留镜像数据和数据库。

Docker全阶段精炼总结

1. Docker基础

  • 云服务与虚拟化:理解IaaS、PaaS、SaaS、DaaS的区别。

  • Docker简介:轻量级容器技术,简化应用部署和管理。

  • 安装与配置:掌握Docker的安装步骤和基本配置。

2. 容器管理

  • 镜像操作:搜索、获取、加速下载、查看、添加标签、删除、存储和导入导出镜像。

  • 容器操作:创建、启动、停止、查看状态、后台运行、交互、复制文件、导出导入和删除容器。

3. 网络与资源管理

  • 网络模式:Host、Container、无网络、桥接和自定义模式。

  • 资源限制:CPU、内存和磁盘IO的控制。

4. 数据与编排

  • 数据卷和容器互联:提供持久化存储和容器间通信。

  • Docker Compose:通过YAML文件管理多容器应用。

5. Harbor私有仓库

  • Harbor部署:企业级镜像仓库,支持图形化管理、角色访问控制、镜像复制等功能。
相关推荐
aml258__2 小时前
一、Cisco( OSPF多区域与路由汇总技术实践:ABR优化网络路由表实验)251220
运维·网络·动态路由协议·网络优化·ospf多区域·abr·路由汇总
Web极客码2 小时前
使用 apt 和 dpkg 查看Ubuntu 22.04已安装的软件
linux·运维·ubuntu
appleyk2 小时前
MacOS-12(Intel) Docker部署Dify1.11.1
macos·docker·agent·dify·dify部署
无极小卒2 小时前
Nginx服务器无法访问图片的问题解决
运维·服务器·nginx
rchmin2 小时前
云原生与DevOps关系解析
运维·云原生·devops
txzz88882 小时前
CentOS-Stream-10 YUM第三方库配置
linux·运维·服务器·centos·yum第三方库配置
清水白石0083 小时前
以领域为中心:Python 在 DDD(领域驱动设计)中的落地实践指南
java·运维·python
眠りたいです3 小时前
Docker:认识Docker镜像仓库并进行拉取推送
运维·nginx·docker·容器·busybox
不想画图3 小时前
Ansible自动化运维工具及基础用法
运维·自动化·ansible