Docker 保姆级教程:零基础也能快速上手 – wiki基地

Docker 保姆级教程:零基础也能快速上手

引言:容器化时代的必备技能

在云计算和微服务架构日益盛行的今天,Docker 已经成为软件开发、测试和部署过程中不可或缺的工具。它以其轻量、高效、可移植的特性,极大地简化了应用程序的打包、分发和运行过程。无论您是开发人员、运维工程师,还是对新技术充满好奇的爱好者,掌握 Docker 都将为您的职业生涯或技术探索之路增添强大的助力。

本教程旨在为 Docker 零基础的读者提供一份全面、详细且易于理解的入门指南。我们将从 Docker 的基本概念讲起,逐步深入到镜像、容器、数据卷、网络等核心知识点,并通过大量的实例演示,帮助您快速上手 Docker,并将其应用于实际工作中。

第一部分:Docker 基础概念

在开始动手实践之前,我们需要先了解 Docker 的一些核心概念。这些概念是理解 Docker 工作原理的基础。

  1. 什么是 Docker?

    Docker 是一个开源的应用容器引擎,它允许开发者将他们的应用和依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。

    更通俗地讲,Docker 就像一个“集装箱”,它可以把您的应用程序及其运行所需的全部环境(代码、运行时、库、环境变量和配置文件等)打包在一起。这个“集装箱”可以在任何支持 Docker 的平台上运行,而无需担心环境差异导致的问题。

  2. Docker 的优势

    • 轻量级: Docker 容器共享宿主机的内核,无需额外的操作系统,因此非常轻量,启动速度快,资源占用少。
    • 可移植性: Docker 容器可以在任何支持 Docker 的平台上运行,无需修改,真正实现“一次构建,到处运行”。
    • 隔离性: Docker 容器之间相互隔离,互不影响,保证了应用程序运行的稳定性和安全性。
    • 可扩展性: Docker 可以轻松地对容器进行扩缩容,以满足应用程序的负载需求。
    • 版本控制: Docker 镜像支持版本控制,可以方便地回滚到之前的版本。
    • 简化部署: Docker 简化了应用程序的部署流程,提高了开发和运维效率。
  3. Docker 的核心组件

    • Docker 客户端(Client): 用户与 Docker 交互的命令行工具。
    • Docker 守护进程(Daemon): 运行在宿主机上的后台服务,负责构建、运行和管理容器。
    • Docker 镜像(Image): 一个只读的模板,包含了应用程序及其运行所需的全部依赖。可以理解为“集装箱”的模板。
    • Docker 容器(Container): 镜像的运行实例,是一个可读写的沙盒环境。可以理解为正在运行的“集装箱”。
    • Docker 仓库(Registry): 存放 Docker 镜像的仓库,类似于代码仓库。官方仓库是 Docker Hub。
  4. Docker 镜像与容器的关系
    可以将镜像比作类,容器比作类的实例。 镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除和暂停等。

第二部分:Docker 安装与配置

在了解了 Docker 的基本概念后,我们就可以开始安装 Docker 了。

  1. 安装 Docker

    Docker 支持多种操作系统,包括 Linux、Windows 和 macOS。

    • Linux: 推荐使用官方提供的安装脚本:

      bash
      curl -fsSL https://get.docker.com -o get-docker.sh
      sudo sh get-docker.sh

      * 或者使用包管理器安装:
      以Ubuntu为例
      “`bash
      # 更新 apt 包索引
      sudo apt-get update

      # 安装软件包以允许 apt 通过 HTTPS 使用存储库
      sudo apt-get install \
          apt-transport-https \
          ca-certificates \
          curl \
          gnupg \
          lsb-release
      
      # 添加 Docker 的官方 GPG 密钥
      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
      
      # 设置稳定存储库
      echo \
        "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
      
      # 安装 Docker 引擎
      sudo apt-get update
      sudo apt-get install docker-ce docker-ce-cli containerd.io
      

      “`

    • Windows/macOS: 下载并安装 Docker Desktop。

  2. 验证安装

    安装完成后,可以通过以下命令验证 Docker 是否安装成功:

    bash
    docker version

    如果能够正常输出 Docker 版本信息,则说明安装成功。

  3. 配置 Docker 镜像加速器(可选)

    由于 Docker Hub 在国内访问速度较慢,我们可以配置国内的镜像加速器,以提高镜像下载速度。常用的镜像加速器有:

    • 阿里云镜像加速器
    • 网易云镜像加速器
    • DaoCloud 镜像加速器

    配置方法(以阿里云为例):

    1. 登录阿里云容器镜像服务控制台。
    2. 在左侧导航栏中,选择“镜像工具”->“镜像加速器”。
    3. 复制您的专属加速器地址。
    4. 修改 Docker 配置文件(通常位于 /etc/docker/daemon.json),添加以下内容:

      json
      {
      "registry-mirrors": ["您的阿里云加速器地址"]
      }

    5. 重启 Docker 服务:

      bash
      sudo systemctl restart docker

