迁移遗留项目到Docker

16 1月

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: 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也提供了持续集成功能,可以先跑测试。

docker

选定一个标注为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我最喜欢的是可以直接看日志

log

 

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/01/16/move-existing-project-to-docker/

One Reply to “迁移遗留项目到Docker”

发表回复

您的电子邮箱地址不会被公开。