Docker概述
Docker是一个开源的应用容器引擎,它允许开发者将应用及其依赖打包到一个可移植的容器中,这些容器可以在任何流行的Linux或Windows操作系统上运行。Docker通过容器化技术,实现了应用的高效部署、隔离运行和快速启动。
Docker的基本概念
- 容器(Container):Docker容器是运行在Docker上的应用,每个容器都是独立的,相互之间不会互相干扰。容器内部运行着一个或一组应用,并且共享宿主机的内核,没有自己的内核,因此启动速度快、资源利用率高23。
- 镜像(Image):Docker镜像是一个模板,用于创建容器。一个镜像可以创建多个容器,镜像包含了运行应用所需的所有依赖和配置。
- Docker Daemon:Docker守护进程,负责管理容器的生命周期,如启动、停止、删除等操作。
- 客户端(Client):用户通过Docker客户端与Docker守护进程交互,执行各种命令,如下载镜像、创建容器等23。
- 仓库(Registry):存储Docker镜像的地方,可以是公开的(如Docker Hub)或私有的。
Docker的核心技术
Docker使用LXC(Linux Container)技术实现操作系统级别的虚拟化。LXC是一种轻量级的虚拟化技术,通过Linux内核的功能(如cgroups和namespaces)来隔离和分配资源,使得每个容器都有独立的运行环境,但共享宿主机的内核。
Docker的优势
- 快速部署:Docker容器启动迅速,可以在几秒钟内完成部署,适合快速迭代和测试。
- 环境一致性:确保开发、测试和生产环境的一致性,减少因环境差异导致的错误。
- 资源隔离:每个容器运行在独立的沙箱环境中,互不干扰,提高了系统的稳定性和安全性。
- 高效资源利用:Docker可以在一台物理机上运行多个容器,充分利用硬件资源。
- 便携性:容器可以在任何支持Docker的机器上运行,便于迁移和维护。
docker VS 虚拟机
架构差异
Docker:容器化技术
Docker 是一种基于操作系统级虚拟化的技术。它通过将应用及其所有依赖(如库、配置文件、工具等)打包到一个容器中,使得应用在任何地方都能一致地运行。容器共享宿主操作系统的内核,但每个容器在用户空间中运行自己的进程,具有文件系统隔离。
- 隔离级别: 容器与宿主操作系统共享内核,使用不同的进程和文件系统进行隔离。
- 资源占用: 容器启动速度极快,通常只需要几秒钟,占用的资源比虚拟机少得多。
- 跨平台: 由于容器的轻量特性,它能在不同的环境中快速部署,保证一致性。
虚拟机:硬件虚拟化
虚拟机则通过硬件虚拟化将物理机器分割成多个虚拟环境,每个虚拟机都包括完整的操作系统(OS)。虚拟机通过 hypervisor(虚拟机监控程序)在物理主机上模拟出虚拟硬件,并为每个虚拟机提供自己的内核。
- 隔离级别: 虚拟机是完全隔离的,每个虚拟机都有自己的操作系统内核,不共享宿主操作系统的内核。
- 资源占用: 虚拟机通常比容器消耗更多的资源,因为每个虚拟机都包含自己的操作系统。启动时间也更长,通常需要几分钟。
- 跨平台: 虚拟机能够在不同的硬件平台之间迁移,但需要较高的资源支持。
性能对比
由于 Docker 容器直接共享宿主操作系统的内核,它们比虚拟机具有更高的性能。容器的启动时间非常快,可以在几秒钟内完成,而虚拟机的启动通常需要几分钟。容器的资源开销也较低,这使得同一台物理主机可以运行更多的容器,而虚拟机的资源占用则较为高效且需要更多的系统资源。
启动速度:
- Docker: 由于容器不需要启动完整的操作系统,启动速度极快,通常在几秒钟内就能启动。
- 虚拟机: 由于需要加载整个操作系统,虚拟机的启动时间较长,一般需要几分钟。
资源占用:
- Docker: 容器共享宿主操作系统内核,因此资源利用率较高,能够在同一台机器上运行更多的实例。
- 虚拟机: 每个虚拟机都需要独立的操作系统和内核,因此资源消耗较大,通常只能在有限的硬件资源下运行少数几个虚拟机。
应用场景
Docker 的适用场景
Docker 非常适合需要快速、灵活部署、管理和扩展的应用,尤其是微服务架构、CI/CD 流程中的应用,或者需要跨不同环境(如开发、测试、生产)一致性的场景。它的快速启动时间和低资源消耗使其成为容器化开发、自动化部署以及跨平台应用的一流选择。
- 微服务架构: Docker 是微服务架构的理想选择,因为每个微服务可以运行在独立的容器中,易于管理和扩展。
- CI/CD: Docker 能够在不同环境中快速构建、测试和部署应用,方便与持续集成、持续部署(CI/CD)管道集成。
虚拟机的适用场景
虚拟机适合那些需要完整操作系统隔离、运行多种不同操作系统,或需要高度隔离的场景。它适用于一些企业级应用、遗留系统的部署或虚拟桌面基础设施(VDI)等。
- 多操作系统环境: 如果需要运行多个不同操作系统的环境,虚拟机可以提供完整的操作系统模拟,容器则不适用。
- 遗留应用: 某些老旧应用可能无法直接在容器中运行,此时虚拟机能够提供一个兼容的环境。
Docker安装卸载
在线安装脚本
国内服务器
#!/bin/bash
# 移除掉旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 删除所有旧的数据
sudo rm -rf /var/lib/docker
# 安装依赖包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 添加源,使用了阿里云镜像
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 配置缓存
sudo yum makecache
# 安装最新稳定版本的docker
sudo yum install -y docker-ce
# 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hub-mirror.c.163.com",
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io",
"https://docker.unsee.tech",
"https://docker.1panel.live",
"http://mirrors.ustc.edu.cn",
"https://docker.chenby.cn",
"http://mirror.azure.cn",
"https://dockerpull.org",
"https://dockerhub.icu",
"https://hub.rat.dev"]
}
EOF
# 启动docker引擎并设置开机启动
sudo systemctl start docker
sudo systemctl enable docker
国外服务器
#!/bin/bash
# 移除掉旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 删除所有旧的数据
sudo rm -rf /var/lib/docker
# 安装依赖包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 添加源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 配置缓存
sudo yum makecache
# 安装最新稳定版本的docker
sudo yum install -y docker-ce
# 启动docker引擎并设置开机启动
sudo systemctl start docker
sudo systemctl enable docker
离线安装
#离线下载docker-ce rpm安装包
wget https://download.docker.com/linux/centos/7/x8