Docker基本概念汇总(更全面了解Docker)

Docker是一种开源的平台,用于开发、部署和运行应用程序。它通过“容器”技术实现了轻量级虚拟化,使应用程序和其依赖项能够一起打包、部署并运行。以下是Docker基本概念的详细解释。

图片

图片来源网络

1. Docker 容器(Container)

容器是Docker的核心概念之一。容器是镜像的运行实例容器包含应用程序及其运行所需的所有依赖(例如代码库、配置文件、系统库等),容器可以启动、开始、停止、移动和删除,并且每个容器都是相互隔离的。

容器特点:

  • 轻量级:与传统的虚拟机相比,Docker容器不需要完整的操作系统来运行,依赖于宿主机的内核,因此启动和运行非常迅速。

  • 隔离性:容器之间是相互独立的,每个容器都有独立的文件系统、网络栈和进程。 

常用命令:

# 列出所有运行中的容器
docker ps# 列出所有容器(包括已停止的)
docker ps -a# 启动一个新的容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]# 停止容器
docker stop [CONTAINER_ID]

2. Docker 镜像(Image)

镜像是一个只读模板,其中包含了容器运行所需的文件系统和依赖环境。镜像可以看作是容器的蓝图或快照,是Docker创建容器的基础。

镜像特点:

  • 分层结构:Docker镜像采用分层结构,通过Union File System将不同的层叠加在一起,节省了磁盘空间并提高了构建速度。

  • 可重用性:同一个镜像可以被多个容器使用,Docker镜像可以通过Docker Hub等平台共享。

常用命令:

# 从Docker Hub上拉取镜像
docker pull [IMAGE_NAME]# 列出本地所有镜像
docker images# 删除本地镜像
docker rmi [IMAGE_ID]# 构建镜像
docker build -t [IMAGE_NAME] .

3. Dockerfile

Dockerfile是一个包含了一系列命令的文本文件,这些命令可以用于自动化地创建一个Docker镜像。通过编写Dockerfile,可以将环境配置、应用程序代码、依赖关系等打包成一个镜像,便于快速创建容器。

指令:常用的Dockerfile指令包括FROM(指定基础镜像)、RUN(执行命令)、COPY(复制文件)、CMD(指定容器启动命令)等。

自动化:使用Dockerfile,能够实现自动化的环境搭建和应用部署。

编写一个基础的Dockerfile文件

# 使用官方的Ubuntu镜像作为基础镜像
FROM ubuntu:latest# 更新包管理工具并安装Python
RUN apt-get update && apt-get install -y python3# 复制当前目录下的文件到容器内的 /app 目录
COPY . /app# 设置工作目录
WORKDIR /app# 运行Python程序
CMD ["python3", "app.py"]
构建镜像:

构建镜像

docker build -t my-python-app .

这里先了解一个基础的,后续文章会详细介绍Dockerfile的相关指令和操作

4. Docker 仓库(Registry)

仓库(Registry)是Docker镜像的存储和分发平台。Docker的官方仓库是Docker Hub,用户可以上传和下载镜像。

公开和私有:Docker Hub是公开仓库,可以免费使用。用户也可以创建自己的私有仓库,比如Harbor,用于内部镜像的存储。

镜像管理:可以通过仓库管理不同版本的镜像,便于部署和更新。

常用命令:

# 登录Docker仓库
docker login# 推送本地镜像到Docker Hub
docker push [USERNAME/IMAGE_NAME]# 从Docker Hub上拉取镜像
docker pull [IMAGE_NAME]

5. Docker 网络(Networking)

Docker提供了多种网络模式来管理容器之间的通信:

Bridge网络:默认网络模式,适用于独立运行的容器,通过创建的虚拟网桥进行通信。 

Host网络:容器直接使用宿主机的网络栈。适合网络性能要求高的应用。

Overlay网络:用于跨主机的容器通信,适合于Swarm或Kubernetes等集群环境。

自定义网络:可以通过docker network命令创建自定义网络,使得容器在同一个网络中能通过容器名称直接通信。 

常用命令:

# 列出所有网络
docker network ls# 创建自定义网络
docker network create [NETWORK_NAME]# 将容器连接到指定网络
docker network connect [NETWORK_NAME] [CONTAINER_ID]

