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

docker 基础入门

docker 基础入门

引言

在当今快速演进的软件开发领域,Docker 已经成为一个革命性的工具,它极大地改变了我们构建、部署和管理应用程序的方式。作为一种开源容器化平台,Docker 提供了一个轻量级且一致的环境,使得软件能够在几乎任何地方无缝运行。它解决了经典的“在我机器上可以运行”的问题,通过确保从开发到生产环境的一致性,极大地简化了软件的交付过程。

Docker 的重要性不仅体现在其提高了应用的部署效率和可靠性,更在于它为软件开发和运维(DevOps)实践提供了强大的支持。它使得容器化成为可能,这种技术允许开发者将应用及其依赖打包到一个隔离的容器中,这种方法提高了应用的可移植性、安全性和灵活性。

作为容器化技术的先驱和主要工具,Docker 已经成为了现代云计算和微服务架构的基石。通过本篇博客,我们将探索 Docker 的基本概念、操作和在实际开发流程中的应用,为您揭开这个强大工具的神秘面纱。

Docker 基础

什么是 Docker

Docker 是一个开放源码的容器化平台,它允许开发者将应用及其运行环境打包在一起,形成一个轻量级、可移植的容器。这些容器在任何支持 Docker 的环境中都可以运行,无论是开发人员的笔记本电脑、测试环境还是生产环境的服务器。

与虚拟机的区别

与传统的虚拟机(VM)相比,Docker 容器不需要包含整个操作系统。它们仅包含应用程序、相关的库和其依赖项。因此,容器更为轻量级,启动速度更快,且对系统资源的利用更高效。虚拟机需要几分钟才能启动,而容器可以在几秒钟内启动。

核心组件

Docker 容器

  • 容器的概念:Docker 容器是独立的、可执行的软件包,包含应用及其所有依赖、库、二进制代码和配置文件。容器与底层基础设施隔离,但可以相互之间或与外部进行通信。
  • 与虚拟机比较:容器更加轻量级,因为它们共享主机系统的内核,而不是虚拟化整个操作系统。这使得容器更快速、高效和易于扩展。

Docker 镜像

  • 镜像的概念:Docker 镜像是用于创建 Docker 容器的蓝图或模板。它是一个轻量级、独立的、可执行的软件包,包含创建 Docker 容器所需的一切:代码、运行时、库、环境变量和配置文件。
  • 作为容器模板:当运行 Docker 镜像时,它将成为一个在隔离环境中运行的容器。镜像在构建时是静态的,但当它变成容器时,它就处于运行状态。

Dockerfile

  • Dockerfile 的作用:Dockerfile 是一个文本文件,包含了一系列命令和指令,用于自动构建 Docker 镜像。它定义了从基础镜像开始,安装所需软件、复制本地文件到镜像以及设置配置参数等步骤。
  • 用于构建镜像:通过运行 docker build 命令,Docker 可以读取 Dockerfile 中的指令,自动构建一个可用于创建容器的镜像。

安装 Docker

  • 提供在不同操作系统(如 Windows、Linux、macOS)上安装 Docker 的步骤和链接。

Docker 可以在多种操作系统上安装,包括 Windows、Linux 和 macOS。以下是在这些操作系统上安装 Docker 的基本步骤和相关链接。

在 Windows 上安装 Docker

  1. 下载 Docker Desktop for Windows:访问 Docker 官网,下载适用于 Windows 的 Docker Desktop 安装包。下载链接
  2. 运行安装程序:下载完成后,双击安装文件并遵循提示进行安装。
  3. 启动 Docker Desktop:安装完成后,启动 Docker Desktop。初次启动可能需要几分钟时间。
  4. 验证安装:打开命令提示符或 PowerShell,输入 docker --version 来检查 Docker 是否正确安装。

在 Linux 上安装 Docker

  1. 更新软件包索引:在终端中运行 sudo apt-get update(适用于基于 Debian 的发行版)。
  2. 安装 Docker:运行 sudo apt-get install docker-ce docker-ce-cli containerd.io
  3. 启动 Docker 服务:使用 sudo systemctl start docker 启动 Docker 服务。
  4. 验证安装:运行 docker --version 来检查 Docker 是否正确安装。

注意:不同 Linux 发行版的安装步骤可能略有不同。您可以在 Docker 官方文档中找到针对不同 Linux 发行版的详细安装指南。访问 Docker 官方文档

在 macOS 上安装 Docker

  1. 下载 Docker Desktop for Mac:访问 Docker 官网,下载适用于 macOS 的 Docker Desktop 安装包。下载链接
  2. 运行安装程序:打开下载的 .dmg 文件并拖动 Docker 到应用文件夹。
  3. 启动 Docker Desktop:从应用程序文件夹或 Launchpad 启动 Docker Desktop。
  4. 验证安装:打开终端,输入 docker --version 来检查 Docker 是否正确安装。

