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 之旅打下坚实的基础。如果你有任何问题或建议,欢迎在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

适合孩子学习用什么的落地灯?五款精品护眼大路灯分享

适合孩子学习用什么的落地灯&#xff1f;说到护眼落地灯&#xff0c;都会出现两种呼声&#xff1a;一种是认为是“智商税”&#xff0c;而另外一种则是妥妥的照明神器&#xff01;护眼大路灯到底是哪种定义呢&#xff1f;贵的护眼灯一定好吗&#xff1f; 这么年&#xff0c;护…

区块链技术:重塑金融市场监管的新引擎

一、引言 随着金融市场的不断发展和创新&#xff0c;监管面临的挑战也日益严峻。传统的监管模式已难以满足现代金融市场的需要&#xff0c;而区块链技术的出现为金融市场监管带来了新的机遇。本文将探讨区块链技术在金融市场监管中的作用&#xff0c;以及它如何重塑监管模式&a…

深入研究websocket直播中signature这个参数怎么来的,模拟自己生成一个

上一节课我们已经找到了生成signature这个字段的代码位置&#xff0c;就是这个B函数&#xff0c;嗯......听起来好像有点奇怪&#xff0c;但是它确实叫B啊&#xff0c;笑死。不管了&#xff0c;看一下里面的逻辑是啥。 注意e参数的内容是&#xff1a; {"app_name":…

【Academy】API测试API testing

API测试API testing 概述API侦察API文档发现API文档使用机器可读的API文档 标识API端点与API端点交互确定支持的HTTP方法确定支持的内容类型使用Intruder查找隐藏端点 查找隐藏参数大量分配漏洞识别隐藏参数测试大规模分配漏洞 防止API中的漏洞服务端参数污染测试查询字符串中的…

作业管理系统

摘 要 随着网络的发展&#xff0c;信息化时代的到来&#xff0c;在教学工作的过程中作用越来越明显&#xff0c;作业的及时发布&#xff0c;学生的及时提交&#xff0c;以及通过网上的批改和评分&#xff0c;都大大促进教学质量的发展&#xff0c;充分的利用网络来加强管理&am…

用类来实现输入和输出时间(时:分:秒)

编写程序&#xff1a; 运行结果&#xff1a; 程序分析&#xff1a; 这是一个很简单的例子。类Time中只有数据成员&#xff0c;而且它们被定义为公用的&#xff0c;因此可以在类的外面对这些成员进行操作。t1被定义为Time类的对象。在主函数中向t1对象的数据成员输入用户…

MongoDB基础知识

​ 文档是mongodb中的最初单元&#xff0c;类似于mysql中的行&#xff0c;集合可以看做一个具有动态模式的表&#xff0c;mongodb可以拥有多个互相独立的数据库&#xff0c;每个数据库&#xff0c;都拥有自己的集合&#xff1b;每一个文档都有一个特殊的健&#xff1a;“_id”&…

“一站式企业服务平台”的功能架构

为提升区域营商环境&#xff0c;为促进区域经济发展&#xff0c;实现资源高效配置&#xff0c;全国各区域政府及产业园区都越来越重视如何创新企业服务机制、提升企业服务水平&#xff0c;来保障区域内的企业稳定及帮扶企业高质量的发展。随着近年来大数据、人工智能等新一代信…

前端记录日志生成文件保存到本地

一、前言 项目上线后业务人员反馈说是打印数据不准确&#xff0c;通过websocket连接打印机服务去进行打印&#xff0c;会出现条码漏打的情况&#xff1b;通过后端日志和打印机日志均没有找到问题原因&#xff0c;猜测是websocket连接断开导致的问题。 也想通过前端日志去排查…

第9天:静态文件和媒体文件管理

第9天&#xff1a;静态文件和媒体文件管理 目标 管理静态资源&#xff08;如CSS、JavaScript、图片等&#xff09;和用户上传的文件。 任务概览 配置静态文件和媒体文件的存储路径。学习如何收集和压缩静态文件。 详细步骤 1. 配置静态文件和媒体文件的存储路径 在setti…

Redis 分布式锁教程