6. Docker 存储(Volumes)

Volumes是Docker推荐的持久化数据存储方式,用于将数据保存到宿主机中,而不会随容器删除而丢失数据。

独立于容器:即使删除了容器,数据卷仍然存在,可以用于其他容器。

高性能:数据卷的访问速度更快,是Docker持久化数据的主要方式。

常用命令:

# 列出所有卷
docker volume ls# 创建一个新卷
docker volume create [VOLUME_NAME]# 以数据卷的方式挂载卷
docker run -v [VOLUME_NAME]:/app/data [IMAGE_NAME]

7. Docker Compose

Docker Compose 是一个用于定义和运行多容器应用的工具。可以通过一个docker-compose.yml文件定义一组关联的容器,然后用一个命令启动所有容器。适合开发和测试多容器应用程序,如微服务架构。

Docker Compose特点:

  • 编排:Docker Compose可以编排多个容器的启动顺序、依赖关系和网络连接。

  • 简化操作:将复杂的多容器启动流程简化为一条命令,方便本地开发和调试。

示例docker-compose.yml:

version: '3'
services:web:image: nginxports:- "80:80"db:image: mysqlenvironment:MYSQL_ROOT_PASSWORD: example

启动服务:

docker-compose up

8. Docker Swarm

Docker Swarm是Docker提供的容器集群管理工具,使得多个Docker主机能够作为一个集群来管理和调度容器。Swarm支持多节点集群、服务自动扩展和负载均衡等功能。

集群管理:能够将多台主机加入到一个Swarm集群中进行管理。服务编排:Swarm会自动处理容器的负载均衡,并在节点故障时自动调度新容器。 

常用命令:

# 初始化Swarm
docker swarm init# 加入Swarm
docker swarm join --token [TOKEN] [MANAGER_IP:PORT]# 部署服务
docker service create --name web --replicas 3 -p 80:80 nginx

Docker Swarm在实际生产环境很少使用,目前基本都是Kubernetes来进行编排容器。

总结

Docker的基本概念包括容器、镜像、Dockerfile、仓库、网络、存储、Docker Compose、Docker Swarm等。这些概念相互协作,使Docker成为应用部署的高效工具。理解这些基础概念并掌握常用命令,可以帮助我们高效地管理应用,并显著简化开发和运维的工作流程。

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

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

相关文章

OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 找到物体的中心、大小和方向。 CamShift(Continuously Adaptive Mean Shift)是 OpenCV 中的一种目标跟踪算法&#xff0…

【每日刷题】Day151

【每日刷题】Day151 🥕个人主页: 开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 【模板】01背包_牛客题霸_牛客网 【模板】01背包_牛客题霸_牛客网 //思路:动态规划 #incl…

学习Vue之商城案例(代码+详解)

目前,我们学习Vue的一些基础的知识,那么就让我们做一个像下图这样简单的商城案例吧。 目录 通过脚手架创建项目 安装axios和bootstrap组件 安装axios和bootstrap 在保存的时候不进行格式化校验 初步定义App.vue文件 初步渲染组件页面 根据接口渲染…

【测试】【Debug】vscode中同一个测试用例出现重复

这种是正常的情况 当下面又出现一个 类似python_test->文件夹名->test_good ->test_pad 同一个测试用例出现两次,名称都相同,显然是重复了。那么如何解决? 这种情况是因为在终端利用“pip install pytest”安装 之后,又…

基于C++的决策树C4.5机器学习算法(不调包)

目前玩机器学习的小伙伴,上来就是使用现有的sklearn机器学习包,写两行代码,调调参数就能跑起来,看似方便,实则有时不利于个人能力发展,要知道现在公司需要的算法工程师,不仅仅只是会调参&#x…

Mac解决 zsh: command not found: ll

Mac解决 zsh: command not found: ll 文章目录 Mac解决 zsh: command not found: ll解决方法 解决方法 1.打开bash_profile 配置文件vim ~/.bash_profile2.在文件中添加配置:alias llls -alF键盘按下 I 键进入编辑模式3. alias llls -alF添加完配置后,按…

VBA10-处理Excel的动态数据区域

end获取数据边界 1、基本语法 1-1、示例: 2、配合row和column使用 2-1、示例1 2-2、示例2 此时,不管这个有数值的区域,怎么增加边界,对应的统计数据也会跟着变的!