Docker 的基本使用

理解 Docker 的基本命令对于有效地使用这个工具至关重要。以下是一些核心的 Docker 操作,包括运行容器、管理容器以及使用镜像。

运行你的第一个容器

  1. 使用 docker run 命令:这是运行 Docker 容器的最基本命令。例如,要运行一个基于 Ubuntu 的容器并进入其命令行界面,可以使用以下命令:

    bashCopy code
    docker run -it ubuntu /bin/bash

    这个命令会拉取 Ubuntu 镜像(如果本地不存在的话),创建一个新容器,并打开一个交互式的终端。

管理容器

  1. 启动容器:使用 docker start [容器ID或名称] 来启动一个已经存在但停止的容器。
  2. 停止容器:使用 docker stop [容器ID或名称] 可以优雅地停止一个正在运行的容器。
  3. 暂停容器:使用 docker pause [容器ID或名称] 来暂停容器中的所有进程。
  4. 删除容器:要删除容器,可以使用 docker rm [容器ID或名称]。请确保容器已停止运行,或者使用 f 参数强制删除。

使用 Docker 镜像

  1. 搜索镜像:使用 docker search [镜像名称] 来在 Docker Hub 上搜索可用的镜像。

  2. 拉取镜像:使用 docker pull [镜像名称] 来下载一个镜像到你的本地环境。

  3. 运行镜像:如上所述,使用 docker run 命令来基于镜像启动一个新容器。

    例如,运行一个 nginx Web 服务器:

    bashCopy code
    docker run -d -p 8080:80 nginx

    这个命令会启动一个 nginx 容器,并将容器的 80 端口映射到本地的 8080 端口。

构建 Docker 镜像

构建自定义 Docker 镜像是 Docker 使用中的一个核心环节。这通常通过编写 Dockerfile 和运行 docker build 命令来实现。

编写简单的 Dockerfile

  1. Dockerfile 基础Dockerfile 是一个文本文件,其中包含了一系列指令和参数,用于定义如何构建 Docker 镜像。每个指令都创建镜像的一个层。

  2. 基本结构

    • FROM:指定基础镜像。例如:FROM ubuntu 表示使用 Ubuntu 作为基础镜像。
    • RUN:执行命令。例如:RUN apt-get update 在 Ubuntu 镜像上运行更新。
    • COPY:从你的本地文件系统复制文件到镜像。例如:COPY . /app 将当前目录中的文件复制到镜像的 /app 目录。
    • CMD:指定容器启动时运行的命令。例如:CMD ["echo", "Hello World"]
  3. 示例 Dockerfile

    dockerfileCopy code
    # 使用官方 Python 运行时作为父镜像
    FROM python:3.7-slim# 设置工作目录为 /app
    WORKDIR /app# 将当前目录内容复制到位于 /app 的容器中
    COPY . /app# 安装 requirements.txt 中指定的任何所需包
    RUN pip install --no-cache-dir -r requirements.txt# 在容器启动时运行 app.py
    CMD ["python", "./app.py"]

构建镜像

  1. 使用 docker build 命令:在包含 Dockerfile 的目录中运行以下命令来构建镜像:

    bashCopy code
    docker build -t my-python-app .

    这里,-t 用于指定镜像的名称和标签,. 指 Docker 构建上下文的当前目录。

  2. 验证镜像:构建完成后,使用 docker images 查看本地镜像列表,确认新构建的镜像出现在列表中。

Docker 网络和存储

Docker 不仅仅是运行容器的工具,它还提供了强大的网络和存储功能,使得容器化应用更加灵活和强大。

网络功能

Docker 容器网络

  1. 网络类型:Docker 提供了几种网络类型供容器使用,如 bridge、host 和 none 网络。
    • bridge:默认网络,将容器连接到同一私有网络中。
    • host:容器将共享主机的网络栈,不进行网络隔离。
    • none:容器有自己的网络栈,但不与外界网络连接。
  2. 容器间通信:在 bridge 网络中,容器可以通过内部 IP 地址或容器名称互相通信。
  3. 端口映射:可以将容器的端口映射到主机的端口,使外部网络能够访问容器。例如,docker run -p 8080:80 nginx 将容器内的 80 端口映射到主机的 8080 端口。

数据卷和持久化存储

使用数据卷

  1. 数据卷简介:数据卷是 Docker 用于持久化和共享容器数据的机制。它们是独立于容器生命周期的,并且可以在容器间共享。

  2. 创建和管理数据卷:使用 docker volume create 创建新的数据卷,然后在运行容器时通过 v 参数将其挂载。

    例如,创建一个数据卷并挂载到容器:

    bashCopy code
    docker volume create my-vol
    docker run -d -v my-vol:/app nginx
  3. 数据卷的优势

    • 数据持久化:即使容器被删除,卷上的数据仍然保留。
    • 数据共享:不同的容器可以通过挂载同一个数据卷来共享数据。

