DockerCompose
需求:访问user-service,user-service需要启动nacos服务,mysql服务
项目地址:
链接:https://pan.baidu.com/s/1Kx33bT_ngkoi731QE4gkPQ
提取码:25f5
Nacos服务
MySQL服务
docker run \ --name mysql \ -e MYSQL_ROOT_PASSWORD=root \ -p 3306:3306 \ -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ -v /tmp/mysql/data:/var/lib/mysql \ -d \ mysql:5.7.25
user-service服务
配置MySQL
配置nacos
上传user-service的jar
新建cloud-demo目录
mkdir cloud-demo
进入新建cloud-demo目录,上传user-service.jar
通过Dockerfile构建镜像
FROM java:8-alpine COPY ./user-service.jar /tmp/app.jar ENTRYPOINT java -jar /tmp/app.jar
上传Dockerfile
docker build -t userservice:1.0 .
镜像构建成功
运行镜像,创建容器
docker run -p 80:8081 -d userservice:1.0 .
无法访问:查看服务器端口
查询已开放的端口 netstat -ntulp | grep 端口号:可以具体查看某一个端口号
查询指定端口是否已开 firewall-cmd --query-port=端口号/tcp
提示 yes,表示开启;no表示未开启。
添加指定需要开放的端口:firewall-cmd --add-port=端口号/tcp --permanent
重载入添加的端口:firewall-cmd --reload
移除指定端口:firewall-cmd --permanent --remove-port=端口号/tcp
DockerCompose
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
Compose文件是配置文件,通过配置来运行多个镜像(Docker Registry 镜像服务器中的镜像拉取和运行、自定义构建镜像运行)
通过Compose文件启动nacos、mysql、userservice服务
version: "3.9" services: nacos: image: nacos/nacos-server environment: MODE: standalone ports: - "8848:8848" mysql: image: mysql:5.7.25 environment: MYSQL_ROOT_PASSWORD: root volumes: - "$PWD/mysql/data:/var/lib/mysql" - "$PWD/mysql/conf:/etc/mysql/conf.d/" userservice: build: ./user-service
默认都是后台运行
DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/
CentOS7安装DockerCompose
下载
Linux下需要通过命令下载
# 安装 curl -L https://github.com/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
Linux 版本的 Compose,下载地址:https://github.com/docker/compose/releases
若是github访问太慢,可以用daocloud下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
修改文件权限
# 修改权限 chmod +x /usr/local/bin/docker-compose
Base自动补全命令
# 补全命令 curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
如果这里出现错误,需要修改自己的hosts文件
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
案件:通过Compose将user-service、feign-order-service、gateway服务构建发布
创建文件夹docker-compose-demo
存放将要发布服务工程和docker-compose.yml
发布服务工程
Ⅰ、编写Dockerfile(构建镜像的层)
FROM java:8-alpine COPY ./app.jar /tmp/app.jar ENTRYPOINT java -jar /tmp/app.jar
Ⅱ、编写docker-compose.yml
version: "3.2" services: nacos: image: nacos/nacos-server environment: MODE: standalone ports: - "8848:8848" mysql: image: mysql:5.7.25 environment: MYSQL_ROOT_PASSWORD: root volumes: - "$PWD/mysql/data:/var/lib/mysql" - "$PWD/mysql/conf:/etc/mysql/conf.d/" userservice: build: ./user-service orderservice: build: ./feign-order-service gateway: build: ./gateway ports: - "10018:10018"
在使用compose快速构建发布服务时,服务之间互相调用地址为compose配置文件中配置的服务名
Ⅲ、将数据库、nacos地址都命名为docker-compose中的服务名
Ⅳ、使用maven打包工具,将项目中的每个微服务都打包为app.jar,将打包好的app.jar拷贝到docker-compose-demo中的每一个对应的子目录中
Ⅴ、将docker-compose-demo上传至虚拟机,利用 docker-compose up -d 来部署
如果出现错误:docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))
可以能原因:docker没有启动,通过systemctl status docker命令查看docker状态,systemctl start docker启动docker
Ⅶ、查看容器
Ⅷ、浏览器查看
可能无法正常访问原因是nacos启动时,userservice、gateway、feignorderservice服务还没启动,就无法注册到nacos注册中心,可以重启userservice、gateway、feignorderservice服务容器
docker restart 46a5e1e89390
开放端口:
firewall-cmd --query-port=8848/tcp firewall-cmd --add-port=8848/tcp --permanent firewall-cmd --reload
401错误,身份验证失败,gateway中做的身份验证