当前位置: 首页 > news >正文

Docker 从安装到使用的完整指南

目录

  1. 什么是 Docker
  2. Docker 的核心概念
    • 镜像
    • 容器
    • Dockerfile
    • Docker Compose
  3. Docker 的安装
    • 在 Windows 上安装 Docker
    • 在 macOS 上安装 Docker
    • 在 Linux 上安装 Docker
  4. Docker 的基本使用
    • 启动第一个容器
    • 管理容器
    • 构建自定义镜像
    • 使用 Docker Compose
  5. 高级主题
    • Docker 网络
    • Docker 数据卷
    • 多阶段构建
  6. 结论

什么是 Docker

Docker 是一个开源的平台,用于开发、运输和运行应用程序。Docker 通过将应用程序及其依赖项打包到一个称为容器的标准化单元中来实现这一目标。容器可以在任何环境中运行,无论是在开发人员的本地计算机上,还是在生产环境中的服务器集群中。

Docker 提供了一种一致的环境,从而消除了“在我机器上可以工作”的问题。通过容器化,开发人员可以确保他们的应用程序在任何地方都能以相同的方式运行。

Docker 的核心概念

在深入了解 Docker 的安装和使用之前,首先需要了解一些核心概念。

镜像

Docker 镜像是一个只读模板,包含了运行应用程序所需的所有内容,包括代码、运行时、库和依赖项。镜像是创建 Docker 容器的基础。

容器

容器是镜像的一个运行实例。它是一个轻量级、可移植的执行环境,包含了应用程序运行所需的所有内容。多个容器可以在同一主机上运行,并且相互隔离。

Dockerfile

Dockerfile 是一个文本文件,包含了一系列指令,用于构建 Docker 镜像。通过定义 Dockerfile,可以自动化镜像的创建过程,确保环境的一致性。

Docker Compose

Docker Compose 是一个工具,用于定义和运行多容器的 Docker 应用程序。通过一个 docker-compose.yml 文件,可以定义应用程序的服务、网络和卷,从而简化了复杂应用程序的部署。

Docker 的安装

Docker 可以在 Windows、macOS 和 Linux 操作系统上运行。以下是不同操作系统上的安装步骤。

在 Windows 上安装 Docker

  1. 下载 Docker Desktop

    • 访问 Docker 官网。
    • 下载适用于 Windows 的 Docker Desktop 安装包。
  2. 安装 Docker Desktop

    • 双击下载的安装包,按照安装向导的指示完成安装。
  3. 启动 Docker Desktop

    • 安装完成后,启动 Docker Desktop。首次启动时可能需要进行一些初始化配置。
  4. 验证安装

    • 打开命令提示符,输入以下命令以验证 Docker 是否安装成功:
      docker --version
      
    • 如果看到 Docker 版本信息,说明安装成功。

在 macOS 上安装 Docker

  1. 下载 Docker Desktop

    • 访问 Docker 官网。
    • 下载适用于 macOS 的 Docker Desktop 安装包。
  2. 安装 Docker Desktop

    • 打开下载的 .dmg 文件,将 Docker 图标拖动到应用程序文件夹中。
  3. 启动 Docker Desktop

    • 安装完成后,启动 Docker Desktop。首次启动时可能需要进行一些初始化配置。
  4. 验证安装

    • 打开终端,输入以下命令以验证 Docker 是否安装成功:
      docker --version
      
    • 如果看到 Docker 版本信息,说明安装成功。

在 Linux 上安装 Docker

  1. 更新软件包索引

    sudo apt-get update
    
  2. 安装必要的软件包

    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    
  3. 添加 Docker 的 GPG 密钥

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
  4. 添加 Docker 仓库

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
  5. 安装 Docker

    sudo apt-get update
    sudo apt-get install docker-ce
    
  6. 启动 Docker 并设置开机启动

    sudo systemctl start docker
    sudo systemctl enable docker
    
  7. 验证安装

    • 输入以下命令以验证 Docker 是否安装成功:
      docker --version
      
    • 如果看到 Docker 版本信息,说明安装成功。

Docker 的基本使用

安装完成后,接下来了解一下 Docker 的基本使用方法。

启动第一个容器

  1. 拉取镜像

    • 使用 docker pull 命令从 Docker Hub 拉取官方的 Hello World 镜像:
      docker pull hello-world
      
  2. 运行容器

    • 使用 docker run 命令启动一个 Hello World 容器:
      docker run hello-world
      
    • 该命令将启动一个容器并输出 “Hello from Docker!” 的消息,随后容器退出。

管理容器

  1. 查看正在运行的容器

    • 使用 docker ps 命令查看当前正在运行的容器:
      docker ps
      
  2. 查看所有容器

    • 使用 docker ps -a 命令查看所有容器,包括已经停止的容器:
      docker ps -a
      
  3. 停止容器

    • 使用 docker stop <容器ID> 命令停止正在运行的容器:
      docker stop <container_id>
      
  4. 删除容器

    • 使用 docker rm <容器ID> 命令删除容器:
      docker rm <container_id>
      

构建自定义镜像

  1. 创建 Dockerfile

    • 在项目目录下创建一个名为 Dockerfile 的文件,并添加以下内容:
      # 使用官方的 Python 运行时镜像作为基础镜像
      FROM python:3.8-slim# 设置工作目录
      WORKDIR /app# 复制当前目录内容到工作目录
      COPY . /app# 安装依赖
      RUN pip install --no-cache-dir -r requirements.txt# 指定容器启动时运行的命令
      CMD ["python", "app.py"]
      
  2. 构建镜像

    • 使用 docker build 命令构建自定义镜像:
      docker build -t my-python-app .
      
  3. 运行容器

    • 使用 docker run 命令启动容器:
      docker run -d -p 5000:5000 my-python-app
      

