写点东西《Docker入门(上)》

写点东西《Docker入门(上)》

    • 环境变量
    • Docker 镜像
    • Docker CMD 与 ENTRYPOINT 有什么区别
    • Docker 中的网络:
    • Docker 存储:

Docker 是一个工具,允许开发人员将他们的应用程序及其所有依赖项打包到一个容器中。然后,此容器可以轻松传输并在安装了 Docker 的任何机器上运行,而无需担心环境差异。这是一种标准化的软件打包和运行方式。

什么是容器?

容器就像一个小包,其中包含程序运行所需的一切,使其易于在不同的计算机上移动和运行,而不会造成任何麻烦。

很酷的是,这个迷你计算机(容器)就像一个披着斗篷的超级英雄。它可以在任何计算机上运行,无论它们有何不同,因为它自带特殊环境。这是一种整洁有序的方式来组织软件,并确保它无论在何处都能以相同的方式工作。

我们为什么需要 Docker?

  1. 一致性:Docker 确保软件在您的计算机、朋友的计算机或任何计算机上都能以相同的方式工作。它保持一致性。
  2. 可移植性:您可以将软件及其朋友打包到 Docker 容器中,并且它可以随处移动。这就像把你的游戏及其所有规则装进行李箱,然后在朋友家玩一样。
  3. 隔离性:Docker 容器就像一个个小气泡。气泡内部发生的事情会留在气泡内部。这意味着容器中的一个程序不会与容器外的另一个程序发生冲突。
  4. 高效性:Docker 有助于节省计算机资源。您不必为一个程序配备一台完整的计算机,而可以在同一台计算机上运行多个容器,而不会相互干扰。
  5. 速度:Docker 使得启动、停止和共享软件变得快速而简单。这就像打开和关闭游戏机一样——快速而简单。

什么是 Docker 镜像?

Docker 镜像是一个程序及其运行所需的所有内容的快照。它是一个打包版本,其中包括代码、工具和设置,就像一个包含所有成分的饼干食谱快照。

镜像是食谱,而容器是您按照该食谱实际制作和运行程序时获得的内容。

一些基本的 Docker 命令。

  1. docker run nginx

    此命令告诉 Docker 使用“nginx”镜像运行容器。这就像告诉 Docker 启动预制程序(nginx,这是一个 Web 服务器)的新实例。

  2. docker ps

    向您显示正在运行的容器列表。这就像检查当前正在运行哪些程序。

  3. docker ps -a

    向您显示所有容器的列表,包括已停止的容器。这就像检查您运行的所有程序的历史记录。

  4. docker stop silly_sammet

    停止名为“silly_sammet”的正在运行的容器。这就像关闭当前正在运行的程序。

  5. docker rm silly_sammet

    删除名为“silly_sammet”的已停止容器。这就像扔掉您不再需要的程序的说明。

  6. docker images

    列出您拥有的所有 Docker 镜像。这就像查看您可以运行的所有不同程序的菜单。

  7. docker rmi nginx

    删除“nginx”镜像。这就像擦除您不再想使用的程序的食谱。

  8. docker pull nginx

    从互联网下载“nginx”镜像。这就像从食谱中获取新食谱。

  9. docker run ubuntu sleep 5

    使用“ubuntu”镜像运行容器并使其休眠 5 秒。这就像启动一个程序,该程序只需等待一小段时间然后停止。

  10. docker exec distracted_mcclintock cat /etc/hosts

    在名为“distracted_mcclintock”的正在运行的容器内执行命令。这就像窥视食谱以查看特定页面。

  11. docker run -d kodekloud/simple-webapp

    从“kodekloud/simple-webapp”映像中以分离模式运行容器。这就像启动程序并让它在后台运行。

  12. docker attach a043d

    使用 ID“a043d”将您的终端连接到正在运行的容器。这就像跳入正在运行的程序以查看正在发生的事情。

