docker

Docker介绍

Docker 是一个开源容器化平台,主要作用是通过将应用程序及其依赖环境打包成轻量级、可移植的容器,实现跨环境的一致性部署与运行。其核心价值包括:

  1. 环境隔离:容器内的应用与宿主机及其他容器相互隔离,确保运行环境的独立性。
  2. 标准化交付:通过镜像(Image)封装代码、库和配置,消除"在我机器上能运行"的问题。
  3. 资源高效:共享宿主机内核,相比虚拟机(VM)更节省内存和计算资源,启动速度更快。
  4. 跨平台部署:一次构建的容器可在 Linux、Windows、云服务器等多种环境中运行。
  5. 简化运维:支持快速创建、复制、销毁容器,便于弹性扩展和持续集成/持续部署(CI/CD)。

Docker 已成为现代云原生应用开发和微服务架构的基础设施,显著提升了软件交付效率和系统可靠性。

一、Docker架构解析

  1. 核心组件

    REST API Client Docker Daemon Containers Images Networks Volumes

  2. 核心概念对比

    概念 说明 类比
    Image 只读模板,包含应用及其运行环境 虚拟机ISO镜像
    Container 镜像的运行实例,具有可写层 运行中的虚拟机
    Registry 镜像仓库(默认Docker Hub) 应用商店
    Volume 持久化数据存储方案 外接硬盘

二、容器生命周期管理

1. 基础操作命令
bash 复制代码
# 运行容器(示例运行Nginx)
docker run -d -p 8080:80 --name my_nginx nginx:1.23 

# 查看运行中的容器
docker ps
# 查看所有容器(含已停止)
docker ps -a

# 停止/启动容器
docker stop my_nginx
docker start my_nginx

# 删除容器
docker rm my_nginx
2. 容器交互模式
bash 复制代码
# 进入容器bash终端
docker exec -it my_nginx /bin/bash

# 查看容器日志
docker logs -f my_nginx

# 拷贝文件
docker cp local.txt my_nginx:/app/config.txt

三、镜像深度管理

1. 镜像操作全流程
bash 复制代码
# 拉取镜像(指定版本)
docker pull ubuntu:22.04

# 查看本地镜像
docker images

# 标记镜像
docker tag nginx:1.23 myrepo/nginx:v1

# 推送镜像到私有仓库
docker push myrepo/nginx:v1

# 删除镜像
docker rmi nginx:1.23
2. 镜像构建(Dockerfile)
dockerfile 复制代码
# 多阶段构建示例
FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .

FROM alpine:3.18
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]

构建命令:docker build -t myapp:v1 .


四、存储与网络配置

1. 数据持久化方案
类型 特点 适用场景
Volume Docker管理,存储在/var/lib/docker 数据库数据
Bind Mount 映射宿主机目录 配置文件同步
tmpfs mount 内存临时存储 敏感临时数据
bash 复制代码
# 创建数据卷
docker volume create db_vol

# 使用数据卷
docker run -v db_vol:/var/lib/mysql mysql:8.0
2. 网络模式详解
模式 特点
bridge 默认模式,NAT网络(172.17.0.0/16)
host 共享宿主机网络栈
none 无网络连接
overlay 跨主机容器通信(Swarm集群)
bash 复制代码
# 创建自定义网络
docker network create my_net

# 容器加入指定网络
docker run --net=my_net redis:7.0

五、多容器编排(Docker Compose)

1. 典型docker-compose.yml
yaml 复制代码
version: '3.8'

services:
  web:
    image: nginx:1.23
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
2. 常用命令
bash 复制代码
docker-compose up -d    # 启动服务
docker-compose down     # 停止并删除
docker-compose logs -f  # 查看日志

六、安全最佳实践

  1. 容器安全准则

    • 禁止使用--privileged特权模式

    • 设置用户权限:docker run -u 1001:1001 ...

    • 定期扫描镜像漏洞:docker scan nginx:1.23

    • 配置资源限制:

      bash 复制代码
      docker run -m 512m --cpus=1.5 ...
  2. 生产环境建议

    • 使用只读文件系统:--read-only

    • 配置健康检查:

      dockerfile 复制代码
      HEALTHCHECK --interval=30s --timeout=3s \
        CMD curl -f http://localhost/ || exit 1

七、高级应用场景

  1. 集群管理

    bash 复制代码
    # 初始化Swarm集群
    docker swarm init
    
    # 部署服务
    docker service create --replicas 3 nginx:1.23
  2. CI/CD集成示例

    bash 复制代码
    # Jenkins Pipeline片段
    stage('Build Image') {
      docker.build("myapp:${env.BUILD_ID}")
    }
    stage('Deploy') {
      docker.withRegistry('https://registry.example.com', 'docker-creds') {
        image.push()
      }
    }

知识拓展建议

  1. 容器运行时比较(containerd vs cri-o)
  2. 云原生技术栈(Kubernetes + Docker)
  3. 服务网格(Istio)与容器监控(Prometheus)
相关推荐
橙-极纪元13 小时前
把docker的镜像文件从一台服务器中,迁移至另一台服务器
服务器·docker·容器
国科安芯13 小时前
详解ADC 规则组外部触发:CH2、CH3 与 TRGO2
运维·网络·单片机·嵌入式硬件·mcu·系统架构
梅菲塔亚14 小时前
Keepalived高可用全解析
linux·运维·服务器·开发语言·网络·php
.柒宇.15 小时前
运维常见面试题_04_Nginx与DNS服务
运维·nginx·面试·dns
RobinDevNotes15 小时前
K8s+Ray+vLLM打穿大模型全生命周期(有实践步骤)
人工智能·云原生·容器·kubernetes·生活·vllm
15Moonlight15 小时前
Linux系统(02):基础开发工具
linux·运维·服务器
雨声不在15 小时前
docker-android 重启后镜像起不来
android·docker·容器
沪上企服通15 小时前
当 RPA 遇见企服:合规链路自动化的技术演进与五类市场样本观察
运维·自动化·rpa
hxhy0015 小时前
服务器挖矿排查与清理
运维·服务器
琥珀色糖16 小时前
Linux GDB调试
linux·运维·服务器·gdb·调试