无人车之路径规划篇

无人车的路径规划是指在一定的环境模型基础上,给定无人车起始点和目标点后,按照性能指标规划出一条无碰撞、能安全到达目标点的有效路径。 一、路径规划的重要性 路径规划对于无人车的安全、高效运行至关重要。它不仅能够提高交通效率,减少交…

【前端基础】CSS基础

目标:掌握 CSS 属性基本写法,能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容&#…

一种高度集成的数字化管理平台:城市管理综合执法系统(源码)

什么是城市管理综合执法系统? 城市管理综合执法系统是一种高度集成的数字化管理平台,它旨在通过整合信息技术资源,实现对城市环境、秩序、设施等多方面的综合管理和高效执法。 城市管理综合执法系统通常包含以下几个核心要素和功能&#xff…

【Python】强大的正则表达式工具:re模块详解与应用

强大的正则表达式工具:re模块详解与应用 在编程和数据处理中,字符串的处理是不可避免的一项任务。无论是从文本中提取信息、验证数据格式,还是进行复杂的替换操作,正则表达式(Regular Expression,简称Rege…

计算机毕业设计Python+图神经网络手机推荐系统 手机价格预测 手机可视化 手机数据分析 手机爬虫 Django Flask Spark 知识图谱

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

03.DDD六边形架构

学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 什么是依赖DDD四层架构六边形架构代码实现 想要详细了解六边形架构,可以看我之前的一篇文章。是对六边形架构原文的翻…

前端开发实现自定义勾选/自定义样式,可复选,可取消勾选

基于后端返回数组实现多选、复选 以下代码基于vue2&#xff0c;如果有需要React/Vue3或者其他框架代码的&#xff0c;可以通过国内直连GPT4o进行代码转换&#xff0c;转换正确率99% 前端代码如下(直接拷贝到你的vue代码即可)&#xff1a; <!-- CustomCheckboxList.vue --&g…

新型智慧城市顶层设计方案(118页word)

文档介绍&#xff1a; 新型智慧城市顶层设计方案是一种全局性、前瞻性的规划&#xff0c;旨在通过整合城市各类资源&#xff0c;运用新一代信息技术&#xff0c;推动城市治理、民生服务、产业发展等领域的全面升级&#xff0c;以实现城市的可持续发展和居民生活质量的提升。该…

nginx-proxy-manager实现反向代理+自动化证书(实战)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 cnginx-proxy-manager实现反向代理自动化证书 nginx-proxy-manager是什么搭建nginx-proxy-manage…

定时器入门:Air780E定时器基础与进阶

今天我们学习的是Air780E定时器基础与进阶&#xff0c;让大家更深入的了解定时器。 一、定时器(timer)的概述 在Air780E模组搭载的LuatOS系统中&#xff0c;定时器&#xff08;timer&#xff09;是一项基础且关键的服务。它允许开发者在特定的时间点或周期性地执行代码段&…

C语言复习第7章 自定义类型(结构体+位段+枚举+联合体)

目录 一、结构体1.1 内置类型和自定义类型1.2 结构体的概念1.3 结构体基本的声明1.4 区分两种创建结构体变量的方式1.5 结构体变量的定义和初始化1.6 区分一下typdef和变量列表1.7 匿名结构体类型1.8 访问结构体成员1.9 修改字符数组成员变量的时候 要用strcpy1.10 结构体的传参…

Twitter(X)2024最新注册教程

Twitter 现名为X&#xff0c;因为图标是一只小鸟的形象&#xff0c;大家也叫它小蓝鸟&#xff08;埃隆马斯克于 2023 年对该平台进行了品牌重塑&#xff09;&#xff0c;目前仍然是全球最受欢迎的社交媒体和微博平台之一&#xff0c;全球活跃用户量大概在4.5亿。尤其是欧美国家…

[单例模式]

[设计模式] 设计模式是软件工程中的一种常见做法, 它可以理解为"模板", 是针对一些常见的特定场景, 给出的一些比较好的固定的解决方案. 不同语言适用的设计模式是不一样的. 这里我们接下来要谈到的是java中典型的设计模式. 而且由于设计模式比较适合有一定编程经…