Docker简介及部署
Docker简介
Docker是一种开源的容器化平台,用于构建、部署和运行应用程序。通过容器化技术,Docker将应用程序及其依赖项打包在一个轻量级、可移植的容器中,确保在不同环境中的一致性。与虚拟机相比,Docker容器共享主机操作系统内核,启动更快且资源占用更少。
核心概念
镜像(Image)
- 镜像(Image):只读模板,包含运行应用程序所需的代码、库和配置。
容器(Container)
- 容器(Container):镜像的运行实例,具有独立的文件系统和网络。
仓库(Registry)
- 仓库(Registry):存储和分发镜像的平台,如Docker Hub。
docker与虚拟化的对比
虚拟机 | docker容器 | |
---|---|---|
操作系统 | 宿主机上运行虚拟机OS | 共享宿主机OS |
存储 | 镜像较大(GB | 镜像小(MB) |
性能 | 操作系统额外的cpu、内存消耗 | 几乎无性能损耗 |
移植性 | 笨重、与虚拟化技术耦合度高 | 轻量、灵活迁移 |
隔离性 | 完全隔离 | 安全隔离 |
部署 | 慢、分钟级 | 快速、秒级 |
运行密度 | 一般几十个 | 单机支持上千容器 |
Docker的优势
轻量化和高效性
与传统虚拟机相比,Docker容器共享主机操作系统内核,无需运行完整的操作系统。这使得容器启动更快、占用资源更少,同时保持应用程序的隔离性。
跨平台和一致性
Docker通过容器化技术确保应用在不同环境(开发、测试、生产)中运行一致,避免“在我机器上能运行”的问题。支持Windows、Linux和macOS等多种平台。
快速部署和扩展
Docker容器可以在几秒内启动和停止,适合持续集成/持续部署(CI/CD)流程。结合编排工具(如Kubernetes),可实现自动化扩展和管理大规模容器集群。
隔离性和安全性
每个容器运行在独立的环境中,进程、文件系统和网络相互隔离,减少应用间的冲突。虽然安全性弱于虚拟机,但可通过命名空间、控制组(cgroups)等机制增强隔离性。
丰富的生态系统
Docker Hub提供海量官方和社区维护的镜像,涵盖数据库、中间件、开发工具等,简化了依赖管理和环境搭建。
微服务架构支持
Docker天然适合微服务,允许将应用拆分为多个独立容器,每个服务可单独开发、部署和扩展,提高系统灵活性和可维护性。
版本控制和回滚
Docker镜像支持分层存储和版本管理,便于追踪变更。若新版本出现问题,可快速回滚到旧版镜像,减少停机时间。
资源利用率优化
容器共享主机资源,无需为每个应用分配固定资源(如虚拟机内存),能更高效利用CPU、内存和存储,降低硬件成本。
开发效率提升
开发者通过Dockerfile定义环境,团队可快速复现相同配置,减少环境配置时间,专注于代码而非系统依赖问题。
Docker部署(rhel9为例)
配置软件仓库
vim /etc/yum.repos.d/docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable
gpgcheck=0
安装docker-ce并启动服务
[root@client ~]# yum makecache #更新缓存
正在更新 Subscription Management 软件仓库。
无法读取客户身份本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。CentOS-9-stream - Base - mirrors.aliyun.com 25 kB/s | 3.9 kB 00:00
CentOS-9-stream - Base - mirrors.aliyun.com 4.7 MB/s | 8.8 MB 00:01
CentOS-9-stream - AppStream - mirrors.aliyun.com 16 kB/s | 4.4 kB 00:00
CentOS-9-stream - AppStream - mirrors.aliyun.com 4.3 MB/s | 25 MB 00:05
docker-ce 88 kB/s | 32 kB 00:00
Extra Packages for Enterprise Linux 9 - x86_64 2.2 kB/s | 6.9 kB 00:03
Extra Packages for Enterprise Linux 9 - x86_64 87 kB/s | 20 MB 03:55
Extra Packages for Enterprise Linux 9 openh264 (Fro 63 B/s | 993 B 00:15
元数据缓存已建立。
[root@client ~]# yum install docker-ce -y
====================================================================================软件包 架构 版本 仓库 大小
====================================================================================
安装:docker-ce x86_64 3:28.5.1-1.el9 docker 21 M
安装依赖关系:containerd.io x86_64 1.7.28-1.el9 docker 46 Mdocker-ce-cli x86_64 1:28.5.1-1.el9 docker 8.6 M
安装弱的依赖:docker-buildx-plugin x86_64 0.29.1-1.el9 docker 17 Mdocker-ce-rootless-extras x86_64 28.5.1-1.el9 docker 3.4 Mdocker-compose-plugin x86_64 2.40.0-1.el9 docker 15 M事务概要
====================================================================================
安装 6 软件包总下载:111 M
安装大小:442 M
下载软件包:
(1/6): docker-buildx-plugin-0.29.1-1.el9.x86_64.rpm 1.5 MB/s | 17 MB 00:11
(2/6): docker-ce-28.5.1-1.el9.x86_64.rpm 1.8 MB/s | 21 MB 00:11
(3/6): docker-ce-rootless-extras-28.5.1-1.el9.x86_6 607 kB/s | 3.4 MB 00:05
(4/6): containerd.io-1.7.28-1.el9.x86_64.rpm 2.4 MB/s | 46 MB 00:19
(5/6): docker-ce-cli-28.5.1-1.el9.x86_64.rpm 973 kB/s | 8.6 MB 00:09
(6/6): docker-compose-plugin-2.40.0-1.el9.x86_64.rp 2.7 MB/s | 15 MB 00:05
[root@client ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
设定docker加速器
[root@client ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.m.daocloud.io"]
}
[root@client ~]# systemctl restart docker
Docker的基本操作
镜像管理
Docker镜像是容器的基础。从Docker Hub拉取镜像:
docker pull ubuntu:latest
列出本地所有镜像:
docker images
删除不需要的镜像:
docker rmi <image_id>
容器操作
运行一个新容器:
docker run -it ubuntu /bin/bash
列出正在运行的容器:
docker ps
列出所有容器(包括停止的):
docker ps -a
停止容器:
docker stop <container_id>
启动已停止的容器:
docker start <container_id>
删除容器:
docker rm <container_id>