DockerCompose

需求:访问user-service,user-service需要启动nacos服务,mysql服务 

项目地址:

链接:https://pan.baidu.com/s/1Kx33bT_ngkoi731QE4gkPQ
提取码:25f5

Nacos服务

https://hub.docker.com/

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

数据库Sql语句

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中做的身份验证

原文地址:https://www.cnblogs.com/WarBlog/p/15459120.html