使用 Docker Compose

  1. 创建 docker-compose.yml 文件

    • 在项目目录下创建一个名为 docker-compose.yml 的文件,并添加以下内容:
      version: '3'
      services:web:image: my-python-appbuild: .ports:- "5000:5000"redis:image: "redis:alpine"
      
  2. 启动服务

    • 使用 docker-compose up 命令启动多容器应用:
      docker-compose up
      
  3. 管理服务

    • 使用 docker-compose ps 查看运行中的服务:
      docker-compose ps
      
    • 使用 docker-compose down 停止并删除容器、网络、卷:
      docker-compose down
      

高级主题

Docker 网络

Docker 提供了多种网络模式,用于管理容器之间的通信。

  1. 桥接网络

    • 默认情况下,Docker 容器连接到一个名为 bridge 的网络。可以通过 docker network create 创建自定义桥接网络:
      docker network create my-bridge-network
      
  2. 使用自定义网络

    • 在运行容器时,可以使用 --network 选项指定自定义网络:
      docker run -d --network my-bridge-network my-python-app
      
  3. 查看网络

    • 使用 docker network ls 查看现有网络:
      docker network ls
      
  4. 删除网络

    • 使用 docker network rm 删除网络:
      docker network rm my-bridge-network
      

Docker 数据卷

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

  1. 创建数据卷

    • 使用 docker volume create 创建数据卷:
      docker volume create my-volume
      
  2. 挂载数据卷

    • 在运行容器时,使用 -v 选项挂载数据卷:
      docker run -d -v my-volume:/app/data my-python-app
      
  3. 查看数据卷

    • 使用 docker volume ls 查看现有数据卷:
      docker volume ls
      
  4. 删除数据卷

    • 使用 docker volume rm 删除数据卷:
      docker volume rm my-volume
      

多阶段构建

多阶段构建可以创建更小的镜像,通过分阶段构建镜像来减少最终镜像的大小。

  1. 编写多阶段 Dockerfile

    • Dockerfile 中定义多个构建阶段:
      # 第一阶段:构建应用程序
      FROM golang:1.16 AS builder
      WORKDIR /app
      COPY . .
      RUN go build -o myapp# 第二阶段:创建运行时镜像
      FROM alpine:latest
      WORKDIR /root/
      COPY --from=builder /app/myapp .
      CMD ["./myapp"]
      
  2. 构建和运行镜像

    • 使用 docker builddocker run 命令构建并运行镜像:
      docker build -t my-multi-stage-app .
      docker run my-multi-stage-app
      

结论

通过本指南,你应该已经了解了 Docker 的基本概念、安装步骤以及常见的使用方法。Docker 作为一个强大的工具,能够显著简化应用程序的开发、部署和管理过程。随着你对 Docker 的深入了解,你将能够利用其高级功能,进一步优化你的开发和运维流程。

Docker 的学习和使用是一个不断探索的过程。希望这篇博客能为你的 Docker 之旅打下坚实的基础。如果你有任何问题或建议,欢迎在评论区留言。

相关文章:

  • Python抓取高考网图片
  • Android屏幕旋转流程(1)
  • 代理网络基础设施 101:增强安全性、速度和可扩展性
  • 生成式人工智能时代的5大网络安全趋势
  • AI大模型部署Ubuntu服务器攻略
  • Navicat和SQLynx产品功能比较一(整体比较)
  • Text2SQL基座模型选择的实战教程(持续更新)
  • 香港云服务器怎么处理高并发和突发流量?
  • 关于linux的图形界面
  • CleanMyMac中文版2024官方正式版下载!你的电脑清洁专家!
  • 雷军-2022.8小米创业思考-10-高效率模型:便宜有好货;产品好,价格厚道,公司盈利;爆品模式,分摊成本;资金库存快速周转;铁人三项,硬件,新零售,互联网
  • 数据库异常数据恢复(1)-快速恢复和镜像恢复
  • 2024年老王磁力搜索引擎实测好用,赶快收藏一下
  • 【目标检测】图解 DETR 系统框图
  • NUC980-OLED实现全中文字库的方法
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Apache的80端口被占用以及访问时报错403
  • E-HPC支持多队列管理和自动伸缩
  • Intervention/image 图片处理扩展包的安装和使用
  • Java知识点总结(JavaIO-打印流)
  • jquery ajax学习笔记
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • mysql 数据库四种事务隔离级别
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • node和express搭建代理服务器(源码)
  • vagrant 添加本地 box 安装 laravel homestead
  • webpack4 一点通
  • 给第三方使用接口的 URL 签名实现
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 离散点最小(凸)包围边界查找
  • 免费小说阅读小程序
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 小程序button引导用户授权
  • 追踪解析 FutureTask 源码
  • 2017年360最后一道编程题
  • ​​​​​​​​​​​​​​Γ函数
  • # Java NIO(一)FileChannel
  • $(selector).each()和$.each()的区别
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (阿里云万网)-域名注册购买实名流程
  • (备份) esp32 GPIO
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (回溯) LeetCode 46. 全排列
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)Linux+Windows下安装ffmpeg
  • .bashrc在哪里,alias妙用
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net - 类的介绍
  • .Net core 6.0 升8.0
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.