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)
相关推荐
小卓笔记15 分钟前
DNS主从服务器
运维·服务器
book012127 分钟前
Ansible 自动化运维
运维·自动化·ansible
阿正的梦工坊30 分钟前
Linux 命令:按内存使用大小排序查看 PID 的完全指南
linux·运维·服务器
未来之窗软件服务1 小时前
lite_avatar 数字人命令行-安装故障解决
linux·运维·服务器·数字人
IT大头娃娃1 小时前
配置银河麒麟V10高级服务器操作系统安装vmware tools。在您的计算机上尚未找到用于此虚拟机的 VMwareTools。安装将无法继续。
运维·服务器
m0_694845571 小时前
什么是站群服务器?站群服务器应该怎么选?
linux·运维·服务器·云计算·github
xdpcxq10292 小时前
CentOS 8 停止维护后通过 rpm 包手动安装 docker
linux·docker·centos
yscript3 小时前
linux系统安装和激活conda
linux·运维·人工智能·python·深度学习·conda
绝顶少年3 小时前
nginx请求限流设置:常见的有基于 IP 地址的限流、基于请求速率的限流以及基于连接数的限流
运维·tcp/ip·nginx