Docker -- 2 -- 利用docker部署网站和数据库

news/2024/5/20 23:22:36/文章来源:https://blog.csdn.net/weixin_34302561/article/details/90303927

在Docker – 系统整洁之道 – 1中已经对Docker的一些命令和Docker镜像的使用及操作做了记录。
这次就利用docker进行一次真正的实例使用,使用docker搭建一个简单的答题系统,这个系统是当时做来给网络安全周做手机答题的系统,很简单,代码风格很差。

这篇主要记录了三种docker使用的方式。

  • 用supervisor方式运行一个多进程的docker实例
  • 创建一个ngnix和php运行的环境
  • 创建一个ngnix,php,mysql集合运行的环境,使用docker-compose构建

{% fi /images/201609/4.svg, Docker, Docker %}

感觉docker的东西越看越多,从刚开始的简简单单的一个docker run,到现在看到要build自己的镜像,compose,也就是以前的Fig,配置网络,还有swarm的docker集群,一点一点来吧。

先把两个附件写在这里吧
此片博客中构建php+ngnix+mysql测试环境的脚本
在测试环境中的答题网站源码

supervisor方式运行一个多进程的docker实例


Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务。但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具。这里使用进程管理工具 supervisor 来管理容器中的多个进程。使用 Supervisor 可以更好的控制、管理、重启我们希望运行的进程。

首先创一个文件夹叫做supervisor,目录结构为

~/Docker tree supervisor
supervisor
├── Dockerfile
└── supervisord

其中文件Dockerfile文件内容为:

#使用时哪个镜像
FROM ubuntu:13.04
MAINTAINER examples@docker.com
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get upgrade -y#这里安装 3 个软件,还创建了 2 个 ssh 和 supervisor 服务正常运行所需要的目录。
RUN apt-get install -y --force-yes perl-base=5.14.2-6ubuntu2
RUN apt-get install -y apache2.2-common
RUN apt-get install -y openssh-server apache2 supervisor
RUN mkdir -p /var/run/sshd
RUN mkdir -p /var/log/supervisor#添加 supervisord 的配置文件,并复制配置文件到对应目录下面。
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf#映射了 22 和 80 端口,使用 supervisord 的可执行路径启动服务
EXPOSE 22 80
CMD ["/usr/bin/supervisord"]

文件supervisord内容为:

#supervsord 配置软件本身,使用 nodaemon 参数来运行
[supervisord]
nodaemon=true#配置两个服务
[program:sshd]
command=/usr/sbin/sshd -D
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"

使用命令进行构建

sudo docker build -t supervisor

输出:

~/Docker/supervisor  sudo docker build -t supervisord .
Password:
Sending build context to Docker daemon 3.584 kB
Step 1 : FROM ubuntu:13.04
---> a58cd502f927
Step 2 : MAINTAINER examples@docker.com
---> Using cache
---> 15f104cdeb77
Step 3 : RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
---> Using cache
---> c6bb44d794ea
Step 4 : RUN apt-get update
---> Using cache
---> adcd83eecb0d
Step 5 : RUN apt-get upgrade -y
---> Using cache
---> 89e045811261
Step 6 : RUN apt-get install -y --force-yes perl-base=5.14.2-6ubuntu2
---> Using cache
---> bcdc472cc73a
Step 7 : RUN apt-get install -y apache2.2-common
---> Using cache
---> d8991f8aa3c6
Step 8 : RUN apt-get install -y openssh-server apache2 supervisor
---> Using cache
---> a713034800d6
Step 9 : RUN mkdir -p /var/run/sshd
---> Using cache
---> 3138e3644958
Step 10 : RUN mkdir -p /var/log/supervisor
---> Using cache
---> 958c08978b0c
Step 11 : COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
---> 8e9a0c97a133
Removing intermediate container d95b58057f73
Step 12 : EXPOSE 22 80
---> Running in 9cabb0865159
---> b4aa8b82cd57
Removing intermediate container 9cabb0865159
Step 13 : CMD /usr/bin/supervisord
---> Running in 237f71166211
---> 569f95736129
Removing intermediate container 237f71166211
Successfully built 569f95736129

