想弄个爬虫看看,简单搜索了一下 spider-flow 评价不错,开干
虽然以前维护过Java的应用,但也是很多年前的事情了,而且自己经常都搞不同软件,还是用docker来得靠谱
第一次弄Java相关的docker,耗了一个下午才搞定
官网说的环境包括:Java8、maven3、MySQL5.7
先找人家打包好的
因为是在MacBook上面折腾,得搞个支持M1的
结果打包好的都是x86的
而且打包了的完全不知道人家配置的jdbc配置,数据host还可以从报错看到,用户名密码完全没办法。。(jar从镜像抽出来再解压?)
自己打一个试试吧
maven3
代码pull下来以后,先考虑编译
# -v /Users/xxxx/maven-repo:/root/.m2 将编译的时候下载依赖包存下来,这很重要 ToT,docker用完就清的特性,每次下载真的很痛苦
docker run -it --rm --name my-maven-project -v /Users/xxxx/maven-repo:/root/.m2 -v "$projectDir":/usr/src/mymaven -w /usr/src/mymaven maven:3.8.6-openjdk-8-slim mvn clean install
Java8
耗了点时间,不过对dockerhub有更熟悉了一些
用官网Dockerfile, 第一句 FROM java:8 就会报错
在hub上面翻了一段时间,找到了这个镜像 openjdk:8-jdk-alpine
报错如下
docker build .
[+] Building 2.9s (3/3) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 267B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> ERROR [internal] load metadata for docker.io/library/java:8 2.8s
------
> [internal] load metadata for docker.io/library/java:8:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: docker.io/library/java:8: not found
将Dockerfile改成这样,就好了
FROM openjdk:8-jdk-alpine
RUN mkdir -p /spider-flow
WORKDIR /spider-flow
EXPOSE 8088
ADD ./spider-flow-web/target/spider-flow.jar ./
CMD sleep 30;java -Djava.security.egd=file:/dev/./urandom -jar spider-flow.jar
MySQL5.7
本以为是最简单却用了不少时间,用了mariadb,MySQL也没有5.7的官方镜像了
后面是用docker-compose 拉起来的,直接上配置
mysql:
image: mariadb:10.4.26
volumes:
- "/Users/xxx/localMysqlData:/var/lib/mysql"
environment:
MARIADB_ROOT_PASSWORD: 123456789
expose:
- "3306"
然后把数据导进去,命令也是在hub的介绍里面有写
# 这是错误姿势,后面拉起来以后页面中文乱码
docker exec -i d1d13ea9efaa sh -c 'exec mariadb -uroot -p123456789' < spiderflow.sql
# 一通乱跳以后,发现是导进去的时候字符集错了
# 指定一下utf8
docker exec -i d1d13ea9efaa sh -c 'exec mariadb -uroot -p123456789 --default-character-set=utf8' < spiderflow.sql
拉起来吧
docker-compose 之前也没搞过,现学了
$ cat 20221105.yaml
services:
web:
image: spider-flow:20221105-4
ports:
- "8088:8088"
depends_on:
- mysql
mysql:
image: mariadb:10.4.26
volumes:
- "/Users/xxx/work/localMysqlData:/var/lib/mysql"
environment:
MARIADB_ROOT_PASSWORD: 123456789
expose:
- "3306"
$ docker-compose -f 20221105.yaml up
浏览器 localhost:8088,可以了