一些 Docker 概念:

  1. 使用标签运行:
  • 标签就像程序的版本。它指定您要运行哪个版本。
  • 示例代码: docker run nginx:latest
  • 这将运行 Nginx 程序的最新版本。
  1. 使用 STDIN 运行:
  • STDIN 就像在键盘上打字。某些程序需要您的输入。
  • 示例代码: docker run -i -t ubuntu
  • 这在 Ubuntu 容器内运行一个交互式终端,允许您键入命令。
  1. 使用端口映射运行:
  • 端口就像门。程序使用它们与外界通信。
  • 示例代码: docker run -p 8080:80 nginx
  • 这运行 Nginx,它在您计算机的端口 8080 上打开门,将其连接到容器的端口 80。
  1. 使用卷映射运行:
  • 卷就像共享文件夹。它们允许您将内容存储在容器外部。
  • 示例代码: docker run -v /your/local/folder:/container/folder nginx
  • 这运行 Nginx,并将您计算机上的一个文件夹连接到容器内的文件夹。
  1. 检查容器:
  • 检查就像仔细查看正在运行的程序。
  • 示例代码: docker inspect container_name
  • 这会为您提供有关正在运行或已停止的容器的详细信息。
  1. 容器日志:
  • 日志就像日记。它们记录程序已执行的操作。
  • 示例代码: docker logs container_name
  • 这会向您显示特定容器的日志或活动。

环境变量

环境变量就像程序用来查找重要信息的便笺,有点像程序理解和更好地工作的秘密消息!

  1. **
    Python 脚本 (app.py) 中的环境变量:**
  • 想象一下,您有一个用 Python 编写的程序 (app.py)。您可能想在不更改代码的情况下对其进行自定义。您可以使用环境变量。
  • 示例代码 (app.py):
  import osapp_color = os.getenv("APP_COLOR", "default_color")print(f"The app color is {app_color}")
  • 正常运行脚本: python app.py
  • 使用特定颜色运行: export APP_COLOR=blue; python app.py
  1. 在 Docker 中使用 ENV 变量:

    • Docker 容器也可以使用环境变量。这就像给容器内的程序提供指令。
    • 示例代码:
    • docker run -e APP_COLOR=green simple-webapp-color
    • 这会运行一个 Docker 容器( simple-webapp-color )并将环境变量 APP_COLOR 设置为“green”。
  2. 检查环境变量:

    • 有时,您需要检查正在运行的容器正在使用什么环境变量。
    • 示例代码: docker inspect blissful_hopper
    • 此命令提供有关名为“blissful_hopper”的容器的详细信息,包括其环境变量。

简单来说,环境变量就像程序(或 Docker 容器)可以读取的小注释,用于了解如何运行。您可以在运行程序之前设置这些注释,程序会使用它们来自定义自身。第二个示例中的 export 命令就像在运行程序之前写一个注释,告诉它如何运行。 docker inspect 命令就像窥探容器内部,查看它有什么注释。

Docker 镜像

Dockerfile:

Dockerfile 就像一组 Docker 创建映像的指令。它就像一个烘焙蛋糕的食谱。

# Use the Ubuntu base image
FROM Ubuntu# Update apt repository
RUN apt-get update# Install dependencies using apt
RUN apt-get install -y python# Install Python dependencies using pip
RUN pip install flask
RUN pip install flask-mysql# Copy source code to /opt folder
COPY . /opt/source-code# Set the working directory
WORKDIR /opt/source-code# Specify entry point to run the web server
ENTRYPOINT ["flask", "run"]

创建您自己的映像的步骤:

  1. 使用上述内容创建一个名为 Dockerfile 的文件。
  2. 将其保存在与源代码相同的目录中。

构建 Docker 镜像:

在终端中运行以下命令:

docker build -t your-image-name .

此命令告诉 Docker 使用当前目录中的 Dockerfile ( . ) 构建镜像,并用您选择的名称 ( -t your-image-name ) 标记它。

分层架构:

  • 可以将 Docker 镜像视为一个分层蛋糕。Dockerfile 中的每条指令都会向镜像添加一层。
  • 层是可重用的。如果您在代码中更改了某些内容,Docker 只会重新构建受影响的层,从而提高效率。

Docker 构建输出:

  • 构建镜像时,Docker 会显示该过程中的每个步骤。如果出现故障,它会给您一条错误消息。

可以容器化什么?

  • 几乎所有内容!应用程序、服务、数据库、网站,基本上任何软件都可以进行容器化。
  • 这就像将软件放入一个容器中,以便它可以在任何地方运行而不会造成麻烦。


