本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/01/16/move-existing-project-to-docker/
结合DaoCloud体验了几天Docker,感觉非常的不错,所以也准备把已有的一个项目也迁移到Docker上。
遗留项目
这个项目是一个Java的Web项目,需要Java8环境,使用了Spring Boot,自带了运行容器,可以直接 java -jar 启动。项目使用了MySql数据库,没有用什么专有特性。数据库中数据也不多,可以mysqldump来迁移。
迁移数据库
先从数据库开始吧,原有数据库监听于3306端口,和应用一个主机。第一步打算就是先docker化数据库,但是仍然绑定端口在3306上,这样可以在只迁移数据库的情况下依然保证整个应用可用。
先去Daocloud的应用编排里面创建一个新的应用
db: image: mariadb restart: always ports: - 3306:3306 volumes: - /alidata/data/acgmo-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=你的密码
然后直接连接到这个数据库
mysql -u root -p 数据库名 < bak.sql
完成后直接重启java web应用,看看应用是不是一切正常。
迁移Java Web项目
这个就稍微复杂一些了,因为mysql啥的中央库都有,不需要自己构建。但是这个就必须自己构建了。
DaoCloud提供了代码构建功能,也支持bitbucket的私有库,唯一需要做的就是添加一个Dockerfile来构建,当然如果不想添加到代码库中也可以使用云Dockerfile功能。
比如这个项目的Dockerfile如下
FROM java:8-jdk Add . /tmp/acgmo WORKDIR /tmp/acgmo RUN ./gradlew build -x test RUN mv build/libs/*.war /app.jar EXPOSE 8080 RUN rm -rf /tmp/acgmo ENV spring.profiles.active prod ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dserver.port=8080","-jar","/app.jar"]
在构建中跳过了测试,不过这个问题不大,因为DaoCloud也提供了持续集成功能,可以先跑测试。
选定一个标注为latest。再去应用编排中更新YAML配置
www: image: 刚才构建好的那个镜像名字 restart: always links: - db:localhost ports: - 8021:8080 db: image: mariadb restart: always volumes: - /alidata/data/acgmo-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=你的密码
这样整个应用就迁移好了。最后再nginx中更新反向代理的端口为8021即可。
当然这个时候8021端口是对外暴露的,可以改成
www: ports: - 127.0.0.1:8021:8080
DaoCloud我最喜欢的是可以直接看日志
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/01/16/move-existing-project-to-docker/
很有意思