Docker搭建，镜像加速，DPanel安装1.为什么要学习DockerQ1: 在我买电脑上明明是好的！！！Q2: 根着教程安装一个软件，结果安装失败Docker: 此时就有一个解决方案，Docker容器化部署 ，它能用集装箱式的隔离，完美解决环境问题，彻底解决部署时的各种环境麻烦2.安装参考毫秒镜像Docker安装文档一键安装脚本bash <(curl -f -s --connect-timeout 10 --retry 3 https://linuxmirrors.cn/docker.sh) --source mirrors.tencent.com/docker-ce --source-registry docker.1ms.run --protocol https --install-latested true --close-firewall false --ignore-backup-tips可以用如下命令验证下是否安装成功docker version输出如下即为成功Client: Docker Engine - Community Version: 29.1.3 API version: 1.52 Go version: go1.25.5 Git commit: f52814d Built: Fri Dec 12 14:53:00 2025 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 29.1.3 API version: 1.52 (minimum version 1.44) Go version: go1.25.5 Git commit: fbf3ed2 Built: Fri Dec 12 14:49:33 2025 OS/Arch: linux/amd64 Experimental: false containerd: Version: v2.2.1 GitCommit: dea7da592f5d1d2b7755e3a161be07f43fad8f75 runc: Version: 1.3.4 GitCommit: v1.3.4-0-gd6d73eb8 docker-init: Version: 0.19.0 GitCommit: de40ad03.设置镜像加速看下/etc/docker目录是否存在，如果存在则再看daemon.json是否存在file /etc/docker/ file /etc/docker/daemon.json如果不存在使用如下命令创建mkdir -p /etc/docker如果daemon.json不存在则直接执行如下命令tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://docker.1ms.run"] } EOF如果daemon.json存在则打开文件，将镜像加速地址(https://docker.1ms.run) 追加到registry-mirrors里Docker镜像加速站https://hub.uuuadc.top/docker.1panel.live hub.rat.dev DockerHub 镜像加速代理https://docker.anyhub.us.kghttps://docker.chenby.cn https://dockerhub.jobcher.com/ 镜像使用说明https://dockerhub.icuDocker镜像加速站https://docker.ckyl.me镜像使用说明 73https://docker.awsl9527.cn镜像使用说明 67https://docker.hpcloud.cloudAtomHub 可信镜像仓库平台 77（只包含基础镜像，共336个）https://atomhub.openatom.cnDaoCloud 镜像站 146https://docker.m.daocloud.io重载daemon.json的配置systemctl daemon-reload重启dockersystemctl restart docker4.DPanel安装DPanel是由donknap开发的一个开源项目Github地址：传送门Docker Hub：传送门一个轻量级的Docker管理工具，为用户提供一个直观、易用的界面来管理Docker容器。dpanel以其轻量化和高性能著称，是Docker用户的理想选择。功能如下：提供可视化面板操作docker及compose容器管事镜像管理日志查看Docker网络管理数据卷管理开始安装，参考DPanel GitHub主页文档，执行如下命令：docker run -d --name dpanel --restart=always \ -p 8807:8080 -e APP_NAME=dpanel \ -v /var/run/docker.sock:/var/run/docker.sock -v dpanel:/dpanel \ dpanel/dpanel:lite
Docker安装MySQLDocker是一个开源的容器化平台，可以方便地搭建各种环境，包括MySQL数据库。在本教程中，我们将介绍如何使用Docker安装MySQL。安装Docker首先，您需要在您的计算机上安装Docker。您可以在Docker官方网站下载适用于您的操作系统的Docker Desktop应用程序并安装。拉取MySQL镜像接下来，您需要从Docker Hub上拉取MySQL镜像。打开终端并执行以下命令：docker pull mysql这将从Docker Hub上下载MySQL镜像。您可以通过以下命令查看已下载的镜像：docker images启动MySQL容器现在，您可以使用以下命令启动MySQL容器：docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest此命令将在后台运行MySQL容器，并将其命名为“some-mysql”。此外，您需要设置MySQL的root密码，以便在后续的步骤中进行访问。连接MySQL容器要连接到MySQL容器，您可以使用以下命令：docker exec -it some-mysql mysql -p此命令将连接到MySQL容器，并要求您输入root密码。输入您在步骤3中设置的密码即可登录MySQL。使用MySQL容器现在，您已经成功地使用Docker安装和启动了MySQL容器。您可以使用常规的MySQL命令进行数据库管理。例如，您可以使用以下命令创建一个新的数据库：CREATE DATABASE mydatabase;DDL（数据定义语言）学习当我们想要创建一个新的MySQL表时，我们需要使用DDL（数据定义语言）来定义表的结构。DDL包括创建表，修改表和删除表等操作。创建库基本语法在MySQL中，可以使用CREATE DATABASE语句来创建一个新的数据库。它的基本语法如下：CREATE DATABASE database_name;其中，database_name是要创建的数据库的名称。例如，要创建一个名为mydatabase的新数据库，可以使用以下查询：CREATE DATABASE mydatabase;需要注意的是，创建数据库的用户必须具有足够的权限。如果当前用户没有创建数据库的权限，可以使用以下查询来授权：GRANT CREATE ON *.* TO 'user'@'localhost';这个查询将授予user用户在本地主机上创建数据库的权限。在创建数据库后，可以使用USE语句来选择要使用的数据库。例如，要使用mydatabase数据库，可以使用以下查询：USE mydatabase;这个查询将选择mydatabase数据库，并将其设置为当前数据库。在选择数据库后，可以使用其他SQL语句来创建表、插入数据、查询数据等。命名在MySQL中，数据库名必须遵循以下规则：数据库名必须以字母开头，可以包含字母、数字和下划线。数据库名不能超过64个字符。数据库名区分大小写。数据库名不能与MySQL保留关键字相同，例如SELECT、INSERT、UPDATE等。需要注意的是，虽然MySQL允许使用特殊字符和空格作为数据库名，但这并不是一个好的做法，因为它可能会导致一些问题。为了避免这些问题，最好只使用字母、数字和下划线作为数据库名。另外，建议在命名数据库时使用有意义的名称，以便更好地描述数据库的内容和用途。例如，如果数据库用于存储客户信息，可以将其命名为customers。这样做可以使数据库更易于管理和维护。字符集在MySQL中，字符集用于定义数据库中存储的字符集和排序规则。MySQL支持多种字符集，包括ASCII、UTF-8、GBK等。在创建数据库时，可以指定要使用的字符集。如果没有指定字符集，则使用默认字符集。要查看MySQL中可用的字符集，可以使用以下查询：SHOW CHARACTER SET;要查看当前数据库的字符集，可以使用以下查询：SELECT @@character_set_database;要创建一个使用特定字符集的数据库，可以在CREATE DATABASE语句中指定字符集。例如，要创建一个使用UTF-8字符集的数据库，可以使用以下查询：CREATE DATABASE mydatabase CHARACTER SET utf8;排序规则在MySQL中，排序规则用于定义字符串比较的方式。MySQL支持多种排序规则，包括二进制排序、不区分大小写排序、区分大小写排序等。在创建数据库时，可以指定要使用的排序规则。如果没有指定排序规则，则使用默认排序规则。要查看MySQL中可用的排序规则，可以使用以下查询：SHOW COLLATION;要查看当前数据库的排序规则，可以使用以下查询：SELECT @@collation_database;要创建一个使用特定排序规则的数据库，可以在CREATE DATABASE语句中指定排序规则。例如，要创建一个使用不区分大小写排序的数据库，可以使用以下查询：CREATE DATABASE mydatabase COLLATE utf8_general_ci;创建表基本语法在MySQL中，用于创建表的关键字是CREATE TABLE。使用CREATE TABLE语句可以创建一个新的表，并指定表的名称、列名、数据类型、约束等信息。以下是一个简单的CREATE TABLE语句示例：CREATE TABLE mytable ( id INT, name VARCHAR(50), age INT );这个语句将创建一个名为mytable的新表，包含三个列：id、name和age。其中，id和age列的数据类型为整数，name列的数据类型为可变长度的字符串。在CREATE TABLE语句中，还可以指定列的约束，如主键、唯一性约束、非空约束等。例如，要在id列上定义主键约束，可以使用以下语句：CREATE TABLE mytable ( id INT PRIMARY KEY, name VARCHAR(50), age INT );这个语句将在id列上定义主键约束，保证表中每行数据的唯一性。除了列的约束外，还可以在CREATE TABLE语句中指定表的字符集、排序规则等信息。例如，要创建一个使用UTF-8字符集和不区分大小写排序的表，可以使用以下语句：CREATE TABLE mytable ( id INT, name VARCHAR(50), age INT ) CHARACTER SET utf8 COLLATE utf8_general_ci;这个语句将创建一个使用UTF-8字符集和不区分大小写排序的新表。需要注意的是，在创建表时，应根据实际情况选择适当的数据类型、约束、字符集和排序规则，以确保表的正确性和性能。同时也可以使用AUTO_INCREMENT关键字来创建自增列。自增列是一种特殊的列，它的值会自动递增，每次插入新行时都会自动分配一个新的值。以下是一个使用AUTO_INCREMENT关键字创建自增列的示例：CREATE TABLE mytable ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT );这个语句将创建一个名为mytable的新表，包含三个列：id、name和age。其中，id列使用AUTO_INCREMENT关键字定义为自增列，并将其设置为主键。在插入新行时，可以省略id列的值，MySQL会自动分配一个新的值。例如，要插入一行数据，可以使用以下语句：INSERT INTO mytable (name, age) VALUES ('John', 30);这个语句将插入一行数据，id列的值会自动递增。需要注意的是，自增列只能用于整数类型的列，且每个表只能有一个自增列。在创建表时，应根据实际情况选择是否需要使用自增列。如果表中的数据不需要自动递增的唯一标识符，可以不使用自增列。数据类型在MySQL中，有多种数据类型可用于创建表中的列。以下是一些常用的MySQL数据类型：INT或INTEGER：用于存储整数。FLOAT或DOUBLE：用于存储浮点数。DECIMAL：用于存储精确的小数。VARCHAR：用于存储可变长度的字符串。CHAR：用于存储固定长度的字符串。TEXT：用于存储较长的文本数据。DATE：用于存储日期。TIME：用于存储时间。DATETIME：用于存储日期和时间。TIMESTAMP：用于存储时间戳。BOOLEAN或BOOL：用于存储布尔值。除了这些常用的数据类型外，MySQL还支持其他一些数据类型，如枚举、集合、二进制数据等。在创建表时，可以根据需要选择适当的数据类型。需要注意的是，不同的数据类型具有不同的存储要求和限制，因此应根据实际情况选择合适的数据类型。索引在MySQL中，索引是一种用于加速数据检索的数据结构。索引可以提高查询效率，减少查询所需的时间和资源。MySQL支持多种类型的索引，包括B-tree索引、哈希索引、全文索引等。以下是一些常用的MySQL索引:PRIMARY KEY：用于定义表的主键，可以保证表中每行数据的唯一性。UNIQUE：用于定义唯一性约束，可以保证列中的值唯一。INDEX：用于创建普通索引，可以加速查询。FULLTEXT：用于创建全文索引，可以加速全文检索。在创建表时，可以在列上定义索引。例如，要在id列上创建主键索引，可以使用以下查询：CREATE TABLE mytable ( id INT PRIMARY KEY, name VARCHAR(50) );要在name列上创建唯一性约束，可以使用以下查询：CREATE TABLE mytable ( id INT, name VARCHAR(50) UNIQUE );要在name列上创建普通索引，可以使用以下查询：CREATE TABLE mytable ( id INT, name VARCHAR(50), INDEX name_index (name) );要在content列上创建全文索引，可以使用以下查询：CREATE TABLE mytable ( id INT, content TEXT, FULLTEXT content_index (content) );需要注意的是，索引可以提高查询效率，但也会增加数据插入、更新和删除的时间和资源消耗。因此，在创建索引时，应根据实际情况选择适当的索引类型和列。修改表如果我们想要修改现有的表结构，我们可以使用ALTER TABLE语句。以下是一些常见的ALTER TABLE操作：添加列要在表中添加新列，我们可以使用以下语法：ALTER TABLE users ADD COLUMN birthdate DATE;在上面的示例中，我们向“users”表中添加了一个名为“birthdate”的列。修改列要修改现有列的定义，我们可以使用以下语法：ALTER TABLE users MODIFY COLUMN email VARCHAR(200);在上面的示例中，我们将“users”表中的“email”列长度从100修改为200。删除列要删除表中的列，我们可以使用以下语法：ALTER TABLE users DROP COLUMN email;在上面的示例中，我们从“users”表中删除了名为“email”的列。删除表如果我们想要删除表，我们可以使用以下语句：DROP TABLE users;在上面的示例中，我们删除了名为“users”的表。总之，DDL是MySQL中重要的语言，用于定义和修改表结构。它使我们能够创建，修改和删除表，以及添加，修改和删除表中的列。DDL（数据操作语言）学习当我们需要对MySQL数据库中的数据进行操作时，我们可以使用数据操作语言（DML）。DML包括SELECT、INSERT、UPDATE和DELETE语句。在本篇文章中，我们将学习如何使用MySQL中的DML语句。SELECT语句SELECT语句用于从MySQL数据库中检索数据。它的基本语法如下：SELECT column1, column2, ... FROM table_name WHERE condition;其中，column1, column2, ...是要查询的列名，table_name是要查询的表名，condition是查询条件。例如，要查询customers表中的所有数据，可以使用以下查询：SELECT * FROM customers;WHERE用于指定查询条件。它的基本语法如下：SELECT column1, column2, ... FROM table_name WHERE condition;其中，condition是查询条件。例如，要查询customers表中姓氏为Smith的客户，可以使用以下查询：SELECT * FROM customers WHERE last_name = 'Smith';ORDER BY用于按照指定的列对查询结果进行排序。它的基本语法如下：SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC|DESC];其中，column1是要排序的列名，ASC表示升序排序，DESC表示降序排序。例如，要按照客户的姓氏对customers表进行升序排序，可以使用以下查询：SELECT * FROM customers ORDER BY last_name ASC;GROUP BY用于将查询结果按照指定的列进行分组，并对每个分组进行聚合计算。它的基本语法如下：SELECT column1, column2, ..., aggregate_function(column) FROM table_name WHERE condition GROUP BY column1, column2, ...;其中，column1, column2, ...是要分组的列名，aggregate_function(column)是要对每个分组进行的聚合计算，例如SUM(column)、AVG(column)、COUNT(column)等。例如，要按照客户的国家对orders表进行分组，并计算每个国家的订单总数，可以使用以下查询：SELECT country, COUNT(*) as total_orders FROM orders GROUP BY country;这个查询将orders表按照国家进行分组，并对每个分组计算订单总数。查询结果将包含每个国家的名称和订单总数。需要注意的是，GROUP BY语句必须放在WHERE语句之后，而聚合函数必须放在SELECT语句中。在分组时，只能使用SELECT语句中指定的列和聚合函数，而不能使用其他列。INSERT语句INSERT INTO用于向数据库中插入新数据。它的基本语法如下：INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);其中，table_name是要插入数据的表名，column1, column2, ...是要插入数据的列名，value1, value2, ...是要插入的数据值。例如，要向customers表中插入一条新的客户数据，可以使用以下查询：INSERT INTO customers (first_name, last_name, email) VALUES ('John', 'Doe', 'john.doe@example.com');UPDATE语句UPDATE用于更新数据库中的数据。它的基本语法如下：UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;其中，table_name是要更新数据的表名，column1 = value1, column2 = value2, ...是要更新的列和值，condition是更新条件。例如，要将customers表中姓氏为Smith的客户的邮箱地址更新为new.email@example.com，可以使用以下查询：UPDATE customers SET email = 'new.email@example.com' WHERE last_name = 'Smith';DELETE语句DELETE用于从数据库中删除数据。它的基本语法如下：DELETE FROM table_name WHERE condition;其中，table_name是要删除数据的表名，condition是删除条件。例如，要从customers表中删除姓氏为Doe的客户，可以使用以下查询：DELETE FROM customers WHERE last_name = 'Doe';联表查询在MySQL中，JOIN操作是将两个或多个表中的数据组合在一起的一种方法。JOIN操作可以帮助我们从多个表中检索数据，并将它们组合在一起以便更好地分析和理解数据。MySQL中有四种不同类型的JOIN操作：LEFT JOIN、RIGHT JOIN、INNER JOIN和FULL JOIN。下面我们将逐一介绍它们的用法和区别。INNER JOININNER JOIN操作返回两个表中都存在的行。如果一个表中没有与另一个表中的行匹配的行，则不会返回任何数据。下面是一个INNER JOIN操作的示例：SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;在这个例子中，我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件，即table1.id = table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。LEFT JOINLEFT JOIN操作返回左表中的所有行，以及右表中与左表中的行匹配的行。如果右表中没有与左表中的行匹配的行，则返回NULL值。下面是一个LEFT JOIN操作的示例：SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;在这个例子中，我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件，即table1.id= table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。RIGHT JOINRIGHT JOIN操作与LEFT JOIN操作类似，但是它返回右表中的所有行，以及左表中与右表中的行匹配的行。如果左表中没有与右表中的行匹配的行，则返回NULL值。下面是一个RIGHT JOIN操作的示例：SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id;在这个例子中，我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件，table1.id= table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。FULL JOINFULL JOIN操作返回两个表中的所有行。如果一个表中没有与另一个表中的行匹配的行，则返回NULL值。下面是一个FULL JOIN操作的示例：SELECT * FROM table1 FULL JOIN table2 ON table1.id = table2.id;在这个例子中，我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件，table1.id = table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配MySQL中的子查询在MySQL中，子查询是一种查询语句，它嵌套在另一个查询语句中。子查询可以帮助我们从一个表中检索数据，并将其用作另一个查询的条件。MySQL中的子查询可以嵌套多层，每个子查询都可以返回一个结果集，这个结果集可以用作另一个查询的条件。下面我们将逐一介绍MySQL中子查询的用法和示例。子查询的基本语法子查询的基本语法如下：SELECT column1, column2, ... FROM table1 WHERE column_name operator (SELECT column_name FROM table_name WHERE condition);在这个语法中，我们使用了一个子查询，它嵌套在WHERE子句中。子查询返回一个结果集，这个结果集将用作WHERE子句中的条件。子查询的示例下面是一个使用子查询的示例：SELECT * FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');在这个示例中，我们使用了一个子查询，它嵌套在WHERE子句中。子查询返回一个结果集，这个结果集包含了所有来自美国的客户的ID。这个结果集将用作WHERE子句中的条件，以过滤orders表中来自美国的客户的订单。子查询的类型MySQL中有两种类型的子查询：标量子查询和表子查询。标量子查询标量子查询返回一个单一的值，这个值可以用作另一个查询的条件。下面是一个标量子查询的示例：SELECT * FROM orders WHERE order_date > (SELECT MAX(order_date) FROM orders);在这个示例中，我们使用了一个标量子查询，它返回了orders表中最近的订单日期。这个日期将用作WHERE子句中的条件，以过滤orders表中最近的订单。表子查询表子查询返回一个结果集，这个结果集可以用作另一个查询的条件。下面是一个表子查询的示例：SELECT * FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');在这个示例中，我们使用了一个表子查询，它返回了所有来自美国的客户的ID。这个结果集将用作WHERE子句中的条件，以过滤orders表中来自美国的客户的订单。MySQL常用函数MySQL是一种常用的关系型数据库管理系统，它提供了许多内置函数来处理和操作数据，包括字符串函数、日期和时间函数、数学函数和聚合函数。字符串函数CONCATCONCAT函数用于将两个或多个字符串连接在一起。它的语法如下：CONCAT(string1, string2, ...)例如，要将名字和姓氏连接在一起，可以使用以下查询：SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM customers;SUBSTRINGSUBSTRING函数用于从字符串中提取子字符串。它的语法如下：SUBSTRING(string, start, length)其中，string是要提取子字符串的字符串，start是子字符串的起始位置，length是子字符串的长度。例如，要从字符串中提取前5个字符，可以使用以下查询：SELECT SUBSTRING('Hello, world!', 1, 5);REPLACEREPLACE函数用于替换字符串中的子字符串。它的语法如下：REPLACE(string, from_string, to_string)其中，string是要替换子字符串的字符串，from_string是要替换的子字符串，to_string是要替换成的字符串。例如，要将字符串中的所有空格替换为下划线，可以使用以下查询：SELECT REPLACE('Hello, world!', ' ', '_');日期和时间函数NOWNOW函数用于返回当前日期和时间。它的语法如下：NOW()例如，要获取当前日期和时间，可以使用以下查询：SELECT NOW();DATE_FORMATDATE_FORMAT函数用于将日期和时间格式化为指定的字符串。它的语法如下：DATE_FORMAT(date, format)其中，date是要格式化的日期和时间，format是要格式化成的字符串。例如，要将日期格式化为年-月-日的形式，可以使用以下查询：SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');数学函数ABSABS函数用于返回一个数的绝对值。它的语法如下：ABS(number)例如，要获取-10的绝对值，可以使用以下查询：SELECT ABS(-10);ROUNDROUND函数用于将一个数四舍五入到指定的小数位数。它的语法如下：ROUND(number, decimals)其中，number是要四舍五入的数，decimals是要保留的小数位数。例如，要将3.14159四舍五入到两位小数，可以使用以下查询：SELECT ROUND(3.14159, 2);聚合函数COUNTCOUNT函数用于计算指定列中的行数。它的语法如下：COUNT(column)例如，要计算customers表中的行数，可以使用以下查询：SELECT COUNT(*) FROM customers;SUMSUM函数用于计算指定列中的数值总和。它的语法如下：SUM(column)例如，要计算orders表中的总销售额，可以使用以下查询：SELECT SUM(total_amount) FROM orders;AVGAVG函数用于计算指定列中的平均值。它的语法如下：AVG(column)例如，要计算orders表中的平均销售额，可以使用以下查询：SELECT AVG(total_amount) FROM orders;总结本文整理了一些MySQL入门的知识来帮助大家快速入门和使用MySQL，如果大家有兴深入学习可以阅读MySQL的官方文档
说明Scrapy作为一款优秀的Python爬虫框架，相信很多人都可以利用它完成各式各样的爬虫job，那么我们的Scrapy项目如何部署到生产环境呢？部署后如何管理我们的爬虫job呢？有人说直接上传代码到服务器上然后执行，这样当然可以，但这种方式不够优雅，不方便管理。用下面这种方式来管理我们的爬虫任务是不是方便了很多，也简单了很多这套页面其实就是scrapyd+spiderkeeper实现的Scrapyd：https://scrapyd.readthedocs.io/en/latest/​ 按照官方的介绍来看它就是一个用于部署和运行scrapy爬虫的程序，它允许我们使用JSON API的方式来管理我们的爬虫程序，换而言之，就是scrapyd可以用来部署scrapy项目，但没有一个可视化的页面来操作，只能通过HTTP请求调用它提供的接口来操作，很不方便。Spiderkeeper：https://github.com/DormyMo/SpiderKeeper大致意思就是spiderkeeper提供了一个dashboard来调度管理爬虫程序，它目前支持的爬虫服务有scrapyd，换而言之就是对scrapyd进行了封装，提供了可视化的面板来操作安装Docker传送门 https://docs.docker.com/get-docker/找到自己操作系统对应的版本下载即可安装成功后终端执行docker --version可以出现版本号即可编写Dockerfile在本机随便一个位置创建目录，我这里以scrapy-container为例进入到刚刚创建的目录，然后创建scrapyd.conf文件用于自定义scrapyd的配置，内容如下(我这里使用的是scrapyd的默认配置)[scrapyd] eggs_dir = eggs logs_dir = logs items_dir = jobs_to_keep = 5 dbs_dir = dbs max_proc = 0 max_proc_per_cpu = 10 finished_to_keep = 100 poll_interval = 5.0 bind_address = 0.0.0.0 http_port = 6800 debug = off runner = scrapyd.runner application = scrapyd.app.application launcher = scrapyd.launcher.Launcher webroot = scrapyd.website.Root [services] schedule.json = scrapyd.webservice.Schedule cancel.json = scrapyd.webservice.Cancel addversion.json = scrapyd.webservice.AddVersion listprojects.json = scrapyd.webservice.ListProjects listversions.json = scrapyd.webservice.ListVersions listspiders.json = scrapyd.webservice.ListSpiders delproject.json = scrapyd.webservice.DeleteProject delversion.json = scrapyd.webservice.DeleteVersion listjobs.json = scrapyd.webservice.ListJobs daemonstatus.json = scrapyd.webservice.DaemonStatus利用pip freeze > requirements.txt将项目运行需要的依赖导出到当前目录创建start.sh启动脚本，即在容器开始运行时执行，内容如下#!/bin/bash scrapyd & spiderkeeper --server=http://localhost:6800创建Dockerfile文件，内容如下FROM python:3.6 ADD . /code WORKDIR /code COPY ./scrapyd.conf /etc/scrapyd/ EXPOSE 5000 RUN pip3 install --upgrade pip setuptools==45.2.0 RUN pip3 install scrapy RUN pip3 install requests RUN pip3 install scrapyd RUN pip3 install spiderkeeper RUN pip3 install numpy RUN pip3 install -r requirements.txt RUN chmod +x /code/start.sh CMD ["/code/start.sh"]此时目录结构应该是这样的构建镜像并生成容器利用Dockerfile生成镜像，执行命令，格式如下# docker build -t 镜像名称:镜像版本 . docker build -t scrapyd-container:1.0 .利用docker images命令查看本机镜像利用刚刚生成的镜像创建容器，我这里以镜像名称为scrapyd-container# docker run -di --name=容器名称 -p 5000:5000 镜像名称:镜像版本 docker run -di --name=scrapyd-container -p 5000:5000 scrapyd-container:1.0访问http://localhost:5000 用户名admin，密码admin本地项目打包安装scrapyd-client pip install scrapyd-client 在项目目录执行如下命令将项目打包为eggscrapyd-deploy --build-egg output.egg生成了output.egg的文件Dashboard使用点击create projecrt创建一个项目点击侧栏的Deploy上传刚刚的egg包点击periodic jobs点击add job选择爬虫job与调度希望本文对您有所帮助