Docker CMD 与 ENTRYPOINT 有什么区别

CMD 在 Docker 中:

  • 可以将 CMD 视为在启动容器时程序执行的默认操作。
  • 这就像在说,“嘿,在运行此容器时,默认执行此操作。”
  • 示例: CMD ["flask", "run"] 表示容器启动时,它会自动运行 Flask Web 服务器。

CMD 示例:

FROM alpine
CMD ["sleep", "5"]

在此示例中,当您使用此映像运行容器时,它会自动休眠 5 秒。

ENTRYPOINT 在 Docker 中:

  • 可以将 ENTRYPOINT 视为容器执行的主要操作。它就像 boss 命令。
  • 它在容器启动时设置默认应用程序以运行,但您仍可以根据需要覆盖它。
  • 示例: ENTRYPOINT ["flask", "run"] 表示容器主要用于运行 Flask Web 服务器,但您仍可以根据需要添加更多命令。

ENTRYPOINT 示例:

FROM alpine
ENTRYPOINT ["sleep"]
CMD ["5"]

在这里,主要目的是睡觉,并且您仍然可以根据需要覆盖睡眠持续时间。

在这两种情况下,容器在启动时都会休眠几秒钟。关键区别在于您如何提供参数以及它们是否可以轻松覆盖。

CMD 就像在说“这是一个默认的操作”,而 ENTRYPOINT 就像在说“这是主要的操作,但您可以在需要时对其进行微调”。它们都有助于定义容器在启动时执行的操作。


Docker 中的网络:

Docker 网络帮助容器(程序)相互通信,确保它们能够顺利协同工作。

默认网络:

  • Docker 为容器创建默认网络以进行通信。
  • 示例代码: docker run ubuntu --network=host
    *
    这将使用主机网络运行 Ubuntu 容器,这意味着它与主机共享网络命名空间。

用户定义网络:

  • 您可以创建自己的网络以实现更好的组织和控制。
  • 示例代码:
  docker network create --driver=bridge --subnet=182.18.0.0/16 custom-isolated-network
  • 这会创建一个名为 custom-isolated-network 的用户定义桥接网络,并带有特定子网。

列出网络:

  • 您可以看到您拥有的所有网络。
  • 示例代码: docker network ls

检查网络:

  • 您可以检查特定网络的详细信息。
  • 示例代码: docker network inspect blissful_hopper
    *
    这显示了有关名为“blissful_hopper”的网络的详细信息。

嵌入式 DNS:

  • Docker 具有内置的 DNS 系统,以便容器可以通过名称相互查找。
  • 示例代码: mysql.connect(mysql)
    *
    这可能是您代码中的一行,其中名为“mysql”的服务使用 Docker 的 DNS 连接到另一个名为“mysql”的服务。

Docker 存储:

Docker 存储就像决定在使用容器时将数据保存在哪里。您可以将它们保存在容器内,使用卷在容器之间共享它们,或将它们存储在容器外以确保安全。

Docker 中的文件系统:

  • Docker 使用分层架构来构建镜像。Dockerfile 中的每条指令都会向文件系统添加一个新层。
# Dockerfile
FROM Ubuntu
RUN apt-get update && apt-get install -y python
RUN pip install flask flask-mysql
COPY . /opt/source-code
WORKDIR /opt/source-code
ENTRYPOINT ["flask", "run"]
  • Dockerfile 中的层:
    *
    第 1 层:基本 Ubuntu 层
    *
    第 2 层:apt 包中的更改
    *
    第 3 层:pip 包中的更改
    *
    第 4 层:源代码
    *
    第 5 层:使用“flask”命令更新入口点
    *
    第 6 层:容器层

镜像层:

  • 构建 Docker 镜像时,它由只读层组成。每层表示对镜像的更改或添加。
    *
    第 1 层:基本 Ubuntu 层
    *
    第 2 层:apt 包中的更改
    *
    第 3 层:pip 包中的更改
    *
    第 4 层:源代码
    *
    第 5 层:使用“flask”命令更新入口点
# Build the Docker image
docker build -t mmumshad/my-custom-app .

容器层:

  • 当您运行 Docker 容器时,会在只读镜像层之上添加一个读写层。此层特定于正在运行的容器。
    *
    层 6. 容器层