使用docker ps 一下

~/Docker/supervisor  docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                          NAMES
c82c830770bc        supervisord:latest   "/usr/bin/supervisord"   32 seconds ago      Up 30 seconds       0.0.0.0:32770->22/tcp, 0.0.0.0:32769->80/tcp   supervisord

发现刚才build的镜像已经跑起来了,访问 http://127.0.0.1:32769,可以web服务已经跑起来了。

这里写图片描述

使用命令docker exec进入container里面看看

 ~/Docker/supervisor  docker exec -it c82c830770bc bash
root@c82c830770bc:/# hello
bash: hello: command not found
root@c82c830770bc:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var
root@c82c830770bc:/#

使用passwd修改一下密码,然后在本机的命令行里进行ssh连接吧。

ngnix和php运行的环境


该方法就是直接使用docker命令进行构建一个ngnix,php结合运行的环境,没有使用docker-compose。

先用户根目录~下创建目录,并将该目录设置为Docker的共享目录。

Workspace
└── tmp├── docker│   └── nginx│       └── conf.d│           └── default.conf└── www├── index.html└── phpinfo.php

其中default.conf文件内容,这是个nginx的配置文件

server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}location ~ \.php$ {fastcgi_pass   php:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;include        fastcgi_params;}
}

index.html 里写一句 HelloW0rld,phpinfo.php里面写一个<?php phpinfo();?>

然后在命令行下执行命令

docker pull php:5.6-fpm-alpinedocker pull ngnix:1.10.2docker run --name dream.php -d -v ~/Workspace/tmp/www:/var/www/html:ro php:5.6-fpmdocker run --name dream.nginx -p 80:80 -d -v ~/Workspace/tmp/www:/usr/share/nginx/html:ro -v ~/Workspace/tmp/docker/nginx/conf.d:/etc/nginx/conf.d:ro --link dream.php:php nginx:1.10.2

好的,如果不出意外,就可以看到phpinfo的界面了。这个是没有添加mysql的测试环境,直接在目录~/Workspace/tmp/www下面放网页就可以直接使用了。

ngnix,php,mysql集合运行的环境


Supervisor给出了一种能够在container中运行多个线程的方法,但是现在还是不知道要怎么样把自己的web服务部署到container中,数据库怎么建,可以有人会说直接使用SFTP将网站直接传到container里,安装数据库,配环境,但是docker中一旦container被删除,内容就没了。像这样将所有服务放在一个容器内的模式有个形象的非官方称呼:Fat Container。与之相对的是将服务分拆到容器的模式。从Docker的设计可以看到,构建镜像的过程中可以指定唯一一个容器启动的指令,因此Docker天然适合一个容器只运行一种服务,而这也是官方更推崇的。下面就记录一下部署一个简单的php程序和数据库联动的测试环境。

整体的文件结构是这样的
我们创建一个这样的目录

Docker
└── test├── data  数据库文件夹│   └── mysql├── docker-compose.yml docker-compose配置文件├── htdocs 网站文件夹│   ├── index.html│   └── index.php├── log 日志文件│   └── nginx├── mysql mysql构建文件│   └── Dockerfile├── nginx nginx构建文件│   ├── Dockerfile│   ├── conf.d│   │   └── default.conf│   └── nginx.conf└── php php构建文件└── Dockerfile

mysql 独立部署


mysql目录下的Dockerfile文件只有一行FROM mysql:5.6,也就是直接使用mysql官方镜像5.6,然后使用命令

docker build -t phpenv/mysql mysql

构建自己的镜像phpenv/mysql。
使用命令

docker run -p 3306:3306 -v ~/Docker/test/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it phpenv/mysql

