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

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

更多精彩

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

什么是容器?

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

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

我们为什么需要 Docker?

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

什么是 Docker 镜像?

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

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

一些基本的 Docker 命令。

docker run nginx 此命令告诉 Docker 使用“nginx”镜像运行容器。这就像告诉 Docker 启动预制程序(nginx,这是一个 Web 服务器)的新实例。 docker ps 向您显示正在运行的容器列表。这就像检查当前正在运行哪些程序。 docker ps -a 向您显示所有容器的列表,包括已停止的容器。这就像检查您运行的所有程序的历史记录。 docker stop silly_sammet 停止名为“silly_sammet”的正在运行的容器。这就像关闭当前正在运行的程序。 docker rm silly_sammet 删除名为“silly_sammet”的已停止容器。这就像扔掉您不再需要的程序的说明。 docker images 列出您拥有的所有 Docker 镜像。这就像查看您可以运行的所有不同程序的菜单。 docker rmi nginx 删除“nginx”镜像。这就像擦除您不再想使用的程序的食谱。 docker pull nginx 从互联网下载“nginx”镜像。这就像从食谱中获取新食谱。 docker run ubuntu sleep 5 使用“ubuntu”镜像运行容器并使其休眠 5 秒。这就像启动一个程序,该程序只需等待一小段时间然后停止。 docker exec distracted_mcclintock cat /etc/hosts 在名为“distracted_mcclintock”的正在运行的容器内执行命令。这就像窥视食谱以查看特定页面。 docker run -d kodekloud/simple-webapp 从“kodekloud/simple-webapp”映像中以分离模式运行容器。这就像启动程序并让它在后台运行。 docker attach a043d 使用 ID“a043d”将您的终端连接到正在运行的容器。这就像跳入正在运行的程序以查看正在发生的事情。

一些 Docker 概念:

使用标签运行:

标签就像程序的版本。它指定您要运行哪个版本。示例代码: docker run nginx:latest这将运行 Nginx 程序的最新版本。

使用 STDIN 运行:

STDIN 就像在键盘上打字。某些程序需要您的输入。示例代码: docker run -i -t ubuntu这在 Ubuntu 容器内运行一个交互式终端,允许您键入命令。

使用端口映射运行:

端口就像门。程序使用它们与外界通信。示例代码: docker run -p 8080:80 nginx这运行 Nginx,它在您计算机的端口 8080 上打开门,将其连接到容器的端口 80。

使用卷映射运行:

卷就像共享文件夹。它们允许您将内容存储在容器外部。示例代码: docker run -v /your/local/folder:/container/folder nginx这运行 Nginx,并将您计算机上的一个文件夹连接到容器内的文件夹。

检查容器:

检查就像仔细查看正在运行的程序。示例代码: docker inspect container_name这会为您提供有关正在运行或已停止的容器的详细信息。

容器日志:

日志就像日记。它们记录程序已执行的操作。示例代码: docker logs container_name这会向您显示特定容器的日志或活动。

环境变量

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

** 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

在 Docker 中使用 ENV 变量:

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

有时,您需要检查正在运行的容器正在使用什么环境变量。示例代码: 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"]

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

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

构建 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入门(下)》中再见!❤️

更多精彩

点击这里~~

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: