Linux部署Docker教程

  • A+
所属分类:Docker 云原生

Docker 是一种开源的容器化平台,用于构建、打包、分发和运行应用程序。它将应用程序及其依赖项(如库、运行时环境、系统工具等)打包到一个独立的容器中,确保应用程序在任何环境中都能以一致的方式运行。

一、核心概念

  1. Docker 镜像
    • 镜像是一个轻量、可执行的独立软件包,包含运行容器所需的文件系统内容、环境变量、程序配置等。
    • 采用分层架构,由多个只读层叠加而成,每一层对应一次构建操作(如 RUNCOPY)。
    • 支持多阶段构建,可显著减小镜像体积。例如,使用 golang:1.17 AS builder 构建应用程序后,仅将二进制文件复制到轻量级镜像(如 alpine:latest)中。
  2. Docker 容器
    • 容器是镜像的运行实例,提供独立、轻量级的运行环境,包含应用程序及其所有依赖项。
    • 基于镜像创建,具有可写层,支持隔离性(通过 Namespace)和资源限制(通过 Cgroups)。
    • 生命周期短暂,可被快速创建、启动、停止和删除。
  3. Docker 仓库
    • 存储和分享 Docker 镜像的地方,开发者可从仓库中获取镜像,并将自己的镜像推送到仓库中。
    • 分为公共仓库(如 Docker Hub)和私有仓库。

二、底层原理

  1. Namespace
    • 实现资源隔离,为容器创建独立的系统资源视图,包括进程、网络、文件系统、用户等。
    • 例如,PID Namespace 隔离进程 ID,Network Namespace 隔离网络栈。
  2. Cgroups
    • 实现资源限制与管理,用于限制和监控容器的资源使用,包括 CPU、内存、磁盘 I/O 和网络带宽。
    • 防止容器耗尽系统资源,影响其他容器或主机系统的正常运行。
  3. UnionFS(联合文件系统)
    • 允许将多个只读镜像层叠加,形成一个统一的文件系统视图。
    • 容器启动时,在镜像层之上添加可写层,实现写时复制(Copy-on-Write),保证镜像层只读且容器的文件变更隔离。

三、优势与应用场景

  1. 优势
    • 一致性和可移植性:容器在任何支持 Docker 的平台上都能运行,确保开发和生产环境的一致性。
    • 轻量级和高效性:容器共享宿主机的操作系统内核,资源占用少,启动速度快。
    • 快速部署和交付:减少开发、测试和生产环境之间的差异,提高应用程序的交付速度。
  2. 应用场景
    • 微服务架构:将应用程序拆分为多个独立的微服务,每个微服务运行在一个容器中。
    • 持续集成/持续部署(CI/CD):通过 Docker 实现应用程序的快速构建、测试和部署。
    • 多环境部署:确保应用程序在不同的环境中(如开发、测试、生产)以相同的方式运行。

Docker安装过程

安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

配置Docker仓库

curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker CE

yum -y install docker-ce docker-ce-cli containerd.io

配置 daemon.json 文件

cat > /etc/docker/daemon.json << EOF
 {
   "registry-mirrors": [
     "https://docker.1ms.run",
     "https://docker.xuanyuan.me",
     "https://registry.docker-cn.com",
     "https://docker.mirrors.ustc.edu.cn",
     "https://hub-mirror.c.163.com",
     "https://mirror.baidubce.com"
   ],
   "log-driver": "json-file",
   "log-opts": {
     "max-size": "10m",
     "max-file": "3"
   },
   "storage-driver": "overlay2",
   "dns": ["8.8.8.8", "8.8.4.4"]
}
EOF

启动并设置开机自启

systemctl start docker
systemctl enable docker

验证安装

docker --version
Linux部署Docker教程

常用命令

  1. 镜像管理
    • docker pull:从仓库拉取镜像。
    • docker images:列出本地镜像。
    • docker rmi:删除本地镜像。
    • docker save:将镜像保存为 tar 文件。
    • docker load:从 tar 文件加载镜像。
  2. 容器管理
    • docker run:创建并启动容器。
    • docker ps:查看容器列表。
    • docker start/stop/restart:启动、停止、重启容器。
    • docker exec:在运行中的容器内执行命令。
    • docker attach:附加到正在运行的容器并与其交互。
    • docker rm:删除容器。
  3. 其他命令
    • docker network:管理容器网络。
    • docker volume:管理数据卷。
    • docker-compose:定义和运行多容器应用。

Docker 与虚拟机的对比

特性Docker 容器虚拟机
启动速度秒级分钟级
资源占用少(共享宿主机内核)多(每个虚拟机运行完整操作系统)
隔离性基于命名空间和 Cgroups基于 Hypervisor
可移植性高(跨平台)较低(依赖虚拟化技术)
适用场景微服务、CI/CD、云原生应用传统应用、需要完整操作系统的场景
xxx