# Run the Docker container
docker run mmumshad/my-custom-app

卷:

  • 卷是一种在容器外保存数据的方式。它们类似于外部存储。
# Create a Docker volume
docker volume create data_volume# Use the volume in a container
docker run -v data_volume:/var/mysql mysql
  • 您还可以使用 -v 将主机中的特定目录挂载到容器:
# Mount a host directory to a container directory
docker run -v /path/on/host:/var/mysql/mysql -d mysql
  • docker run --mount 命令用于将主机计算机中的特定目录或文件挂载到正在运行的 Docker 容器中。
docker run --mount type=bind,source=/mysql,target=/var/mysql mysql

存储驱动程序:

  • Docker 使用存储驱动程序来管理数据的存储和访问方式。一些常见的存储驱动程序包括 AUFS、ZFS、BTRFS、设备映射器、Overlay 和 Overlay2。

管理 Docker 中的数据
关于存储驱动程序
Volumes

好的,这篇文章到此结束。
感谢您阅读本文,我们将在下一篇文章《Docker入门(下)》中再见!❤️

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

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

相关文章

【Redis】Redis 进阶

文章目录 1. BigKey1.1 MoreKey1.2 BigKey 2. 缓存双写一致性更新策略2.1 读缓存数据2.2 数据库和缓存一致性的更新策略2.3 canal 实现双写一致性 3. 进阶应用3.1 统计应用3.2 hyperloglog3.3 GEO3.4 bitmap 4. 布隆过滤器5. Redis 经典问题5.1 缓存预热5.2 缓存穿透5.3 缓存击…

Android Persistent自启机制

1.persistent属性的使用 在开发系统级的App时,很有可能就会用persistent属性。当在AndroidManifest.xml中将persistent属性设置为true时,那么该App就会具有如下两个特性: 在系统刚起来的时候,该App也会被启动起来 该App被强制杀…

华为完全自研之后,中国的手机会变得更便宜好用吗?

华为完全自研之后,中国的手机是否会变得更便宜好用,这是一个复杂的问题,涉及到多个因素。 首先,华为完全自研意味着公司需要自主研发和生产手机的所有组件,包括处理器、摄像头、屏幕等。这将有助于降低成本&#xff0c…

antd时间选择器,设置显示中文