使用绑定挂载

除了数据卷,还可以使用绑定挂载直接将主机上的文件或目录挂载到容器中。这在开发环境中尤其有用,因为它允许开发者在主机上使用自己喜欢的工具编辑文件,而这些更改会立即反映在容器中。

Docker Compose 的简介

在开发和部署多容器 Docker 应用程序时,Docker Compose 是一个不可或缺的工具。它允许您使用一个简单的 YAML 文件定义和运行多容器 Docker 应用程序。

Docker Compose 概念

什么是 Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许您通过一个单独的 docker-compose.yml 文件来配置应用服务。这意味着您可以在一个文件中定义应用的所有服务,然后只需一个命令即可从您的配置中创建并启动所有服务。

基本用法

创建 docker-compose.yml 文件

  1. 定义服务:在 docker-compose.yml 文件中,您可以定义一个或多个服务。每个服务都可以使用不同的镜像,并包含额外的配置,如端口映射、卷挂载等。

    示例 docker-compose.yml 文件:

    yamlCopy code
    version: '3'
    services:web:image: nginxports:- "80:80"database:image: postgresenvironment:POSTGRES_PASSWORD: example

    这个示例中定义了两个服务:一个 web 服务器(使用 nginx 镜像)和一个数据库(使用 postgres 镜像)。

  2. 启动服务:在包含 docker-compose.yml 文件的目录中运行以下命令来启动服务:

    bashCopy code
    docker-compose up

    这个命令将根据 docker-compose.yml 文件中的定义启动所有服务。如果需要在后台运行服务,可以添加 -d 标志。

  3. 管理服务:您可以使用 docker-compose stop 停止服务,或者使用 docker-compose down 停止并移除所有由 docker-compose up 创建的资源(包括网络和容器)。

使用 Docker Compose 的优势

  • 简化配置:Docker Compose 使得管理多容器应用的配置变得简单,无需分别处理每个容器。
  • 一致的环境:无论是在开发、测试还是生产环境,Docker Compose 都确保您的应用以相同的方式运行。
  • 便于扩展:随着应用的增长,Docker Compose 使得添加和更新服务变得容易。

相关文章:

docker 基础入门

docker 基础入门 引言 在当今快速演进的软件开发领域,Docker 已经成为一个革命性的工具,它极大地改变了我们构建、部署和管理应用程序的方式。作为一种开源容器化平台,Docker 提供了一个轻量级且一致的环境,使得软件能够在几乎任…...

HarmonyOS:NativeWindow 开发指导

场景介绍 NativeWindow 是 HarmonyOS 本地平台化窗口,表示图形队列的生产者端。开发者可以通过 NativeWindow 接口进行申请和提交 Buffer,配置 Buffer 属性信息。 针对 NativeWindow,常见的开发场景如下: ● 通过 NativeWindow…...

汉威科技传感器为农业加点“智慧”

农业是国家之根本,历来受到高度重视,在央视《传感中国》系列节目中,智慧农业独占一期,重要性不言而喻。 随着传感器、物联网、GIS、大数据、5G、人工智能、区块链等技术的快速发展,智慧农业成为种植、养殖行业的新趋势…...

springboot listener、filter登录实战

转载自&#xff1a; www.javaman.cn 博客系统访问&#xff1a; http://175.24.198.63:9090/front/index 登录功能 1、前端页面 采用的是layui-admin框架&#xff0c;文中的验证码内容&#xff0c;请参考作者之前的验证码功能 <!DOCTYPE html> <html lang"zh…...

【数据结构—栈的实现(数组栈)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、栈 1.1栈的概念及结构 二、栈的实现 2.1头文件的实现—Stack.h 2.2源文件的实现—Stack.c 2.3源文件的测试—test.c 三、栈的实际测试数据展示 3.1正常的出…...

Linux安装Halo(个人网站)

项目简介 1.代码开源:Halo 的项目代码开源在 GitHub 上且处于积极维护状态&#xff0c;截止目前已经发布了 109 个版本。你也可以在上面提交你的问题或者参与代码贡献。2.易于部署:推荐使用 Docker 的方式部署 Halo&#xff0c;便于升级&#xff0c;同时避免了各种环境依赖的问…...

Java - Spring中Bean的循环依赖问题

什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你&#xff0c;你也依赖我。 比如&#xff1a;丈夫类Husband&#xff0c;妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 Spring解决循环依赖的机理 Spring为什么可以解决set s…...

使用 Python 实现简单的爬虫框架