Redis 分布式锁教程 简介 在分布式系统中&#xff0c;多个进程可能会尝试同时访问共享资源&#xff0c;这会导致数据不一致或者竞争条件。分布式锁是一种用于控制对共享资源访问的机制。Redis 是一个流行的内存数据存储系统&#xff0c;可以用来实现分布式锁。 本文将介绍如…

react项目中如何书写css

一&#xff1a;问题&#xff1a; 在 vue 项目中&#xff0c;我们书写css的方式很简单&#xff0c;就是在 .vue文件中写style标签&#xff0c;然后加上scope属性&#xff0c;就可以隔离当前组件的样式&#xff0c;但是在react中&#xff0c;是没有这个东西的&#xff0c;如果直…

【学一点儿前端】单页面点击前进或后退按钮导致的内存泄露问题(history.listen监听器清除)

今天测试分配了一个比较奇怪的问题&#xff0c;在单页面应用中&#xff0c;反复点击“上一步”和“下一步”按钮时&#xff0c;界面表现出逐渐变得卡顿。为分析这一问题&#xff0c;我用Chrome的性能监控工具进行了浏览器性能录制。结果显示&#xff0c;每次点击“上一步”按钮…

Mars3d实现汽车尾气粒子效果从汽车屁股开始发射效果

本身的汽车尾气粒子效果&#xff1a;在汽车模型的中间发射的↓↓↓↓↓↓↓↓↓↓↓ Mars3d实例中是使用transY偏移值实现汽车尾气粒子效果从汽车屁股开始发射效果&#xff1a; // 动态运行车辆的尾气粒子效果 function addDemoGraphic4(graphicLayer) {const fixedRoute new…

三星与SK海力士:以混合键合技术引领3D DRAM革新之路

在高速缓存内存&#xff08;HBM&#xff09;领域持续领跑的三星与SK海力士&#xff0c;正以混合键合技术为突破口&#xff0c;开启3D DRAM技术的新纪元。这一战略转型不仅预示着存储技术的深度革新&#xff0c;更体现了两大半导体巨头在提高集成度、优化性能与成本上的不懈追求…

如何恢复电脑硬盘删除数据?提供一套实用恢复方案

在数字化时代&#xff0c;电脑硬盘中存储的数据对于个人和企业来说都至关重要。然而&#xff0c;有时我们可能会不小心删除了一些重要文件&#xff0c;或者因为某种原因导致数据丢失。这时候&#xff0c;恢复硬盘上被删除的数据就显得尤为重要。本文将为您提供一套实用的电脑硬…

光电数鸡算法《java》

一&#xff1a;需求 题目&#xff1a;一条流水线有工位D1,D2,D3…D20,总共20个工位。 每个工位都装有一个光电计数器&#xff0c;每个工位都为本工位的计数减去前一个工位&#xff08;第一个有数值的工位除外&#xff0c;不计算。&#xff09; 计算规则&#xff1a;比如D1,D2都…

在自托管基础设施上使用 GitOps 部署 MinIO

基于MinIO Weaviate Python GitOps探索的见解&#xff0c;本文探讨了如何增强软件部署流程的自动化。 通过将 GitHub Actions 与 Docker Swarm 集成而产生的协同作用&#xff0c;以自托管基础架构的稳健性为基础&#xff0c;标志着 CI/CD 实践的关键进步。这种方法不仅利用了软…

Go语言开发框架GoFly已集成数据可视化大屏开发功能,让开发者只专注业务开发,本文指导大家如何使用

前言 框架提供数据大屏开发基础&#xff0c;是考虑当前市场软件应用有一大部分是需要把业务数据做出大屏&#xff0c;很多政府项目对大屏需求特别高&#xff0c;还有生产企业项目也对大屏有需求&#xff0c;没有提供基础规范的后台框架&#xff0c;在开发大屏需要很多时间去基…

Mentor Xpedition怎么切换中英文界面

1、Mentor Xpedition的Layout界面&#xff0c;切换中英文的方法如下图&#xff1b; 切换英文设置&#xff0c;设置系统环境变量&#xff1a;MGC_PCB_LANGUAGEEnglish&#xff0c;重新打开软件即可切换成中文界面&#xff1b; 如果想要在切换成中文&#xff0c;把标量值改为Chi…