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
- 下载 Docker Desktop for Windows:访问 Docker 官网,下载适用于 Windows 的 Docker Desktop 安装包。下载链接
- 运行安装程序:下载完成后,双击安装文件并遵循提示进行安装。
- 启动 Docker Desktop:安装完成后,启动 Docker Desktop。初次启动可能需要几分钟时间。
- 验证安装:打开命令提示符或 PowerShell,输入
docker --version来检查 Docker 是否正确安装。
在 Linux 上安装 Docker
- 更新软件包索引:在终端中运行
sudo apt-get update(适用于基于 Debian 的发行版)。 - 安装 Docker:运行
sudo apt-get install docker-ce docker-ce-cli containerd.io。 - 启动 Docker 服务:使用
sudo systemctl start docker启动 Docker 服务。 - 验证安装:运行
docker --version来检查 Docker 是否正确安装。
注意:不同 Linux 发行版的安装步骤可能略有不同。您可以在 Docker 官方文档中找到针对不同 Linux 发行版的详细安装指南。访问 Docker 官方文档
在 macOS 上安装 Docker
- 下载 Docker Desktop for Mac:访问 Docker 官网,下载适用于 macOS 的 Docker Desktop 安装包。下载链接
- 运行安装程序:打开下载的
.dmg文件并拖动 Docker 到应用文件夹。 - 启动 Docker Desktop:从应用程序文件夹或 Launchpad 启动 Docker Desktop。
- 验证安装:打开终端,输入
docker --version来检查 Docker 是否正确安装。
Docker 的基本使用
理解 Docker 的基本命令对于有效地使用这个工具至关重要。以下是一些核心的 Docker 操作,包括运行容器、管理容器以及使用镜像。
运行你的第一个容器
-
使用
docker run命令:这是运行 Docker 容器的最基本命令。例如,要运行一个基于 Ubuntu 的容器并进入其命令行界面,可以使用以下命令:bashCopy code docker run -it ubuntu /bin/bash这个命令会拉取 Ubuntu 镜像(如果本地不存在的话),创建一个新容器,并打开一个交互式的终端。
管理容器
- 启动容器:使用
docker start [容器ID或名称]来启动一个已经存在但停止的容器。 - 停止容器:使用
docker stop [容器ID或名称]可以优雅地停止一个正在运行的容器。 - 暂停容器:使用
docker pause [容器ID或名称]来暂停容器中的所有进程。 - 删除容器:要删除容器,可以使用
docker rm [容器ID或名称]。请确保容器已停止运行,或者使用f参数强制删除。
使用 Docker 镜像
-
搜索镜像:使用
docker search [镜像名称]来在 Docker Hub 上搜索可用的镜像。 -
拉取镜像:使用
docker pull [镜像名称]来下载一个镜像到你的本地环境。 -
运行镜像:如上所述,使用
docker run命令来基于镜像启动一个新容器。例如,运行一个 nginx Web 服务器:
bashCopy code docker run -d -p 8080:80 nginx这个命令会启动一个 nginx 容器,并将容器的 80 端口映射到本地的 8080 端口。
构建 Docker 镜像
构建自定义 Docker 镜像是 Docker 使用中的一个核心环节。这通常通过编写 Dockerfile 和运行 docker build 命令来实现。
编写简单的 Dockerfile
-
Dockerfile 基础:
Dockerfile是一个文本文件,其中包含了一系列指令和参数,用于定义如何构建 Docker 镜像。每个指令都创建镜像的一个层。 -
基本结构:
- FROM:指定基础镜像。例如:
FROM ubuntu表示使用 Ubuntu 作为基础镜像。 - RUN:执行命令。例如:
RUN apt-get update在 Ubuntu 镜像上运行更新。 - COPY:从你的本地文件系统复制文件到镜像。例如:
COPY . /app将当前目录中的文件复制到镜像的/app目录。 - CMD:指定容器启动时运行的命令。例如:
CMD ["echo", "Hello World"]。
- FROM:指定基础镜像。例如:
-
示例 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"]
构建镜像
-
使用
docker build命令:在包含Dockerfile的目录中运行以下命令来构建镜像:bashCopy code docker build -t my-python-app .这里,
-t用于指定镜像的名称和标签,.指 Docker 构建上下文的当前目录。 -
验证镜像:构建完成后,使用
docker images查看本地镜像列表,确认新构建的镜像出现在列表中。
Docker 网络和存储
Docker 不仅仅是运行容器的工具,它还提供了强大的网络和存储功能,使得容器化应用更加灵活和强大。
网络功能
Docker 容器网络
- 网络类型:Docker 提供了几种网络类型供容器使用,如 bridge、host 和 none 网络。
- bridge:默认网络,将容器连接到同一私有网络中。
- host:容器将共享主机的网络栈,不进行网络隔离。
- none:容器有自己的网络栈,但不与外界网络连接。
- 容器间通信:在 bridge 网络中,容器可以通过内部 IP 地址或容器名称互相通信。
- 端口映射:可以将容器的端口映射到主机的端口,使外部网络能够访问容器。例如,
docker run -p 8080:80 nginx将容器内的 80 端口映射到主机的 8080 端口。
数据卷和持久化存储
使用数据卷
-
数据卷简介:数据卷是 Docker 用于持久化和共享容器数据的机制。它们是独立于容器生命周期的,并且可以在容器间共享。
-
创建和管理数据卷:使用
docker volume create创建新的数据卷,然后在运行容器时通过v参数将其挂载。例如,创建一个数据卷并挂载到容器:
bashCopy code docker volume create my-vol docker run -d -v my-vol:/app nginx -
数据卷的优势:
- 数据持久化:即使容器被删除,卷上的数据仍然保留。
- 数据共享:不同的容器可以通过挂载同一个数据卷来共享数据。
使用绑定挂载
除了数据卷,还可以使用绑定挂载直接将主机上的文件或目录挂载到容器中。这在开发环境中尤其有用,因为它允许开发者在主机上使用自己喜欢的工具编辑文件,而这些更改会立即反映在容器中。
Docker Compose 的简介
在开发和部署多容器 Docker 应用程序时,Docker Compose 是一个不可或缺的工具。它允许您使用一个简单的 YAML 文件定义和运行多容器 Docker 应用程序。
Docker Compose 概念
什么是 Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许您通过一个单独的 docker-compose.yml 文件来配置应用服务。这意味着您可以在一个文件中定义应用的所有服务,然后只需一个命令即可从您的配置中创建并启动所有服务。
基本用法
创建 docker-compose.yml 文件
-
定义服务:在
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 镜像)。
-
启动服务:在包含
docker-compose.yml文件的目录中运行以下命令来启动服务:bashCopy code docker-compose up这个命令将根据
docker-compose.yml文件中的定义启动所有服务。如果需要在后台运行服务,可以添加-d标志。 -
管理服务:您可以使用
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登录实战
转载自: www.javaman.cn 博客系统访问: http://175.24.198.63:9090/front/index 登录功能 1、前端页面 采用的是layui-admin框架,文中的验证码内容,请参考作者之前的验证码功能 <!DOCTYPE html> <html lang"zh…...
【数据结构—栈的实现(数组栈)】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、栈 1.1栈的概念及结构 二、栈的实现 2.1头文件的实现—Stack.h 2.2源文件的实现—Stack.c 2.3源文件的测试—test.c 三、栈的实际测试数据展示 3.1正常的出…...
Linux安装Halo(个人网站)
项目简介 1.代码开源:Halo 的项目代码开源在 GitHub 上且处于积极维护状态,截止目前已经发布了 109 个版本。你也可以在上面提交你的问题或者参与代码贡献。2.易于部署:推荐使用 Docker 的方式部署 Halo,便于升级,同时避免了各种环境依赖的问…...
Java - Spring中Bean的循环依赖问题
什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你,你也依赖我。 比如:丈夫类Husband,妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 Spring解决循环依赖的机理 Spring为什么可以解决set s…...
使用 Python 实现简单的爬虫框架
爬虫是一种自动获取网页内容的程序,它可以帮助我们从网络上快速收集大量信息。在本文中,我们将学习如何使用 Python 编写一个简单的爬虫框架。 一、请求网页 首先,我们需要请求网页内容。我们可以使用 Python 的 requests 库来发送 HTTP 请…...
Activiti七大接口,28张表详解
Activiti七大接口,28张表详解 7大接口 RepositoryService:提供管理流程部署和流程定义API。 RuntimeService:提供运行时流程实例进行管理与控制API。 TaskService:提供流程任务管理API。 IdentityService:提供对流程…...
解决msvcr120.dll文件丢失问题
项目场景: 在VMware虚拟机中安装win7家庭版系统,安装MySQL数据库,部署项目文件。 问题描述 安装MySQL数据库过程中提示“msvcr120.dll文件丢失”。 原因分析: 提示丢失msvcr120.dll文件,我们首先要到C:\Windows\Sys…...
AI日报:人工智能与新材料的发现
文章目录 总览人工智能正在革命性地发现新的或更强的材料,这将改变制造业。更坚韧的合金问题研究解决方案 新材料人工智能存在的挑战方法探索 日本的研究人员正在使用人工智能制造更强的金属合金或发现新材料,并彻底改变制造过程 总览 日本的研究人员开…...
鱼fish数据集VOC+yolo-1400张(labelImg标注)
鱼类,是最古老的脊椎动物。易蓄积重金属。 部分不同染色体数目的杂交的后代依然有生育能力。它们几乎栖居于地球上所有的水生环境,从淡水的湖泊、河流到咸水的大海和大洋。 今天要介绍鱼的数据集。 数据集名称:鱼 fish 数据集格式…...
爬虫解析-BeautifulSoup-bs4(七)
目录 1.bs4的安装 2.bs4的语法 (1)查找节点 (2)查找结点信息 3.bs4的操作 (1)对本地文件进行操作 (2)对服务器响应文件进行操作 4.实战 beautifulsoup:和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中,变量不需要预先声明,可以直接赋值。Python是一种动态类型语言,变量的类型会根据赋值的对象自动确定。例如: a 10 # a是整数类型变量 b 3.14 # b是浮点数类型变量 c …...
03-详解网关的过滤器工厂和常见的网关过滤器路由过滤器,默认过滤器,全局过滤器的执行顺序
过滤器工厂 过滤器种类 GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务响应的结果做加工处理 Spring提供了31中不同的路由过滤器工厂 AddResponseHeader表示给请求添加响应头 default-filters: # 默认过滤器 - AddResponseHeaderX-Response-Default-R…...
基于SSM的小儿肺炎知识管理系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
HuffMan tree
定义 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 基础知识 路…...
各地加速“双碳”落地,数字能源供应商怎么选?
作者 | 曾响铃 文 | 响铃说 随着我国力争2030年前实现“碳达峰”、2060年前实现“碳中和”的“双碳”目标提出,为各地区、各行业的低碳转型和绿色可持续发展制定“倒计时”时间表,一场围绕“数字能源”、“智慧能源”、“新能源”等关键词的创新探索进…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
Redis上篇--知识点总结
Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...
Excel 怎么让透视表以正常Excel表格形式显示
目录 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总...