启动镜像,将容器的3306端口绑定到本机的3306端口,其中参数-v后代表使用~/Docker/test/data/mysql挂在到镜像的/var/lib/mysql,也就是替代源镜像的数据库文件目录,让数据库文件目录暴露在本机上,做到数据库内容的持久化。MYSQL_ROOT_PASSWORD为设置mysql的一个root密码。

运行结果

~/Docker/test docker run -p 3306:3306 -v ~/Docker/test/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it phpenv/mysql
2016-12-27 15:06:49 0 [Note] mysqld (mysqld 5.6.35) starting as process 1 ...
2016-12-27 15:06:49 1 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2016-12-27 15:06:49 1 [Note] Plugin 'FEDERATED' is disabled.
2016-12-27 15:06:49 1 [Note] InnoDB: Using atomics to ref count buffer pool pages
2016-12-27 15:06:49 1 [Note] InnoDB: The InnoDB memory heap is disabled
2016-12-27 15:06:49 1 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-12-27 15:06:49 1 [Note] InnoDB: Memory barrier is not used
2016-12-27 15:06:49 1 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-12-27 15:06:49 1 [Note] InnoDB: Using Linux native AIO
2016-12-27 15:06:49 1 [Note] InnoDB: Using CPU crc32 instructions
2016-12-27 15:06:49 1 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-12-27 15:06:49 1 [Note] InnoDB: Completed initialization of buffer pool
2016-12-27 15:06:49 1 [Note] InnoDB: Highest supported file format is Barracuda.
2016-12-27 15:06:49 1 [Note] InnoDB: 128 rollback segment(s) are active.
2016-12-27 15:06:49 1 [Note] InnoDB: Waiting for purge to start
2016-12-27 15:06:49 1 [Note] InnoDB: 5.6.35 started; log sequence number 1626027
2016-12-27 15:06:49 1 [Note] Server hostname (bind-address): '*'; port: 3306
2016-12-27 15:06:49 1 [Note] IPv6 is available.
2016-12-27 15:06:49 1 [Note]   - '::' resolves to '::';
2016-12-27 15:06:49 1 [Note] Server socket created on IP: '::'.
2016-12-27 15:06:49 1 [Warning] 'proxies_priv' entry '@ root@bd69eb248839' ignored in --skip-name-resolve mode.
2016-12-27 15:06:49 1 [Note] Event Scheduler: Loaded 0 events
2016-12-27 15:06:49 1 [Note] mysqld: ready for connections.
Version: '5.6.35'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

使用DBeaver连接后
这里写图片描述

查看一下当前~/Docker/test/data/mysql数据库目录下的文件

~/Docker/test/data/mysql  ls
auto.cnf           ib_logfile0        ib_logfile1        ibdata1            mysql              performance_schema

新建一个库docker_test后~/Docker/test/data/mysql数据库目录下的文件

~/Docker/test/data/mysql ls
auto.cnf           docker_test        ib_logfile0        ib_logfile1        ibdata1            mysql              performance_schema

可以发现数据库已经创建好了,也如下图
这里写图片描述

为了验证数据库数据的持久型,我们先停止当前运行的container并产出它,然后从镜像启动一个新的container,如命令

