Docker基础概念
系统架构
注意事项
系统中各组成部分介绍:
- vue-client:使用vue开发的前端界面;
- node-serve:使用hapi开发的基础服务器,主要负责系统内数据的增删改查;
- node-worker:基于node的消息队列消费者;
- python-serve:使用flask开发的算法服务端,主要负责系统内算法的运行;
- mysql:数据库;
- phpmyadmin:数据库UI;
- rabbitmq:消息队列服务器。
上面介绍的组成部分,除了mysql
和phpmyadmin
不需要利用Dockerfile
构建镜像外,其余全需要。
马上就会讲解它们的Dockerfile
,不过需要注意的是,请将所有镜像全部构建完成后,再利用docker-compose
来启动所有容器。否则只单独启动像node-worker
这样的容器,是不会成功的,因为它依赖于rabbitmq
。
vue-client
1 | # Dockerfile文件 |
1 | # nginx.conf文件 |
在项目根目录下依次运行如下命令:
npm run build
:这会将项目打包到根目录下的dist
文件夹;docker build -t vue-client:20190509_1 .
:构建一个名称为vue-client:20190509_1
的镜像。
node-serve
1 | # Dockerfile文件 |
1 | # .dockerignore文件 |
在项目根目录下运行docker build -t node-serve:20190509_1 .
构建一个名称为node-serve:20190509_1
的镜像。
node-worker
1 | # Dockerfile文件 |
1 | # .dockerignore文件 |
在项目根目录下运行docker build -t node-worker:20190509_1 .
构建一个名称为node-worker:20190509_1
的镜像。
python-serve
1 | # Dockerfile文件 |
1 | # .dockerignore文件 |
在项目根目录下运行docker build -t python-serve:20190509_1 .
构建一个名称为python-serve:20190509_1
的镜像。
rabbitmq
rabbitmq
的根目录下只有一个文件,就是Dockerfile
文件。
1 | # Dockerfile文件 |
在项目根目录下运行docker build -t rabbitmq:stomp .
构建一个名称为rabbitmq:stomp
的镜像。
docker-compose实例
创建一个文件夹用于存放docker-compose.yml
文件。
1 | version: '3' |
命令介绍:
docker-compose build
:构建(重新构建)服务容器;docker-compose up -d
:后台自动(重新)创建服务和关联服务相关容器;docker-compose down
:停止容器、移除容器和网络。
遇到的坑:
- depends_on:解决容器的依赖、启动先后问题,但是不会等到所依赖的容器完全启动之后,再启动后续容器。所以如果在
docker-compose up -d
后,发现node-worker
部分没有正常工作的话,你在保证rabbitmq
完全启动后,重启下node-worker
就可以了。这里有其他的解决办法,比如利用wait-for-it
脚本等,我简单的试了一下,有些小问题,为了项目进度,暂时搁置,相关资料戳这里。
portainer
运行如下命令就可以启动一个docker的可视化管理工具。
1 | docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer-data:/data portainer/portainer |