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

news2024/12/26 22:14:27

写点东西《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 os
 
  app_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.coloradmin.cn/o/1375659.html

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

相关文章

SQL--case语句

case语句,按从上到下的书写顺序计算每个WHEN子句的布尔表达式。返回第一个取值为TRUE的布尔表达式所对应的结果表达式的值。如果没有取值为TRUE的布尔表达式,则当指定了ELSE子句时,返回ELSE子句中指定的结果;如果没有指定ELSE子句&#xff0c…

【Docker】快速入门之Docker的安装及使用

一、引言 1、什么是Docker Docker是一个开源的应用容器引擎,它让开发者可以将他们的应用及其依赖打包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之…

1688采购工厂货源对接API

1688现有API列表 item_get 获得1688商品详情item_search 按关键字搜索商品item_search_img 按图搜索1688商品(拍立淘)item_search_suggest 获得搜索词推荐item_fee 获得商品快递费用seller_info 获得店铺详情item_search_shop 获得店铺的所有商品item_p…

解决python画图无法显示中文的问题

python画图遇到的问题: 中文不显示: 解决方法:把字体设置为支持中文的字体,比如黑体 黑体下载链接: 链接:https://pan.baidu.com/s/1BD7zQEBUfcIs6mC2CPYy6A?pwdv120 提取码:v120 pyhon…

SpringBoot默认配置文件

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot默认配置文件 📚个人知识库: Leo知识库,欢迎大家访问 1.前言☕…

Git 基础指令

Git 基础指令 本章涵盖了我们在使用 Git 完成各种操作时将会用到的各种基本命令。 在学习完本章之后,我们应该能够配置并初始化一个仓库(repository)、开始或停止跟踪(track)文件、暂存(stage)…

教你如何打造自己的知识付费平台!

明理信息科技知识付费saas租户平台 一、确定目标群体 首先,你需要明确你的知识付费平台的目标用户是谁。这将帮助你确定所需的内容和功能,以及如何吸引和留住这些用户。例如,如果你的目标群体是职场新人,你的平台可能需要提供职…

如何编写和管理自动化测试用例

开始本篇文章之前,先来介绍下什么是自动化测试用例,即通过编写脚本程序来模拟用户操作和功能验证,并由机器自动执行无人值守的测试用例。 相比手工测试用例,自动化测试用例更快、更准确、更可靠、容易重复执行,且每次…

【python】python新年烟花代码【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 新年的钟声即将敲响,为了庆祝这个喜庆的时刻,我们可以用 Python 编写一个炫彩夺目的烟花盛典。本文将详细介绍如何使用 Pygame 库创建一个令人惊叹的烟花效果。 一、效果图: 二…

植物大战僵尸-C语言搭建童年游戏(easyx)

游戏索引 游戏名称&#xff1a;植物大战僵尸 游戏介绍&#xff1a; 本游戏是在B站博主<程序员Rock>的视频指导下完成 想学的更详细的小伙伴可以移步到<程序员Rock>视频 语言项目&#xff1a;完整版植物大战僵尸&#xff01;可能是B站最好的植物大战僵尸教程了&…

程序员有哪些接单的渠道?

这题我会&#xff01;程序员接单的渠道那可太多了&#xff0c;想要接到合适的单子&#xff0c;筛选一个合适的平台很重要。如果你也在寻找一个合适的接单渠道&#xff0c;可以参考以下这些方向。 首先&#xff0c;程序员要对接单有一个基本的概念&#xff1a;接单渠道可以先粗略…

034 - STM32学习笔记 - TIM定时器(三) - 高级定时器2

034 - STM32学习笔记 - TIM定时器&#xff08;三&#xff09; - 高级定时器2 哥们最近搞了个公众号&#xff0c;后面的文章会同步在公众号上发布&#xff0c;各位看官帮忙点点关注&#xff0c;后续一些其他方面的学习内容也会在公众号上发布&#xff0c;有兴趣的可以看看哟&…

电脑可以连接网络但浏览器无法访问部分或全部网页

啾咪&#xff01;离大谱了&#xff0c;电脑一段时间没有用&#xff0c;最近打开却发现可以连接网络但是无法访问部分网页&#xff08;如CSDN&#xff09;&#xff0c;显示如下&#xff1a; 有三种解决方法&#xff1a; &#xff08;1&#xff09;清除DNS缓存 步骤&#xff1a;…

为什么删掉MySQL表中一半的数据,表文件大小却不变?

一个InnoDB表包含两部分&#xff1a;表结构定义和数据。表结构定义占用空间很小&#xff0c;所以主要来看一下表数据。 表数据既可以存放在共享表空间里&#xff0c;也可以是单独的文件。由参数innodb_file_per_table控制&#xff0c;这个参数值为OFF&#xff0c;则表示存放在…

Unity——VContainer的依赖注入

一、IOC控制反转和DI依赖倒置 1、IOC框架核心原理是依赖倒置原则 C#设计模式的六大原则 使用这种思想方式&#xff0c;可以让我们无需关心对象的生成方式&#xff0c;只需要告诉容器我需要的对象即可&#xff0c;而告诉容器我需要对象的方式就叫做DI&#xff08;依赖注入&…

亚马逊店铺账号在申诉中需要注意的几点?

切勿推卸责任 如需提供证明材料&#xff0c;确保证明材料的真实性(比如有时候要拆料) 不要给自己加罪名。问题是什么只承认这个错误。有申诉勘查机构&#xff0c;还会升级查询。 不要重复发一模一样的申诉信。起码要修改一下顺序&#xff0c;或者提醒没有收到&#xff0c;我再发…

为什么基于树的模型在表格数据任务中比深度学习更优?

论文 | Why do tree-based models still outperform deep learning on tabular data? 代码 | https://github.com/LeoGrin/tabular-benchmark 虽然深度学习在计算机视觉、自然语言处理等领域取得了显著的成果&#xff0c;但在处理表格数据任务方面&#xff0c;深度学习模型的…

Logback框架基本认识

文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器&am…

机器学习激活函数

激活函数 激活函数是人工神经网络中的一个重要组成部分。它们用于向神经网络中添加非线性因素&#xff0c;使得网络能够解决复杂问题&#xff0c;如图像识别、语言处理等。激活函数的作用是决定一个神经元是否应该被激活&#xff0c;也就是说&#xff0c;它帮助决定神经元的输…

大模型关于Lora论文集合

《Chain of LoRA:Efficient Fine-tuning of Language Models via Residual Learning》 Chain of LoRA (COLA)&#xff0c;这是一种受 Frank-Wolfe 算法启发的迭代优化框架&#xff0c;旨在弥合 LoRA 和全参数微调之间的差距&#xff0c;而不会产生额外的计算成本或内存开销。CO…