通俗大白话理解Docker

什么是Docker

Docker本质上是一种容器化技术,用于将应用程序及其所有依赖打包到一个标准化的单元中。这些单元(容器)可以在任何运行Docker的机器上运行。每个容器是相互隔离的,具有自己的文件系统、网络和进程空间。

以下是大白话的理解,也是我在理解Docker中的一些误区:

  • 之前大家都说Docker就像一个集装箱,就跟它的图标一样,可是在我之前的理解中,比如创建一个docker_A,然后mysql、redis、mongodb等都安装在这个docker_A里,当我再重新建一个docker_B,又可以安装一套mysql、redis、mongodb等工具进去,有点类似于python的虚拟环境。这似乎也符合集装箱的思想,打包到一个Docker中,但这其实这样理解Docker是不对的

  • Python虚拟环境是用于隔离Python项目的依赖,而**Docker容器是用于隔离整个应用程序及其所有依赖,包括操作系统级别的依赖。**Docker是可以跨服务器,跨平台的(PS:为了确保容器在不同环境中的稳定运行,可能需要对容器配置进行一些调整,Docker有提供工具)

  • 在Docker的使用中,通常遵循单一职责原则,这意味着每个Docker容器运行一个服务或应用程序。

  • 简单点说,你通过Docker镜像安装的Mysql、Redis都是独立的Docker,并不是放在一起才是一个Docker。

  • 容器通过镜像(images)来提供应用程序运行所需的最小环境,这些镜像可能包含操作系统的某些部分(如Linux发行版的用户空间),但通常为了效率和可移植性而进行了优化和裁剪。

  • 在一个宿主服务器上可以安装很多Docker,比如可以是Mysql、Redis等不同应用的Docker,也可以是多个Mysql应用的Docker。它们通过Docker网络互相通信。

  • 可能你还有疑问,安装Docker和宿主机的操作系统有没有关系。而实际上是没关系的,每个Docker镜像都是从一个基础镜像(通常是某个操作系统的轻量级版本)开始构建的,并且包含了该操作系统和应用程序所需的所有依赖和配置。 也就是你在安装Mysql的时候其实已经选择安装了支持它运行的操作系统版本。

这个要深入体会一下,以上是我的理解。

Docker的组成

  • 镜像(Image):
    镜像是一个只读模板,包含了创建Docker容器的指令。镜像可以基于一个基础镜像(例如Ubuntu),然后在其上安装应用程序和依赖。

  • 容器(Container):
    容器是镜像的运行实例。容器是轻量级的、独立的,确保应用程序能在任何环境中一致运行。

  • Docker仓库(Registry):
    Docker仓库用来存储Docker镜像。常见的公共仓库是Docker Hub。

Docker安装

参考我之前的文章:
Docker安装

一些Docker命令

# 查看镜像
docker images

# 检查正在运行的容器,sudo是获得超级管理员权限
sudo docker ps

# 停止容器
sudo docker stop mysql-container
sudo docker stop redis-container

# 启动容器
sudo docker start mysql-container
sudo docker start redis-container

# 删除容器
sudo docker rm mysql-container
sudo docker rm redis-container

Dockerfile

Dockerfile 是一个文本文件,用于定义 Docker 镜像的内容和构建步骤。它包含了一系列指令和参数,告诉 Docker 如何构建镜像,并指定在容器启动时如何运行这个镜像。

比如我们在部署一个项目的时候,我们可以通过设置Dockerfile来更方便的来部署和执行这个项目。

假设我们要创建一个运行简单Python应用程序的Docker镜像,Dockerfile的内容可能如下所示:

# 使用官方的Python基础镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录下的所有文件到容器的/app目录
COPY . /app

# 安装所需的Python依赖
RUN pip install --no-cache-dir -r requirements.txt

# 暴露应用运行的端口
EXPOSE 5000

# 设置容器启动时运行的命令
CMD ["python", "app.py"]

Dockerfile 指令解释
FROM:指定基础镜像。这里使用的是官方的Python 3.8版本的精简镜像。
WORKDIR:设置工作目录。在此目录下执行后续指令。
COPY:将当前目录的所有内容复制到容器的/app目录。
RUN:执行命令。在这里是安装Python依赖项。
EXPOSE:声明容器监听的端口。这里是5000端口。
CMD:指定容器启动时要运行的命令。在这里是运行Python应用程序app.py。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

25考研:今年初试时间比去年更早了?