~/Docker ⮀ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
970dec0f7de9        phpenv/mysql        "docker-entrypoint.sh"   30 minutes ago      Up 30 minutes       0.0.0.0:3306->3306/tcp   berserk_brown
~/Docker ⮀ docker stop 970dec0f7de9
970dec0f7de9
~/Docker ⮀ docker rm 970dec0f7de9
970dec0f7de9
~/Docker ⮀ docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS               NAMES
c82c830770bc        supervisord:latest   "/usr/bin/supervisord"   35 hours ago        Exited (0) 32 minutes ago                       supervisord
~/Docker ⮀ docker run -p 3306:3306 -v ~/Docker/test/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it phpenv/mysql
2016-12-27 15:38:04 0 [Note] mysqld (mysqld 5.6.35) starting as process 1 ...
2016-12-27 15:38:04 1 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2016-12-27 15:38:04 1 [Note] Plugin 'FEDERATED' is disabled.
2016-12-27 15:38:04 1 [Note] InnoDB: Using atomics to ref count buffer pool pages
2016-12-27 15:38:04 1 [Note] InnoDB: The InnoDB memory heap is disabled
2016-12-27 15:38:04 1 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-12-27 15:38:04 1 [Note] InnoDB: Memory barrier is not used
2016-12-27 15:38:04 1 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-12-27 15:38:04 1 [Note] InnoDB: Using Linux native AIO
2016-12-27 15:38:04 1 [Note] InnoDB: Using CPU crc32 instructions
2016-12-27 15:38:04 1 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-12-27 15:38:04 1 [Note] InnoDB: Completed initialization of buffer pool
2016-12-27 15:38:04 1 [Note] InnoDB: Highest supported file format is Barracuda.
2016-12-27 15:38:04 1 [Note] InnoDB: 128 rollback segment(s) are active.
2016-12-27 15:38:04 1 [Note] InnoDB: Waiting for purge to start
2016-12-27 15:38:04 1 [Note] InnoDB: 5.6.35 started; log sequence number 1626037
2016-12-27 15:38:04 1 [Note] Server hostname (bind-address): '*'; port: 3306
2016-12-27 15:38:04 1 [Note] IPv6 is available.
2016-12-27 15:38:04 1 [Note]   - '::' resolves to '::';
2016-12-27 15:38:04 1 [Note] Server socket created on IP: '::'.
2016-12-27 15:38:04 1 [Warning] 'proxies_priv' entry '@ root@bd69eb248839' ignored in --skip-name-resolve mode.
2016-12-27 15:38:04 1 [Note] Event Scheduler: Loaded 0 events
2016-12-27 15:38:04 1 [Note] mysqld: ready for connections.
Version: '5.6.35'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

再次连接数据库验证,发现刚才新建的库docker_test还在,数据库文件持久型保存了。

docker-compose 中mysql配置

待完善

docker-compose 中nginx部署

nginx在构建的时候要替换两个配置文件,Dockfile