爬虫是一种自动获取网页内容的程序&#xff0c;它可以帮助我们从网络上快速收集大量信息。在本文中&#xff0c;我们将学习如何使用 Python 编写一个简单的爬虫框架。 一、请求网页 首先&#xff0c;我们需要请求网页内容。我们可以使用 Python 的 requests 库来发送 HTTP 请…...

Activiti七大接口,28张表详解

Activiti七大接口&#xff0c;28张表详解 7大接口 RepositoryService&#xff1a;提供管理流程部署和流程定义API。 RuntimeService&#xff1a;提供运行时流程实例进行管理与控制API。 TaskService&#xff1a;提供流程任务管理API。 IdentityService&#xff1a;提供对流程…...

解决msvcr120.dll文件丢失问题

项目场景&#xff1a; 在VMware虚拟机中安装win7家庭版系统&#xff0c;安装MySQL数据库&#xff0c;部署项目文件。 问题描述 安装MySQL数据库过程中提示“msvcr120.dll文件丢失”。 原因分析&#xff1a; 提示丢失msvcr120.dll文件&#xff0c;我们首先要到C:\Windows\Sys…...

AI日报:人工智能与新材料的发现

文章目录 总览人工智能正在革命性地发现新的或更强的材料&#xff0c;这将改变制造业。更坚韧的合金问题研究解决方案 新材料人工智能存在的挑战方法探索 日本的研究人员正在使用人工智能制造更强的金属合金或发现新材料&#xff0c;并彻底改变制造过程 总览 日本的研究人员开…...

鱼fish数据集VOC+yolo-1400张(labelImg标注)

鱼类&#xff0c;是最古老的脊椎动物。易蓄积重金属。 部分不同染色体数目的杂交的后代依然有生育能力。它们几乎栖居于地球上所有的水生环境&#xff0c;从淡水的湖泊、河流到咸水的大海和大洋。 今天要介绍鱼的数据集。 数据集名称&#xff1a;鱼 fish 数据集格式&#xf…...

爬虫解析-BeautifulSoup-bs4(七)

目录 1.bs4的安装 2.bs4的语法 &#xff08;1&#xff09;查找节点 &#xff08;2&#xff09;查找结点信息 3.bs4的操作 &#xff08;1&#xff09;对本地文件进行操作 &#xff08;2&#xff09;对服务器响应文件进行操作 4.实战 beautifulsoup&#xff1a;和lxml一样…...

分类预测 | Matlab实现OOA-SVM鱼鹰算法优化支持向量机的多变量输入数据分类预测

分类预测 | Matlab实现OOA-SVM鱼鹰算法优化支持向量机的多变量输入数据分类预测 目录 分类预测 | Matlab实现OOA-SVM鱼鹰算法优化支持向量机的多变量输入数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现OOA-SVM鱼鹰算法优化支持向量机的多变量输…...

2.vue学习笔记(目录结构+模板语法+属性绑定)

文章目录 1.目录结构2.模板语法2.1.文本插值2.2.使用JavaScript表达式2.3.原始HTML 3.属性绑定3.1.简写3.2.布尔型Attribute3.3.动态绑定多个值 1.目录结构 1.vscode ——VSCode工具的配置文件夹 2.node_modules ——Vue项目的运行依赖文件夹 3.public ——资源文件夹&am…...

Python基本语法及高级特性总结

1. Python基本语法 1.1 变量和数据类型 在Python中&#xff0c;变量不需要预先声明&#xff0c;可以直接赋值。Python是一种动态类型语言&#xff0c;变量的类型会根据赋值的对象自动确定。例如&#xff1a; a 10 # a是整数类型变量 b 3.14 # b是浮点数类型变量 c …...

03-详解网关的过滤器工厂和常见的网关过滤器路由过滤器,默认过滤器,全局过滤器的执行顺序

过滤器工厂 过滤器种类 GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务响应的结果做加工处理 Spring提供了31中不同的路由过滤器工厂 AddResponseHeader表示给请求添加响应头 default-filters: # 默认过滤器 - AddResponseHeaderX-Response-Default-R…...

基于SSM的小儿肺炎知识管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

HuffMan tree

定义 给定N个权值作为N个叶子结点&#xff0c;构造一棵二叉树&#xff0c;若该树的带权路径长度达到最小&#xff0c;称这样的二叉树为最优二叉树&#xff0c;也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树&#xff0c;权值较大的结点离根较近。 基础知识 路…...

各地加速“双碳”落地,数字能源供应商怎么选?

作者 | 曾响铃 文 | 响铃说 随着我国力争2030年前实现“碳达峰”、2060年前实现“碳中和”的“双碳”目标提出&#xff0c;为各地区、各行业的低碳转型和绿色可持续发展制定“倒计时”时间表&#xff0c;一场围绕“数字能源”、“智慧能源”、“新能源”等关键词的创新探索进…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...