导读:之前喜欢Davinci的小伙伴儿在安装部署Davinci遇见问题时需要在github issue区等待技术人员的解答。现在不用怕啦,社区热心用户白菜君帮我们支持了docker-composer一键启动,以后只需寥寥几行代码,Davinci就能舒畅的run起来了。还等什么,赶紧部署起来吧~
敲重点
Davinci Docker原部署教程在这里:
https://github.com/edp963/davinci-docker
里面会不定时更新
记得收藏啊!!
下面是部署教程:
一、环境要求
-
安装docker后的 windows, linux, mac。
-
检查是否有docker-compose命令(安装docker后默认会有,否则请手动安装)。
二、完整步骤
<span style="font-family: 黑体, SimHei;">git clone https://github.com/edp963/davinci-docker.git<br>cd /d davinci-docker<br># docker build -t="edp963/davinci:v0.3.0-beta.4" .<br># 修改docker-compose.yml中邮箱配置docker-compose up -d<br></span>
完成!
你没看错!
就这么简单的完成了!
这样就可以安装部署Davinci了!
再也不用担心安装Davinci时遇到问题了!
然鹅,在部署Docker镜像过程中,我们的白菜君是怎么想的呢?让我们继续往下看:
内容会不定时更新哦,所以请大家收藏这个地址:
https://github.com/edp963/davinci-docker
三、Docker支持环境变量列表
image四、原理分析
制作Davinci Docker镜像
1、Dockfile分析
<span style="font-family: 黑体, SimHei;">FROM java:8-jre<br>LABEL MAINTAINER="edp_support@groups.163.com"<br># 从github上下载分发包并解压<br>RUN cd / \ <br>&& mkdir -p /opt/davinci\ <br>&& wget<br>https://github.com/edp963/davinci/releases/download/v0.3.0-beta.4/davinci-assembly_3.0.1-0.3.0-SNAPSHOT-dist-beta.4.zip<br>\ && unzip<br>davinci-assembly_3.0.1-0.3.0-SNAPSHOT-dist-beta.4.zip -d /opt/davinci<br># 将phantomjs打包到镜像<br>ADD phantomjs-2.1.1 /opt/phantomjs-2.1.1<br># 数据库初始化脚本,等待数据库就绪后启动spring boot<br>ADD bin/start.sh /opt/davinci/bin/start.sh<br># docker镜像是静态的,因此配置文件中的配置需要用环境变量传递,详见12factor# https://12factor.net/zh_cn/<br>ADD config/application.yml<br>/opt/davinci/config/application.yml<br># 预设davinci必备的两个环境变量ENV<br>DAVINCI3_HOME /opt/davinciENV PHANTOMJS_HOME /opt/phantomjs-2.1.1<br>WORKDIR /opt/davinci<br># 为什么使用CMD而不是ENTRYPOINT? 因为CMD可以在docker run的时候被替代# 在使用compose或K8S时,很有可能要在启动前执行其它脚本,而不是直接运行# start-server.sh# 在单独docker run且不附加任何命令时,以下命令默认执行<br>CMD ["./bin/start-server.sh"]<br>EXPOSE 8080<br></span>
start.sh
<span style="font-family: 黑体, SimHei;">#!/bin/bash<br># 将sql脚本经过mysql8兼容处理后,写入/initdb目录# /initdb 目录是与mysql容器共享目录# mysql容器将在启动时执行 /docker-entrypoint-initdb.d 中的所有脚本<br>cd /opt/davinci/bin/mkdir /initdbcat<br>davinci.sql > /initdb/davinci.sqlsed -i '1i\SET<br>GLOBAL log_bin_trust_function_creators = 1;' /initdb/davinci.sql<br><br># 由于docker compose中启动顺序管理交给了容器自己# 详见<br>https://docs.docker.com/compose/startup-order/# 因此我们需要用curl探测mysql端口,当接受数据字节大于0时认为# 数据库可以连通,接下来我们执行davinci spring boot主程序set<br>-e<br>host="$1"shiftcmd="$@"<br>until [ $(curl -I -m 10 -o /dev/null -s -w %{size_download} $host) -gt 0 ]; do >&2 echo<br>"database is unavailable - sleeping" sleep 1done<br>source $cmd<br></span>
2、构建镜像
<span style="font-family: 黑体, SimHei;">docker build -t="edp963/davinci:v0.3.0-beta.4" .<br></span>
3、Docker Compose
<span style="font-family: 黑体, SimHei;">version: '3.6'services: davinci: <br>environment: - MYSQL_CONN=jdbc:mysql://mysql:3306/davinci0.3?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true - DB_USER=root - DB_PWD=abc123123 - MAIL_HOST=smtp.163.com - MAIL_PORT=465 - MAIL_STMP_SSL=true - MAIL_USER=xxxxxx@163.com - MAIL_PWD=xxxxxxxx - MAIL_NICKNAME=davinci image: "edp963/davinci:v0.3.0-beta.4" ports: <br>- 58080:8080 # 等待mysql就绪后再启动spring boot主程序 command: ["./bin/start.sh",<br>"mysql:3306", "--", "start-server.sh"] restart: always volumes: - davinci_logs:/opt/davinci/logs - davinci_userfiles:/opt/davinci/userfiles - davinci_initdb:/initdb #共享给mysql作数据初始化 mysql: image: mysql:8 restart: always environment: - MYSQL_ROOT_PASSWORD=abc123123 - MYSQL_DATABASE=davinci0.3 volumes: - mysql_data:/var/lib/mysql # 初始化脚本源自davinic容器的initdb目录 - davinci_initdb:/docker-entrypoint-initdb.d:ro <br>volumes: davinci_userfiles: davinci_logs: <br>davinci_initdb: mysql_data:<br></span>
小提示:docker-compose.yml环境变量配置K=V中不能出现空格,V也不能用双引号包裹
4、Docker Compose启动
<span style="font-family: 黑体, SimHei;">docker-compose up -d<br></span>
5、仅Docker启动(使用外部数据库)
<span style="font-family: 黑体, SimHei;">docker run -p 58081:8080 -e MYSQL_CONN="jdbc:mysql://yourmysqlserver:3306/davinci0.3?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true" \<br>-e DB_USER="root" -e DB_PWD="pwd" \<br>-e MAIL_HOST="smtp.163.com"<br>-e MAIL_PORT="465"<br>-e MAIL_STMP_SSL="true" \<br>-e MAIL_USER="xxxxxx@163.com" <br>-e MAIL_PWD="xxxxxxx" \<br>-e MAIL_NICKNAME="davinci_sys" \<br>edp963/davinci:v0.3.0-beta.4<br></span>
6、使用更丰富的配置
可以在宿主中添加一些配置文件,查看davinci配置:https://github.com/edp963/davinci/tree/master/config
然后docker run 时将其挂载到 /opt/davinci/config
<span style="font-family: 黑体, SimHei;">docker run -p 58081:8080 -e MYSQL_CONN="jdbc:mysql://yourmysqlserver:3306/davinci0.3?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true" \<br>-e DB_USER="root" -e DB_PWD="pwd" \<br>-e MAIL_HOST="smtp.163.com" -e MAIL_PORT="465" -e MAIL_STMP_SSL="true" \<br>-e MAIL_USER="xxxxxx@163.com" -e MAIL_PWD="xxxxxxx" \<br>-e MAIL_NICKNAME="davinci_sys" \<br>-v/etc/davinci:/opt/davinci/config \<br>edp963/davinci:v0.3.0-beta.4<br></span>
作者:汤波成
来源:宜信技术学院
网友评论