跳转至

Docker介绍

Docker 是一个开源的平台,致力于简化应用程序的创建、部署和运行。通过将应用程序及其依赖项打包在容器中,Docker 提供了一种轻量级的虚拟化解决方案,确保应用程序在任何环境中都能一致地运行。Docker 最早由 Solomon Hykes 于 2013 年发布,目前由 Docker 公司(前身为 dotCloud)开发和维护。

主要特点

轻量级

  • Docker 容器共享主机的操作系统内核,相比传统的虚拟机更加轻量。
  • 启动速度快,占用资源少。

一致的环境

  • 通过容器化技术,将应用及其所有依赖项打包在一起,确保在开发、测试和生产环境中表现一致。
  • 避免了“在我的机器上能跑”的问题。

简化的部署

  • Docker 容器可以很容易地在不同的环境中部署,支持跨平台的部署。
  • 提供了 Docker Hub 和其他私有注册表,可以方便地存储和分发镜像。

可扩展性

  • 支持集群管理和编排工具,如 Docker Swarm 和 Kubernetes,方便扩展和管理大规模容器化应用。
  • 容器可以轻松水平扩展,应对不同的负载需求。

模块化和微服务架构

  • Docker 鼓励将应用程序拆分为多个独立的服务,每个服务运行在自己的容器中。
  • 支持微服务架构的设计和部署。

核心概念

镜像(Image)

  • 只读的模板,用于创建 Docker 容器。包含了运行应用程序所需的一切:代码、运行时、库、环境变量等。
  • 可以从 Docker Hub 等公共注册表中拉取,或者从 Dockerfile 构建。

容器(Container)

  • 镜像的运行实例。容器是独立的、可执行的软件包,包含应用程序及其依赖项。
  • 容器是短暂的,可以轻松创建、停止、删除和移动。

Dockerfile

  • 构建 Docker 镜像的文本文件,包含了一系列指令。
  • 通过 Dockerfile,可以自动化构建镜像的过程。

Docker 引擎(Docker Engine)

  • Docker 的核心组件,负责创建和管理容器。
  • 包括 Docker Daemon(后台进程)、Docker CLI(命令行工具)和 REST API。

Docker Hub

  • Docker 官方提供的公共注册表,用于存储和分发 Docker 镜像。
  • 开发者可以将自己的镜像推送到 Docker Hub,也可以从中拉取公共镜像。

基本使用示例

安装 Docker

在不同操作系统上的安装方法略有不同:

  • Linux

    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io
    

  • macOS

  • Docker 官方网站 下载并安装 Docker Desktop。

  • Windows

  • Docker 官方网站 下载并安装 Docker Desktop。

创建和运行容器

  1. 拉取镜像

    docker pull hello-world
    

  2. 运行容器

    docker run hello-world
    

  3. 列出运行中的容器

    docker ps
    

  4. 列出所有容器(包括已停止的容器)

    docker ps -a
    

  5. 停止容器

    docker stop <container_id>
    

  6. 删除容器

    docker rm <container_id>
    

  7. 删除镜像

    docker rmi <image_id>
    

使用 Dockerfile 构建镜像

  1. 创建 Dockerfile: 在项目目录下创建一个名为 Dockerfile 的文件,内容如下:
# 使用官方 Python 3.8 镜像作为基础镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录的内容到容器中的 /app 目录
COPY . /app

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 设置容器启动时运行的命令
CMD ["python", "app.py"]
  1. 构建镜像

    docker build -t my-python-app .
    

  2. 运行容器

    docker run -d -p 8000:8000 my-python-app
    

高级功能

数据卷(Volumes)

  • 持久化容器数据,数据卷可以在容器之间共享和重用。
  • 可以在容器删除后保留数据。
docker run -d -v /host/data:/container/data my-python-app

网络(Networks)

  • 定义容器之间的网络连接,可以创建自定义网络。
docker network create my-network
docker run -d --network my-network my-python-app

Docker Compose

  • 用于定义和运行多容器 Docker 应用。
  • 使用 docker-compose.yml 文件定义应用的服务、网络和卷。
version: '3'
services:
  web:
    image: my-python-app
    ports:
      - "8000:8000"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

启动应用:

docker-compose up

集群管理和编排

  • Docker Swarm:原生集群管理工具,用于编排和管理 Docker 容器集群。
  • Kubernetes:一个开源的容器编排平台,广泛用于自动化部署、扩展和管理容器化应用。

总结

Docker 提供了一种轻量级、高效的虚拟化解决方案,使得应用的开发、部署和运行变得更加简单和一致。通过容器化技术,开发者可以确保应用在各种环境中的运行一致性,并且可以轻松地进行应用的扩展和管理。Docker 已成为现代软件开发和运维的重要工具,广泛应用于各个领域。

评论