过去5年考研初试时间安排如下: 24考研:2023年12月23-24日(倒数第二个周末) 23考研:2022年12月24-25日(倒数第二个周末) 22考研:2021年12月25-26日(最后一个周末&#xf…

opencascade AIS_InteractiveContext源码学习7 debug visualization

AIS_InteractiveContext 前言 交互上下文(Interactive Context)允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是,对于已经被交互上下文识别的交互对象,必须使用上下文方法进行…

数据加密解密和哈希的解析

[S1301]数据的加解密 对提供的原始数据(字符串或者二进制数组)进行加密是数据保护框架体提供的基本功能,接下来我们利用一个简单的控制台程序来演示一下加解密如何实现。数据的加解密均由IDataProtector对象来完成,而该对象由IDa…

FormLayout布局和FormItem对比

FormLayout布局和FormItem对比 FormLayout布局 package mainimport ("fyne.io/fyne/v2""fyne.io/fyne/v2/app""fyne.io/fyne/v2/container""fyne.io/fyne/v2/layout""fyne.io/fyne/v2/widget" )func main() {myApp : app.…

vulnhub靶场ai-web 2.0

1 信息收集 1.1 主机发现 arp-scan -l 主机地址为192.168.1.4 1.2 服务端口扫描 nmap -sS -sV -A -T5 -p- 192.168.1.4 开放22,80端口 2 访问服务 2.1 80端口访问 http://192.168.1.4:80/ 先尝试admin等其他常见用户名登录无果 然后点击signup发现这是一个注…

【Rust入门教程】hello world程序

文章目录 前言Hello World程序运行总结 前言 对于学习任何一种新的编程语言,我们都会从编写一个简单的Hello World程序开始。这是一个传统,也是一个开始。在这篇文章中,我们将一起学习如何在Rust中编写你的第一个程序:Hello Worl…

重磅发布|WAIC 2024最新活动日程安排完整发布!

WAIC 2024 将于 7 月在上海世博中心和世博展览馆举行,论坛时间为 7 月 4 日至 6 日,展览时间为 7 月 4 日至 7 日。会议涵盖 AI 伦理治理、大模型、具身智能、投融资、教育人才等重点话题,体现 AI 向善等价值导向,9 位大奖得主和 …

免交互简单操作

免交互 交互:我们发出指令控制程序的运行,程序在接收到指令后按照指令的效果作出对应的反应 免交互:间接的,通过第三方的方式把指令传给程序,不用直接下达指令 Here Document免交互 这是命令行格式,也可…

CVE-2024-0603 漏洞复现

CVE-2024-0603 源码:https://gitee.com/dazensun/zhicms 开题: CVE-2024-0603描述:ZhiCms up to 4.0版本的文件app/plug/controller/giftcontroller.php中存在一处未知漏洞。攻击者可以通过篡改参数mylike触发反序列化,从而远程…

Dockerhub无法拉取镜像配置阿里镜像加速器

打开阿里镜像加速地址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 根据平台类型按照对应方式进行配置:Dokcer Desktop是在右上角点开配置 找到Docker Engine 进行设置JSON结构: 记得要重启Docker服务才会生效&#xff01…

无偏归一化自适应心电ECG信号降噪方法(MATLAB)

心电信号作为一种生物信号,含有大量的临床应用价值的信息,在现代生命医学研究中占有重要的地位。但心电信号低频、低幅值的特点,使其在采集和传输的过程中经常受到噪声的干扰,使心电波形严重失真,从而影响后续的病情分…

WSO2 products 文件上传漏洞(CVE-2022-29464)

前言 CVE-2022-29464 是一个影响多个 WSO2 产品的严重远程代码执行(RCE)漏洞。这些产品包括 WSO2 API Manager、WSO2 Identity Server 和 WSO2 Enterprise Integrator 等。由于用户输入验证不当,该漏洞允许未经身份验证的攻击者在服务器上上…

修改Springboot项目名称

修改Springboot项目名称 1. 整体描述2. 具体步骤2.1 修改module名称2.2 修改程序包名2.3 mybatis/mybatis-plus配置修改2.4 logback文件2.5 yml配置2.6 Application启动类2.7 其他 3. 总结 1. 整体描述 开发过程中,经常遇到新来个项目,需要一份初始代码…

平衡树专题Splay

写在前面: 部分来自孙宝(Steven24)的博客,表示感谢。 认识 什么是Splay 就是BST的一种,整体效率是很高的,均摊的次数是O(logn)级别的。 基本操作就是把节点旋转到BST的root,从而改善BST的平…

线性代数大题细节。

4.4 方程组解的结构(二)_哔哩哔哩_bilibili

无序中的秩序:为何看似混乱的工作方式可能更高效;刚刚!研究表明:混乱可能更有利于创造力;注意!你的过度整理可能正在浪费时间

当面对循规蹈矩,还是自由独立的选择题时,你应当选择自由独立。因为这样,你不但更省力,更省心,而且效率更高,生活更好。 在日常生活和工作中,经常会遇到两种截然不同的人: • 一种是事无巨细,将一切都安排得…

全面了解机器学习

目录 一、基本认识 1. 介绍 2. 机器学习位置 二、机器学习的类型 1. 监督学习 2. 无监督学习 3. 强化学习 三、机器学习术语 1. 训练样本 2. 训练 3. 特征 4. 目标 5. 损失函数 四、机器学习流程 五、机器学习算法 1. 分类算法 2. 聚类算法 3. 关联分析 4. …

红队工具Finger 安装具体以步骤-示例centos

1.git clone https://github.com/EASY233/Finger.git 如果没有 yum install git 2.pip3 install -r requirements.txt 找到finger所在的文件夹 可以用find -name "Finger"进入文件中配置命令 前提要安装python yum install python-pip33.python3 Finger.py -h

Databend 开源周报第 151 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend。 支持递归调用 UD…

浅谈k8s中cni0和docker0的关系和区别

最近在复习k8s网络方面的知识,查看之前学习时整理的笔记和文档还有过往自己总结的博客之后发现一个问题,就是在有关flannel和calico这两个k8s网络插件的文章和博客中,会涉及到cni0和docker0这两个网桥设备,但是都没有明确说明他们…