微服务项目部署在docker容器运行
昨天的一篇微服务项目中涉及到docker部署,今天写一篇关于微服务项目部署在docker容器中运行,使用github上另外一个比较经典的微服务项目piggyMetric,项目的github地址:https://github.com/sqshq/piggymetrics,这个项目和昨天那篇的项目很类似----
一个简单的微服务项目带你上手spring cloud 全家桶
一、创建piggymetrics项目
1.1 下载好的项目导入到eclipse中,结构如下:
1.2 在项目的各个子模块下,使用maven的install命令,将各个子模块打包成jar包,存放在target目录下以及maven仓库下
可先使用clean命令清除target目录下的文件,再使用install命令(eclipse中已经安装了maven插件)
每个模块的操作一样。然后就在每个项目的target目录下生成该模块的jar包了,JRE System Library使用的是jdk1.8.
在本地的workspace中:
各个模块使用maven的install命令,全部生成了jar包之后,查看模块下的Dockfile文件,例如rigistry模块的Dockfile文件(注意必须写成Dockfile,D要大写)
FROM java:8-jre
MAINTAINER Alexander Lukyanchikov <aaa@qq.com>
ADD ./target/registry.jar /app/
CMD ["java", "-Xmx200m", "-jar", "/app/registry.jar"]
EXPOSE 8761
说明:Dockfile文件中FROM指定创建该镜像之前需要的基础镜像,这里表示需要java 8的jre运行环境的镜像,MAINTAINER表示该镜像的维护信息
ADD 是该微服务模块生成的jar包需要拷贝一份到linux服务器的位置,这里就是表示从该微服务模块的target目录下,复制一份registry.jar到/app/目录下
CMD是执行的命令,一个Dockfile只有一条CMD命令
EXPOSE 表示对外暴露的端口号
其他各个模块的Dockfile编写的基本上差不多,只需要替换各自模块的自己的内容即可
1.3 将项目打包为tar包上传到linux系统
使用filezilla工具将tar包上传到linux服务器上(我是在本地安装了centos7虚拟机,使用的是 VMware Workstation安装的,需要先启动虚拟机)
1.3.1 启动虚拟机:
1.3.2 使用filezilla连接上远程centos7系统
使用sftp协议,ip地址填写centos7虚拟机的ip地址,端口号写22,然后就是用户名和密码,连接上远程服务器
上传文件:
1.3.3 使用secureCRT工具连接远程centos7系统(可以直接使用终端命令)
我现在是已经连接上了的
然后使用cd 命令切换到piggymetrics的tar包所在目录,对tar包进行解压
然后cd命令切换到解压后的PiggyMetrics-master目录下
切换到registry目录下,可以看到Dockfile文件,
1.3.4 接下来使用dock命令执行Dockfile文件
使用docker命令的前提是需要linux上安装了docker,这里还需要使用到docker compose,所以一并安装吧,安装教程可以参考这篇博客:
CentOS7 - Docker&Docker-Compose安装
安装好之后,接下来启动docker服务
sudo systemctl start docker
其他相关命令:
启动后,进入到各个模块,例如进入registry模块下,执行命令
docker build -t registry . (注意后边有个空格和点)
依次在各个模块执行该命令,创建各个模块的镜像-t 之后写的是镜像的名称
各个模块镜像创建完成后:
docker images命令查看创建的进行:
可以看到各个模块的镜像都已经创建成功(我已经在本周五的时候全都已经创建好了镜像,所以创建时间是40多小时前)
1.3.5 接下来设置一下docker,允许其远程访问
使用命令 vim /usr/lib/systemd/system/docker.service打开服务配置文件,按下i键进入插入模式修改配置,修改好后,按esc退出编辑模式,然后输入:wq! 强制保存退出。
将上一行注释掉,修改成下边那样:
ExecStart=ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://va/run/docker.sock
1.3.6 使用docker容器启动镜像,例如启动registry镜像:
命令:docker run -i -t registry /bin/bash
已经启动了容器,并进入容器中,在容器中无法使用docker ps查看容器进程状态,此时需要退出容器同时又不关闭容器,按住ctrl+p+q
使用docker ps 命令可以看到registry镜像已经在容器中运行了
然后再使用docker run命令启动其他服务模块的镜像。但是这样真的比较麻烦。所以这里推荐使用docker compose来依次启动多个容器,从而启动多个镜像。
1.3.7 使用docker compose启动容器
切换到PiggyMetric-master目录下:
这里有两个docker-compose文件,是yml格式的配置文件,这两个文件可以使用安装的docker compose工具执行
再转回到eclipse中,查看docker-compose.yml文件的内容:
version: '2.1'
services:
rabbitmq:
image: rabbitmq:3-management
restart: always
ports:
- 15672:15672
logging:
options:
max-size: "10m"
max-file: "10"
config:
environment:
CONFIG_SERVICE_PASSWORD: admin
image: sqshq/piggymetrics-config
restart: always
logging:
options:
max-size: "10m"
max-file: "10"
registry:
environment:
CONFIG_SERVICE_PASSWORD: admin
image: sqshq/piggymetrics-registry
restart: always
depends_on:
config:
condition: service_healthy
ports:
- 8761:8761
logging:
options:
max-size: "10m"
max-file: "10"
gateway:
environment:
CONFIG_SERVICE_PASSWORD: admin
image: sqshq/piggymetrics-gateway
restart: always
depends_on:
config:
condition: service_healthy
ports:
- 80:4000
logging:
options:
max-size: "10m"
max-file: "10"
auth-service:
environment:
CONFIG_SERVICE_PASSWORD: admin
NOTIFICATION_SERVICE_PASSWORD: admin
STATISTICS_SERVICE_PASSWORD: admin
ACCOUNT_SERVICE_PASSWORD: admin
MONGODB_PASSWORD: admin
image: sqshq/piggymetrics-auth-service
restart: always
depends_on:
config:
condition: service_healthy
logging:
options:
max-size: "10m"
max-file: "10"
auth-mongodb:
environment:
MONGODB_PASSWORD: admin
image: sqshq/piggymetrics-mongodb
restart: always
logging:
options:
max-size: "10m"
max-file: "10"
account-service:
environment:
CONFIG_SERVICE_PASSWORD: admin
ACCOUNT_SERVICE_PASSWORD: admin
MONGODB_PASSWORD: admin
image: sqshq/piggymetrics-account-service
restart: always
depends_on:
config:
condition: service_healthy
logging:
options:
max-size: "10m"
max-file: "10"
account-mongodb:
environment:
INIT_DUMP: account-service-dump.js
MONGODB_PASSWORD: admin
image: sqshq/piggymetrics-mongodb
restart: always
logging:
options:
max-size: "10m"
max-file: "10"
statistics-service:
environment:
CONFIG_SERVICE_PASSWORD: admin
MONGODB_PASSWORD: admin
STATISTICS_SERVICE_PASSWORD: admin
image: sqshq/piggymetrics-statistics-service
restart: always
depends_on:
config:
condition: service_healthy
logging:
options:
max-size: "10m"
max-file: "10"
statistics-mongodb:
environment:
MONGODB_PASSWORD: admin
image: sqshq/piggymetrics-mongodb
restart: always
logging:
options:
max-size: "10m"
max-file: "10"
notification-service:
environment:
CONFIG_SERVICE_PASSWORD: admin
MONGODB_PASSWORD: admin
NOTIFICATION_SERVICE_PASSWORD: admin
image: sqshq/piggymetrics-notification-service
restart: always
depends_on:
config:
condition: service_healthy
logging:
options:
max-size: "10m"
max-file: "10"
notification-mongodb:
image: sqshq/piggymetrics-mongodb
restart: always
environment:
MONGODB_PASSWORD: admin
logging:
options:
max-size: "10m"
max-file: "10"
monitoring:
environment:
CONFIG_SERVICE_PASSWORD: admin
image: sqshq/piggymetrics-monitoring
restart: always
depends_on:
config:
condition: service_healthy
ports:
- 9000:8080
logging:
options:
max-size: "10m"
max-file: "10"
turbine-stream-service:
environment:
CONFIG_SERVICE_PASSWORD: admin
image: sqshq/piggymetrics-turbine-stream-service
restart: always
depends_on:
config:
condition: service_healthy
ports:
- 8989:8989
logging:
options:
max-size: "10m"
max-file: "10"
在linux上切换到PiggyMetrics-master目录下
执行命令docker-compose -f docker-compose-base.yml up -d,接下来会运行整个项目。
会执行很久时间。
1.3.8 在本地浏览器访问一下
上边提示访问失败,超时。检查项目中各模块的yml文件配置,其实就是上一篇中提到的提到的hostname问题。
例如:
将对应的hostname全部改成localhost
上一篇: docker常用命令
下一篇: docker 安装MySQL及使用