📋 Docker 入门教程

📌 目录

  1. Docker 简介
    1.1 Docker 的优点
  2. Docker 的实际应用场景
    2.1 数据库部署
    2.2 API 服务器
    2.3 消息队列
    2.4 机器学习和数据分析
    2.5 监控和日志
    2.6 网络应用
    2.7 开发工具
    2.8 教学和研究
  3. Docker 入门项目
    3.1 项目简介
    3.2 Python 脚本编写
    3.3 Dockerfile 创建
    3.4 Docker 镜像构建
    3.5 Docker 容器运行

1。Docker 简介

Docker 是一个开源的应用容器引擎,允许开发者将应用与其环境打包成一个独立的容器,并确保应用在任何环境中都能一致地运行。

1.1 Docker 的优点:
  • 一致性:独立于主机环境,应用在 Docker 容器中始终以相同的方式运行。
  • 轻量级:容器共享主机的操作系统内核,而不需要自己的操作系统。
  • 快速启动:容器可以在几秒钟内启动。
  • 隔离:容器之间互不干扰,具有良好的安全性。

2。Docker 的实际应用场景

Docker 在很多场景中都有应用,以下是一些典型的使用场景:

2.1 数据库部署

使用 Docker 轻松启动和管理数据库服务,如 MySQL、PostgreSQL 和 MongoDB。

2.2 API 服务器

在 Docker 中部署 RESTful API 服务。

2.3 消息队列

使用 Docker 运行消息队列服务,如 RabbitMQ 或 Kafka。

2.4 机器学习和数据分析

Docker 可用于打包和部署机器学习模型或数据分析工作流。

2.5 监控和日志

使用 Docker 运行监控工具,如 Prometheus,或日志系统,如 ELK 堆栈。

2.6 网络应用

使用 Docker 运行 CMS 系统,如 WordPress 和 Joomla。

2.7 开发工具

在 Docker 中运行开发工具,如 GitLab 和 Jenkins。

2.8 教学和研究

为学生或研究人员提供一致和可重复的工作环境。


3。Docker 入门项目

通过一个简单的项目,我们将演示如何使用 Docker 运行一个 Python 脚本,该脚本将自动下载指定的网页并将其保存为 PDF 文件。

3.1 项目简介

这个项目展示了如何在 Docker 中运行 Python 脚本,并利用 pdfkitrequests 库将网页保存为 PDF。

3.2 Python 脚本编写

创建一个名为 web2pdf.py 的文件:

1
2
3
4
5
6
7
8
9
import pdfkit
import requests
import sys

url = sys.argv[1]
response = requests.get(url)
filename = 'output.pdf'

pdfkit.from_file(response.text, filename)

同时,我们需要一个 requirements.txt 文件:

1
2
pdfkit==0.6.1
requests==2.24.0
3.3 Dockerfile 创建

在同一个目录下创建 Dockerfile:

1
2
3
4
5
6
7
8
9
10
FROM python:3.8-slim

WORKDIR /app

ADD . /app

RUN pip install --no-cache-dir -r requirements.txt
RUN apt-get update && apt-get install -y wkhtmltopdf

ENTRYPOINT [ "python", "web2pdf.py" ]
3.4 Docker 镜像构建

在终端中,执行以下命令构建 Docker 镜像:

1
docker build -t web2pdf .
3.5 Docker 容器运行

构建完成后,运行 Docker 容器:

1
docker run --rm -v $PWD:/app web2pdf [目标网页URL]

例如:

1
docker run --rm -v $PWD:/app web2pdf https://openai.com

这将生成一个名为 output.pdf 的文件,其中包含下载的网页内容。


希望这份教程能为你提供一个 Docker 的初步入门,帮助你理解 Docker 的基本概念和应用。🚀
📘 Docker 镜像源速度测试脚本的修正与优化教程


📌 简介

本教程旨在指导您理解和优化一个用于测试 Docker 镜像源下载速度的脚本。我们将讨论原始脚本的结构、其中存在的问题,以及如何修正这些问题。


📚 目录

  1. 初始脚本内容与结构
  2. 识别并分析脚本中的问题
  3. 脚本的修正和建议
  4. 运行与测试

1️⃣ 初始脚本内容与结构

1.1 镜像源列表定义

在脚本的开头,我们定义了一个要测试的 Docker 镜像源列表。

1
2
3
4
mirror_list=(
"https://docker.nju.edu.cn"
...
)

1.2 遍历并测试镜像源

通过一个 for 循环,我们遍历了上面定义的每个镜像源。

1
2
3
4
for mirror in "${mirror_list[@]}"
do
...
done

1.3 Docker 镜像源设置

为了测试每个源的速度,我们需要更改 Docker 的配置文件 /etc/docker/daemon.json,然后重启 Docker 服务。

1
2
3
4
sudo mkdir -p /etc/docker
...
sudo systemctl daemon-reload
sudo systemctl restart docker

1.4 下载速度测试

使用 docker pull 命令下载一个标准的 hello-world 镜像,并记录下载所需的时间。

1
2
3
start_time=$(date +%s)
docker pull hello-world
end_time=$(date +%s)

1.5 结果输出

输出每个源的下载时长。

1
2
duration=$((end_time - start_time))
echo "Download duration: $duration seconds"

1.6 Docker 镜像清理

为避免冗余,下载后将 hello-world 镜像删除。

1
docker rmi hello-world

2️⃣ 识别并分析脚本中的问题

2.1 /etc/docker/daemon.json 文件生成方式的问题

在原始脚本中,使用了 EOF 来生成配置文件,但这种方式可能会引入不必要的空格或其他问题。


3️⃣ 脚本的修正和建议

3.1 更改生成配置文件的方式

为确保内容的准确性,我们建议使用以下方式生成 /etc/docker/daemon.json 文件:

1
2
3
echo '{
"registry-mirrors": ["'"$mirror"'"]
}' | sudo tee /etc/docker/daemon.json

4️⃣ 运行与测试

完成上述所有修复后,您可以直接运行脚本来测试各个 Docker 镜像源的下载速度。

注意:请确保您有适当的权限来修改 Docker 的配置和重启 Docker 服务。