第三部分:Docker 镜像操作

Docker 镜像是 Docker 的核心组件之一,掌握镜像操作是使用 Docker 的基础。

  1. 搜索镜像

    可以使用 docker search 命令从 Docker Hub 搜索镜像:

    bash
    docker search ubuntu

    这将列出所有包含 “ubuntu” 关键字的镜像。

  2. 拉取镜像

    使用 docker pull 命令从 Docker Hub 拉取镜像到本地:

    bash
    docker pull ubuntu:latest

    这将拉取最新版本的 Ubuntu 镜像。ubuntu 是镜像名称,latest 是标签(tag),用于标识镜像的版本。如果不指定标签,默认拉取 latest 标签。

  3. 查看本地镜像

    使用 docker images 命令查看本地已有的镜像:

    bash
    docker images

    这将列出本地所有镜像的名称、标签、ID、创建时间和大小。

  4. 删除镜像

    使用 docker rmi 命令删除本地镜像:

    bash
    docker rmi ubuntu:latest

    这将删除 ubuntu:latest 镜像。注意,如果该镜像有正在运行的容器,需要先停止并删除容器,才能删除镜像。可以使用-f强制删除。

  5. 构建镜像(重点)

    除了从 Docker Hub 拉取镜像外,我们还可以通过 Dockerfile 构建自己的镜像。Dockerfile 是一个文本文件,包含了一系列用于构建镜像的指令。

    创建一个名为 Dockerfile 的文件,内容如下:

    “`dockerfile

    使用官方 Node.js 14 作为基础镜像

    FROM node:14

    设置工作目录

    WORKDIR /app

    复制 package.json 和 package-lock.json 到工作目录

    COPY package*.json ./

    安装依赖

    RUN npm install

    复制应用程序代码到工作目录

    COPY . .

    暴露端口

    EXPOSE 3000

    启动应用程序

    CMD [ “npm”, “start” ]
    “`

    这是一个简单的 Node.js 应用程序的 Dockerfile。

    • FROM 指令指定基础镜像。
    • WORKDIR 指令设置工作目录。
    • COPY 指令复制文件到镜像中。
    • RUN 指令执行命令。
    • EXPOSE 指令声明容器运行时监听的端口。
    • CMD 指令指定容器启动时执行的命令。

    使用 docker build 命令构建镜像:

    bash
    docker build -t my-node-app:1.0 .

    -t 选项指定了镜像的名称和标签。 . 表示 Dockerfile 所在的当前目录。

第四部分:Docker 容器操作

Docker 容器是镜像的运行实例,是 Docker 的另一个核心组件。

  1. 创建并启动容器

    使用 docker run 命令创建并启动容器:

    bash
    docker run -d -p 8080:80 nginx:latest

    • -d 选项表示在后台运行容器。
    • -p 选项将宿主机的 8080 端口映射到容器的 80 端口。
    • nginx:latest 是要使用的镜像。

    这条命令会创建一个 Nginx 容器,并将容器的 80 端口映射到宿主机的 8080 端口。您可以通过浏览器访问 http://localhost:8080 来查看 Nginx 的欢迎页面。

  2. 查看正在运行的容器

    使用 docker ps 命令查看正在运行的容器:

    bash
    docker ps

    这将列出所有正在运行的容器的 ID、镜像、命令、创建时间、状态、端口和名称。

    使用docker ps -a 查看所有容器,包括已停止的。

  3. 停止容器

    使用 docker stop 命令停止容器:

    bash
    docker stop <容器ID或容器名称>

  4. 启动已停止的容器

    使用 docker start 命令启动已停止的容器:

    bash
    docker start <容器ID或容器名称>

  5. 重启容器
    bash
    docker restart <容器ID或容器名称>

  6. 进入容器

    使用 docker exec 命令进入正在运行的容器:

    bash
    docker exec -it <容器ID或容器名称> bash

    • -it 选项表示以交互模式进入容器,并分配一个伪终端。
    • bash 是要在容器中执行的命令。

    这条命令将进入容器的 bash shell,您可以在其中执行命令、查看文件等。

  7. 删除容器

    使用 docker rm 命令删除容器:

    bash
    docker rm <容器ID或容器名称>

    注意,只有已停止的容器才能被删除。可以使用-f强制删除正在运行的容器。

  8. 查看容器日志
    bash
    docker logs <容器ID或容器名称>

第五部分:Docker 数据卷

Docker 数据卷用于实现容器数据的持久化和共享。

  1. 什么是数据卷?

    默认情况下,容器中的数据是临时的,当容器被删除时,数据也会丢失。为了解决这个问题,Docker 提供了数据卷。数据卷是一个可供容器使用的特殊目录,它绕过了容器的文件系统,可以实现数据的持久化。

  2. 创建数据卷

    使用 docker volume create 命令创建数据卷:

    bash
    docker volume create my-data

  3. 查看数据卷

    使用 docker volume ls 命令查看数据卷:

    bash
    docker volume ls

  4. 使用数据卷

    在创建容器时,使用 -v 选项挂载数据卷:

    bash
    docker run -d -v my-data:/data nginx:latest

    这条命令将创建一个 Nginx 容器,并将 my-data 数据卷挂载到容器的 /data 目录。容器中的 /data 目录下的数据将会被持久化到 my-data 数据卷中。

    也可以挂载宿主机目录:

    docker run -d -v /path/on/host:/path/in/container nginx:latest

  5. 删除数据卷

    使用 docker volume rm 命令删除数据卷:

    bash
    docker volume rm my-data

第六部分:Docker 网络

Docker 网络用于实现容器之间的通信和容器与外部网络的连接。

  1. Docker 网络模式

    Docker 提供了多种网络模式:

    • bridge(桥接模式): 默认的网络模式,容器通过虚拟网桥连接到宿主机网络。
    • host(主机模式): 容器共享宿主机的网络命名空间,容器的网络配置与宿主机相同。
    • none(无网络模式): 容器没有网络连接。
    • container(容器模式): 容器共享另一个容器的网络命名空间。
    • overlay(覆盖网络模式): 用于 Docker Swarm 集群中的容器通信。
  2. 查看网络

    使用 docker network ls 命令查看 Docker 网络:

    bash
    docker network ls

  3. 创建网络

    使用 docker network create 命令创建自定义网络:

    bash
    docker network create my-network

  4. 连接容器到网络

    在创建容器时,使用 --network 选项指定容器连接的网络:

    bash
    docker run -d --network my-network nginx:latest

    也可以在容器运行时连接:

    bash
    docker network connect my-network <容器ID或容器名称>

    5. 断开网络连接
    docker network disconnect my-network <容器ID或容器名称>

第七部分:Docker Compose(进阶)

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件,您可以配置应用程序的服务、网络和数据卷,然后使用一个命令就可以创建和启动所有服务。

  1. 安装 Docker Compose

    Docker Desktop 已经包含了 Docker Compose。对于 Linux 系统,可以使用以下命令安装:

    bash
    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose

  2. 创建 docker-compose.yml 文件

    创建一个名为 docker-compose.yml 的文件,内容如下:

    yaml
    version: "3.9"
    services:
    web:
    image: nginx:latest
    ports:
    - "8080:80"
    volumes:
    - ./html:/usr/share/nginx/html
    db:
    image: mysql:5.7
    environment:
    MYSQL_ROOT_PASSWORD: password
    volumes:
    - db-data:/var/lib/mysql
    volumes:
    db-data:

    这是一个简单的 Web 应用程序的 Docker Compose 文件。

    • version 指定 Docker Compose 文件的版本。
    • services 定义了应用程序的服务,包括 web 服务和 db 服务。
    • image 指定服务的镜像。
    • ports 指定端口映射。
    • volumes 指定数据卷。
    • environment 设置环境变量
  3. 启动应用程序

    docker-compose.yml 文件所在的目录下,执行以下命令启动应用程序:

    bash
    docker-compose up -d

    • -d 选项表示在后台运行。

    这将创建并启动所有服务,包括 web 服务和 db 服务。

  4. 停止应用程序

    bash
    docker-compose down

  5. 其他常用命令

    • docker-compose ps:查看服务状态。
    • docker-compose logs:查看服务日志。
    • docker-compose build:构建服务镜像。
    • docker-compose start:启动已停止的服务。
    • docker-compose stop:停止正在运行的服务。
    • docker-compose restart:重启服务。

总结与展望

本教程详细介绍了 Docker 的基础知识、安装配置、镜像操作、容器操作、数据卷、网络以及 Docker Compose 等内容,并通过大量的实例演示,帮助您快速上手 Docker。

Docker 的学习是一个循序渐进的过程。在掌握了本教程的内容后,您可以进一步学习 Docker 的高级特性,如 Docker Swarm、Kubernetes 等,并将 Docker 应用于实际的开发、测试和部署工作中。

希望本教程能够帮助您开启 Docker 学习之旅!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部