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)
相关推荐
Python测试之道17 分钟前
K8s ConfigMap实战:像设置手机一样管理配置!
容器·智能手机·kubernetes
开心码农1号1 小时前
如何理解k8s中的controller
docker·容器·kubernetes
檀越剑指大厂1 小时前
【Docker系列】镜像大小排序
运维·docker·容器
小跌—1 小时前
Linux:认识基础IO
linux·运维·数据库
@t.t.1 小时前
Docker编排工具---Compose的概述及使用
运维·docker·容器
Eric.Lee20212 小时前
ubuntu 挂载硬盘
linux·运维·ubuntu
xinruoqianqiu2 小时前
shell脚本--2
linux·运维·开发语言·前端·c++·chrome
算力魔方AIPC2 小时前
如何在Ubuntu上安装NVIDIA显卡驱动?
linux·运维·ubuntu
老兵发新帖2 小时前
ubuntu安装Go SDK
linux·运维·服务器
binary思维2 小时前
在 Ubuntu 系统中,查看已安装程序的方法
linux·运维·ubuntu