需求 在实现react,里面引入antd时间选择器,默认显示为英文 思路 入口处使用ConfigProvider全局化配置,设置 locale 属性为中文来实现。官方文档介绍全局化配置 ConfigProvider - Ant Design 代码 import React from react; import { Prov…

(Arcgis)matlab编程批量处理hdf5格式转换为tif格式

国家青藏高原科学数据中心 全球逐日0.05时空连续地表温度数据集(2002-2022) 此代码仅用于该数据集处理 版本:arcgis10.2 matlab2020 参考:MATLAB hdf(h5)文件转成tif图片格式(批量处理) 一、遇到问题 h5…

MidTool的AIGC与NFT的结合-艺术创作和版权保护的革新

在数字艺术和区块链技术的交汇点上,NFT(非同质化代币)正以其独特的方式重塑艺术品的收藏与交易。将MidTool(https://www.aimidtool.com/)的AIGC(人工智能生成内容)创作的图片转为NFT&#xff0c…

GEE数据集——2000 年至 2022 年与传感器无关的 MODIS 和 VIIRS LAI/FPAR CDR

2000 年至 2022 年与传感器无关的 MODIS 和 VIIRS LAI/FPAR CDR 该地理空间数据集包含关键的生物物理参数,即叶面积指数(LAI)和光合有效辐射分量(FPAR),是描述陆地生态系统特征不可或缺的参数。该数据集解…

uniapp自定义封装只有时分秒的组件,时分秒范围选择

说实话&#xff0c;uniapp和uview的关于只有时分秒的组件实在是不行。全是日历&#xff0c;但是实际根本就不需要日历这玩意。百度了下&#xff0c;终于看到了一个只有时分秒的组件。原地址&#xff1a;原地址&#xff0c;如若侵犯请联系我删除 <template><view clas…

使用Eexcl调换txt文本中的两列数据

问题描述 本方法使用对txt存储的数据格式有特别要求。需要数据每行具有相同个数数据&#xff0c;且具有统一的间隔符号隔开。&#xff08;常见的间隔符号有tab键、空格、逗号、分号等&#xff09; 对于一个有空格间隔每行只有三列数据的txt文件&#xff0c;对调第二列和第三列…

为什么要使用云原生数据库?云原生数据库具体有哪些功能?

相比于托管型关系型数据库&#xff0c;云原生数据库极大地提高了MySQL数据库的上限能力&#xff0c;是云数据库划代的产品&#xff1b;云原生数据库最早的产品是AWS的 Aurora。AWS Aurora提出来的 The log is the database的理念&#xff0c;实现存储计算分离&#xff0c;把大量…

C++ n皇后问题 || 深度优先搜索模版题

n− 皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n &#xff0c;请你输出所有的满足条件的棋子摆法。 输入格式 共一行&#xff0c;包含整数 n 。 …

雷达信号处理——恒虚警检测(CFAR)

雷达信号处理的流程 雷达信号处理的一般流程&#xff1a;ADC数据——1D-FFT——2D-FFT——CFAR检测——测距、测速、测角。 雷达目标检测 首先要搞清楚什么是检测&#xff0c;检测就是判断有无。雷达在探测的时候&#xff0c;会出现很多峰值&#xff0c;这些峰值有可能是目标…

C++学习笔记(三十三):c++ 宏定义

本节对c的宏定义进行描述。c使用预处理器来对宏进行操作&#xff0c;我们可以写一些宏来替换代码中的问题&#xff0c;c的宏是以#开头&#xff0c;预处理器会将所有的宏先进行处理&#xff0c;之后在通过编译器进行编译。宏简单说就是文本替换&#xff0c;可以替换代码中的任何…

Rhinoceros 8(犀牛8)中文授权版支持Win/Mac

Rhinoceros 8&#xff0c;也称为犀牛8&#xff0c;是一款专业的三维建模软件&#xff0c;深受设计师们的喜爱。这款软件为设计师提供了无限的创意空间和强大的工具&#xff0c;无论他们是产品设计师、建筑师还是工业设计师。 Rhinoceros 8采用了先进的NURBS建模技术&#xff0c…

基于JavaWeb+BS架构+SpringBoot+Vue+Hadoop短视频流量数据分析与可视化系统的设计和实现

基于JavaWebBS架构SpringBootVueHadoop短视频流量数据分析与可视化系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 目  录 目  录 I 1绪 论 1 1.1开发背景 1 1.2开…

k8s集群配置NodeLocal DNSCache

一、简介 当集群规模较大时&#xff0c;运行的服务非常多&#xff0c;服务之间的频繁进行大量域名解析&#xff0c;CoreDNS将会承受更大的压力&#xff0c;可能会导致如下影响&#xff1a; 延迟增加&#xff1a;有限的coredns服务在解析大量的域名时&#xff0c;会导致解析结果…

Python 语言基础

目录 Python 语言基础语法特点注释缩进规范编写规则命名规范 变量保留字与标识符Python中的变量定义变量 基本数据类型数字字符串Bool类型数据类型转换 输入和输出input&#xff08;&#xff09;输入print 输出 Python 语言基础 语法特点 注释 单行注释&#xff0c;语法如下…

transbigdata笔记:数据栅格化

1 area_to_grid 在边界或形状中生成矩形栅格 1.1 主要使用方法 transbigdata.area_to_grid(location, accuracy500, methodrect, paramsauto) 1.2 主要参数 location (bounds(List) or shape(GeoDataFrame) 生成栅格的位置。 如果边界为 [lon1&#xff0c; lat1&#xff0…

从传统训练到预训练和微调的训练策略

目录 前言1 使用基础模型训练手段的传统训练策略1.1 随机初始化为模型提供初始点1.2 目标函数设定是优化性能的关键 2 BERT微调策略: 适应具体任务的精妙调整2.1 利用不同的representation和分类器进行微调2.2 通过fine-tuning适应具体任务 3 T5预训练策略: 统一任务形式以提高…

[BJDCTF2020]ZJCTF,不过如此

题目源码&#xff1a; <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo "<br><h1>".file_get_contents($tex…