Docker 使用笔记 | 豆包MarsCode AI刷题

133 阅读6分钟

Docker 使用笔记

1. Docker 基本概念

Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中,然后在任何环境中运行。

  • Docker Image(镜像) :包含有运行应用所需的代码、库、环境变量和配置文件的只读模板。可以把它看作是应用的“源代码”。
  • Docker Container(容器) :镜像的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离、保证安全的平台。
  • Dockerfile:一种被Docker程序解析的脚本,包含了从基础镜像开始所需进行的步骤和命令的集合,用以自动化构建Docker镜像。
  • Docker Hub:Docker的官方远程仓库,可以让你发现、分享和管理Docker镜像。
  • Docker Compose:一个用于定义和运行多容器Docker应用程序的工具。通过一个YAML文件来配置应用服务。

2. 安装Docker

Windows安装:
  1. 访问Docker Hub网站下载Docker Desktop应用。
  2. 运行安装程序,按照指示完成安装。
  3. 启动Docker Desktop,等待Docker服务启动。
Linux安装(以Ubuntu为例):
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
sudo systemctl status docker  # 验证Docker是否成功安装

3. 常用Docker命令

  • docker run:创建一个新的容器并运行一个命令。
  • docker start:启动一个或多个已经停止的容器。
  • docker stop:停止一个运行中的容器。
  • docker build:用Dockerfile构建一个镜像。
  • docker pull:从镜像仓库拉取或者更新指定镜像。
  • docker push:将本地的镜像推送到镜像仓库。
  • docker images:列出本地的所有镜像。
  • docker rmi:删除一个或多个镜像。
  • docker ps:显示当前运行的容器。
  • docker exec:在运行的容器中执行命令。

4. Docker 文件管理

  • 数据卷(Volumes) :用于数据持久化和容器间共享数据。数据卷可以在容器被删除后继续存在。
  • 绑定挂载(Bind Mounts) :将宿主机的文件或目录挂载到容器中,常用于应用的快速迭代开发。

5. 实用技巧

  • 使用.dockerignore文件排除不需要添加到Docker镜像中的文件。
  • 利用多阶段构建(Multi-stage builds)优化镜像大小。
  • 设置自动重启策略(例如:--restart=always)确保容器的稳定运行。
  • 使用Docker Compose来管理多容器应用,通过docker-compose up一键启动整个应用。

6. 高级应用

  • Docker Swarm:Docker的容器编排和集群管理工具,可以让多个Docker主机形成一个集群,实现容器的快速扩展。
  • Kubernetes:与Docker容器兼容的开源容器编排系统,用于自动化应用的部署、扩展和管理。

Docker 网络管理

Docker允许你创建多种网络模式,为容器间通信提供灵活性:

  • Bridge网络:默认的网络模式。如果没有指定网络,容器会自动连接到一个默认的bridge网络。
  • Host网络:容器将不会获得自己的IP地址,直接使用宿主机的IP和端口,这通常用于需要提高性能的场景。
  • Overlay网络:使得多个Docker守护进程连接在一起,并允许容器之间的通信,这个功能主要在Docker Swarm模式下使用。
  • Macvlan网络:通过允许容器拥有自己的MAC地址来模拟物理设备,容器可以像物理设备一样出现在网络上,适用于需要运行在物理网络下的应用。

Docker 安全实践

Docker的安全性是部署时需要考虑的关键因素,以下是一些增强Docker容器安全性的建议:

  • 使用官方镜像:尽可能使用官方或经过验证的可信镜像,避免使用未知来源的镜像。
  • 及时更新镜像:定期更新容器内的操作系统和应用程序,确保安全漏洞得到修补。
  • 最小权限原则:运行容器时,尽可能地限制其权限,例如使用--read-only标志使容器文件系统为只读。
  • 使用用户组和用户:通过指定非root用户运行容器,减少潜在的安全风险。
  • 利用Docker Secrets管理敏感数据:为敏感数据(如密码和私钥)提供安全的存储和管理方式,避免将这些数据直接嵌入到镜像或源代码中。

Docker 性能优化

优化Docker容器的性能是提高整体应用响应能力和资源利用率的重要方面:

  • 资源限制:通过--memory(内存)和--cpu-shares(CPU)选项限制容器可以使用的资源,防止某个容器占用过多资源影响其他容器。
  • 存储优化:选择合适的存储驱动,例如Overlay2通常比aufs具有更好的性能和效率。
  • 网络性能:对于需要高网络性能的应用,考虑使用Host网络模式,这样可以减少Docker网络堆栈带来的额外开销。
  • 清理无用资源:定期清理未使用的镜像、悬空镜像、停止的容器和无用的网络配置,可以帮助保持Docker环境的清洁和高效。

Docker 日志管理

合理管理日志对于维护和调试Docker容器是非常重要的:

  • 配置日志驱动:Docker支持多种日志驱动,例如json-file、syslog等。根据需要配置合适的日志驱动,可以更好地集成到现有的日志管理系统。
  • 日志轮换:对于json-file驱动,可以配置日志文件的最大大小和文件数量,帮助避免磁盘空间被无限制的日志文件占满。
4. Docker 常用命令
  • 查看 Docker 版本:

    docker --version
    
  • 拉取镜像:

    docker pull <image_name>
    
  • 查看本地镜像:

    docker images
    
  • 运行容器:

    docker run -d -p <host_port>:<container_port> --name <container_name> <image_name>
    
    • -d: 后台运行
    • -p: 端口映射
    • --name: 指定容器名称
  • 查看运行中的容器:

    docker ps
    
  • 查看所有容器(包括停止的):

    docker ps -a
    
  • 停止容器:

    docker stop <container_id/name>
    
  • 启动已停止的容器:

    docker start <container_id/name>
    
  • 删除容器:

    docker rm <container_id/name>
    
  • 删除镜像:

    docker rmi <image_id>
    
  • 查看容器日志:

    docker logs <container_id/name>
    
  • 进入容器内部:

    docker exec -it <container_id/name> /bin/bash
    
5. Docker 网络
  • 查看网络:

    docker network ls
    
  • 创建网络:

    docker network create <network_name>
    
  • 连接容器到网络:

    docker network connect <network_name> <container_name>