FROM nginx:1.10.2ADD  nginx.conf      /etc/nginx/nginx.conf
ADD  conf.d/*    /etc/nginx/conf.d/

挂载文件在docker-compose里进行定义。

待完善

docker-compose 中php配置

php什么也不做,只通过Dockfile

FROM php:5.6-fpm

来构建

待完善

docker-compose 构建


docker-compose文件

nginx:build: ./nginxports:- "40080:80"
    links:- "php"
    volumes:- ~/Docker/test/htdocs:/usr/share/nginx/html

php:build: ./phpports:- "49000:9000"
    links:- "mysql"
    volumes:- ~/Docker/test/htdocs:/var/www/html

mysql:build: ./mysqlports:- "43306:3306"
    volumes:- ~/Docker/test/data/mysql:/var/lib/mysql
    environment:MYSQL_ROOT_PASSWORD: 123456

记录一下,首先docker-compse是用来集合构建多个镜像的工具,这里我们集合了nginx,php,mysql来搭建一个php的测试环境,在文件中,有一个links参数,是用来连接其他实例,让多个实例之间可以进行通信。

这里有整合文件的下载链接,下载后,将文件放在用户根目录下,命令行执行docker-compose up,结果

~/Docker/test ⮀ docker-compose up
Building mysql
Step 1 : FROM mysql:5.6
---> e1406e1f7c42
Successfully built e1406e1f7c42
WARNING: Image for service mysql was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Building php
Step 1 : FROM php:5.6-fpm
5.6-fpm: Pulling from library/php
75a822cd7888: Already exists
e4d8a4e038be: Pull complete
81d4d961577a: Pull complete
54283fea14a4: Pull complete
a1b82ddb6e57: Pull complete
fe532c795718: Pull complete
f02389f3f13e: Pull complete
5777f6cf03c5: Pull complete
24b45111f193: Pull complete
Digest: sha256:022410892774f45ebd39bdb4df39a4a72e6ae5db96a31ee83e7eb25382cd2491
Status: Downloaded newer image for php:5.6-fpm
---> 55423bcf0cfc
Successfully built 55423bcf0cfc
WARNING: Image for service php was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Building nginx
Step 1 : FROM nginx:1.10.2
---> c2d83d8cde8d
Step 2 : ADD nginx.conf /etc/nginx/nginx.conf
---> e45c0dceafb9
Removing intermediate container ca538d0f2fd1
Step 3 : ADD conf.d/* /etc/nginx/conf.d/
---> bf0d37221331
Removing intermediate container ebaa3b27453a
Successfully built bf0d37221331
WARNING: Image for service nginx was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating test_mysql_1
Creating test_php_1
Creating test_nginx_1
Attaching to test_mysql_1, test_php_1, test_nginx_1
mysql_1  | 2016-12-28 07:29:43 0 [Note] mysqld (mysqld 5.6.35) starting as process 1 ...
mysql_1  | 2016-12-28 07:29:43 1 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
mysql_1  | 2016-12-28 07:29:43 1 [Note] Plugin 'FEDERATED' is disabled.
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Using atomics to ref count buffer pool pages
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: The InnoDB memory heap is disabled
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Memory barrier is not used
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Compressed tables use zlib 1.2.8
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Using Linux native AIO
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Using CPU crc32 instructions
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Initializing buffer pool, size = 128.0M
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Completed initialization of buffer pool
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Highest supported file format is Barracuda.
php_1    | [28-Dec-2016 07:29:43] NOTICE: fpm is running, pid 1
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: 128 rollback segment(s) are active.
php_1    | [28-Dec-2016 07:29:43] NOTICE: ready to handle connections
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: Waiting for purge to start
mysql_1  | 2016-12-28 07:29:43 1 [Note] InnoDB: 5.6.35 started; log sequence number 1626263
mysql_1  | 2016-12-28 07:29:43 1 [Note] Server hostname (bind-address): '*'; port: 3306
mysql_1  | 2016-12-28 07:29:43 1 [Note] IPv6 is available.
mysql_1  | 2016-12-28 07:29:43 1 [Note]   - '::' resolves to '::';
mysql_1  | 2016-12-28 07:29:43 1 [Note] Server socket created on IP: '::'.
mysql_1  | 2016-12-28 07:29:43 1 [Warning] 'proxies_priv' entry '@ root@bd69eb248839' ignored in --skip-name-resolve mode.
mysql_1  | 2016-12-28 07:29:43 1 [Note] Event Scheduler: Loaded 0 events
mysql_1  | 2016-12-28 07:29:43 1 [Note] mysqld: ready for connections.
mysql_1  | Version: '5.6.35'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

访问一下 http://localhost:40080/index.php ,正常的话,如下图

这里写图片描述

启动一个真实的代码

下面的代码是今年网络安全周的一个手机在线答题系统,代码很挫,大牛误笑

源码在这里。

将目录直接放在~/Docker/test/htdocs下面,然后在test目录下执行docker-compose up,正常情况下,就会跑起来上面的容器,然后按照代码的README将数据库部署就可以运行了。

这里写图片描述

参考链接


  1. Docker 从入门到实践
  2. 第一本Docker书
  3. 如何进入一个正在运行的Container
  4. Docker在PHP项目开发环境中的应用

原文链接:
http://dengnanyi.com/2016/12/24/2016_12/docker-learn-3/

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

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

相关文章

《淘宝店铺 大数据营销+SEO+爆款打造 一册通》一一2.1 生意参谋平台概述

本节书摘来自异步社区出版社《淘宝店铺 大数据营销SEO爆款打造 一册通》一书中的第2章&#xff0c;第2.1节&#xff0c;作者&#xff1a;葛存山 , 耿寿礼&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 第2章 生意参谋——大数据分析利器 淘宝店铺 大数据…

[资源推荐] 必须收藏的两个查找论文和代码实现的网站!

参考自&#xff1a;https://juejin.im/post/5c57f86c51882562002aec03 无论是研究方向是 AI 方面的学生&#xff0c;或者是做机器学习方面的算法工程师&#xff0c;在掌握基础的机器学习相关知识后&#xff0c;都必须掌握搜索论文的技能&#xff0c;特别是研究或者工作领域方向…

再陷风波 Equifax又一门户网站被曝安全漏洞

近日&#xff0c;美信用机构Equifax被证实公司在今年5月到7月期间&#xff0c;遭到黑客攻击&#xff0c;导致约有1.43亿用户数据遭到泄露。现在&#xff0c;又一个Equifax门户网站被指出存在安全协议问题。 据最先发现问题的Hold Security LLC指出&#xff0c;一个来自阿根廷名…

ASP.NET Core 一步步搭建个人网站(4)_主页和登录验证

上章节我们已经定制好动态配置的菜单&#xff0c;用户登录网站的第一步就是进入首页内容&#xff0c;那我们先搭建一下我们的首页内容。想着自己的网站内容主要是个人博客类型&#xff0c;所以&#xff0c;首页就展示博主本人的一些基本信息吧&#xff0c;哈哈。当然&#xff0…

Java裸写爬虫技术,运用多线程技术,高效爬取某个医疗机构网站数据

最近喜欢上了数据的庞大的感觉&#xff0c;就爬取了一下某个医疗机构网站医疗数据&#xff0c;由于数据量庞大&#xff0c;只爬取了江西省的各个市的各个医院的各个科室的各个科室。中各种信息。其中用的持久层技术是hibernate框架&#xff0c;和用到一些ioc技术。话不多说&…

解决登录同一个网站,连接失败

2019独角兽企业重金招聘Python工程师标准>>> 程序报错 MaxRetryError: HTTPConnectionPool(host127.0.0.1, port53742): Max retries exceeded with url: /session/7e0b607f-022e-4464-9eb3-461844f59b84/window/maximize (Caused by NewConnectionError(<urllib…

Awesome 书籍源码论文软件下载网站整理

software.informerAAAI会议论文下载Packt出版商的书籍开源代码&#xff0c;目前已经超过6600个仓库

在IIS管理器添加网站

1.添加物理路径 2.跨域问题解决方案 A.点击所创网站出现如图所示&#xff0c;双击HTTP响应标头 B.右键–“添加”&#xff0c;添加以下2条&#xff1a; Access-Control-Allow-Headers&#xff1a;Content-Type, api_key, Authorization Access-Control-Allow-Origin&#xf…

超全Inventor 3d模型素材网站整理

家人们&#xff0c;最近我找到了一个很好用的Inventor 3d模型免费素材网站 本人曾经也是废大把时间寻找资源&#xff0c;质量还不咋地&#xff0c;但是通过朋友安利&#xff0c;知道了一个很好的网站&#xff1a;爱给网&#xff0c;里面资源内容丰富&#xff0c;并且可以一键下…

良心安利电梯过道su模型素材网站

电梯过道su模型类资源应该算是素材类网站中必不可少的资源类型了吧~今天给大家推荐超好用&#xff0c;免费质量高的素材噢&#xff0c;让你坐拥海量资源同时又不撞款&#xff01; 免费资源最多&#xff0c;又全面的&#xff0c;那就是 爱给网啦&#xff01; 它有很多素材&…

宝藏又小众的灯饰装修设计素材网站分享

今天小编针对灯饰装修设计素材为大家整理了很多内容哦&#xff0c;肯定有需要的小伙伴吧&#xff0c;实用、免费、优质的素材谁又不心动呢&#xff01;赶紧码住&#xff01; 免费资源最多&#xff0c;又全面的&#xff0c;那就是 爱给网啦&#xff01; 它有很多素材&#xff0…

超全教育cc0高清摄影图片素材网站整理

天天各大网站找教育cc0高清摄影图片素材&#xff1f;最后空手而归&#xff1f;今天为大家推荐教育cc0高清摄影图片素材网站&#xff0c;质量上乘适合资源慌缺的你&#xff0c;话不多说准备开始收藏吧&#xff01; 接下来就给大家介绍一下我珍藏已久的网站&#xff0c;我的工作…

超全园林 景观cc0高清摄影图片素材网站整理

看到大家都在问园林 景观cc0高清摄影图片素材&#xff0c;既要免费又要质量好&#xff0c;数量还要多&#xff0c;小编好不容易挖到了宝藏素材网站哦&#xff0c;资源优质数量庞大&#xff0c;使用体验也很好&#xff0c;要是需要的话&#xff0c;赶紧看一看&#xff0c;小编会…

良心安利食物 美食免抠元素素材网站

天天各大网站找食物 美食免抠元素素材&#xff1f;最后空手而归&#xff1f;今天为大家推荐食物 美食免抠元素素材网站&#xff0c;质量上乘适合资源慌缺的你&#xff0c;话不多说准备开始收藏吧&#xff01; 本人曾经也是废大把时间寻找资源&#xff0c;质量还不咋地&#xf…

宝藏又小众的线条免抠元素素材网站分享

最近看到很多朋友吐槽线条免抠元素素材不好找&#xff0c;有时花了大把时间却没找到合适的&#xff0c;而且有的时候会涉及到各种问题等&#xff0c;不仅工作效率降低&#xff0c;还闹心郁闷&#xff0c;所以今天就给大家分享一下小编自己在亲身体验和搜寻网站中&#xff0c;收…

最良心的网站可以良心到什么程度?

之前就在爱给网下载过音频&#xff0c;最近点进爱给网首页&#xff0c;发现爱给网上新了一系列在线小工具。不收费&#xff0c;完全免费&#xff0c;没有广告&#xff0c;页面简约&#xff0c;真的是很惊喜&#xff0c;迫不及待分享给大家&#xff0c;今天先跟大家分享一下我使…

良心安利企业内部管理设计模板素材网站

今天小编针对企业内部管理设计模板素材为大家整理了很多内容哦&#xff0c;肯定有需要的小伙伴吧&#xff0c;实用、免费、优质的素材谁又不心动呢&#xff01;赶紧码住&#xff01; 免费资源最多&#xff0c;又全面的网站&#xff0c;我找到啦&#xff01;&#xff01;它有很…

宝藏又小众的家具构件ps后期素材素材网站分享

今天小编针对家具构件ps后期素材素材为大家整理了很多内容哦&#xff0c;肯定有需要的小伙伴吧&#xff0c;实用、免费、优质的素材谁又不心动呢&#xff01;赶紧码住&#xff01; 本人曾经也是废大把时间寻找资源&#xff0c;质量还不咋地&#xff0c;但是通过朋友安利&#…

超全荒地UE4素材网站整理

关于荒地UE4素材肯定是很多人需要的东西&#xff0c;但是在找的时候总是会碰到各种问题&#xff0c;小编为大家总结了很多种类齐全&#xff0c;免费好用的素材&#xff0c;赶紧围观&#xff01; 本人曾经也是废大把时间寻找资源&#xff0c;质量还不咋地&#xff0c;但是通过朋…

超全在线客服网页特效素材网站整理

前方注意咯&#xff01;建议先收藏再看哦&#xff01;为大家整理在线客服网页特效素材&#xff0c;总有满足你需求的一款&#xff0c;除此之外&#xff0c;免费&#xff0c;资源质量好&#xff0c;一键打包下载&#xff0c;你还不心动吗&#xff1f; 因为小编的工作原因&#…