0


Docker 部署微服务项目

一、前言

以谷粒学苑为例,使用 Docker 部署后端服务

二、环境准备

安装之前,确保开放所需要的端口或者关闭防火墙。

使用 阿里云服务器 确保开放安全端口

1、安装 Docker

1、卸载之前的 Docker,没有就忽略这步

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、安装一些依赖包

yum install -y yum-utils

3、建立远程仓库,不要使用官网的,太慢

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、更新 yum 软件包索引【非必须】

yum makecache fast

5、安装 Docker 引擎

yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

6、启动docker

# 查看docker的版本信息
docker version
# 启动docker
systemctl start docker
# 查看docker是否启动
ps -ef | grep docker
# 设置docker开机自启动
systemctl enable docker

7、安装 Docker-compose

下载会比较慢,可以多试几次

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予权限
chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose --version

8、查询版本号,查询出来就说明安装成功了

docker-compose -v

2、Docker 安装 MySQL

1、拉取镜像

docker pull mysql:8.0

2、启动容器

MYSQL_ALLOW_EMPTY_PASSWORD:先将密码设置为空,为了方便后续操作,8.0版本较于5.7版本有点复杂。这里如果设置密码,有可能登录不上去

docker run -p 3306:3306 --name mysql  -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql  -v /mydata/mysql/conf:/etc/mysql -v /mysql/data/mysqlslave/mysqlfiles:/var/lib/mysql-files  -e MYSQL_ALLOW_EMPTY_PASSWORD=yes  -d mysql:8.0

3、设置 mysql 编码

vi /mydata/mysql/conf/my.cnf
[client] 
default-character-set=utf8 
[mysql] 
default-character-set=utf8 
[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake 
skip-name-resolve

4、远程登录报错: Host is not allowed to connect to this MySQL server

# 进入mysql容器
docker exec -it mysql bash
# 进入 mysql,由于启动时没设置密码,直接回车登录。
mysql -u root -p
# 修改远程连接权限
use mysql;
update user set host = '%' where user = 'root';
select host, user from user;
flush privileges;
#完成上面操作之后重启MySQL服务即可。

5、远程登录报错:plugin caching_sha2_password could not be loaded

# 修改远程登陆
# 修改密码过期规则----》永不过期
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 
# 更新用户的密码修改加密规则
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;

# 重置密码
ALTER USER 'root'@'%' IDENTIFIED BY '123456';

3、Docker 安装 Redis

1、创建 redis 配置文件,用于容器卷挂载

mkdir -p /mydata/redis/conf 
vi /mydata/redis/conf/redis.conf
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1

protected-mode no

port 6379

tcp-backlog 511

timeout 0

tcp-keepalive 300

daemonize no

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

always-show-logo yes

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-disable-tcp-nodelay no

replica-priority 100

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

appendonly yes

appendfilename "appendonly.aof"

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

slowlog-max-len 128

notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096
stream-node-max-entries 100

activerehashing yes

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

2、拉取镜像

docker pull redis

3、启动容器

docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data  -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf  -d redis redis-server /etc/redis/redis.conf

4、Docker 安装 Nacos

1、拉取镜像

docker pull nacos/nacos-server:2.2.0

2、启动容器

docker run  --name nacos-quick -e  MODE=standalone -p 8848:8848 -d nacos/nacos-server:1.3.0

3、访问:IP地址+8848/nacos

5、Docker 安装 Nginx

1、先随便启动一个 Nginx 复制出里面的配置文件

docker run -p 80:80 --name nginx -d nginx:1.10

2、创建 /mydata/nginx/ 目录, 并切换到此目录下,将 Nginx 配置文件都拷贝文件夹里,并修改名称为 conf

mkdir /mydata/nginx/
cd /mydata/nginx
docker container cp nginx:/etc/nginx .
mv nginx/ conf

3、删除容器,并重新启动 Nginx 容器

docker run -p 80:80 --name nginx --restart=always \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10

4、访问 IP 地址测试是否启动成功


三、部署后端服务

1、修改项目中的连接地址,改成对应的 IP

2、对项目打包,打包之前确保有maven插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

公共类没有主启动类,无需引入

3、打包完,编写 Dockerfile 用于构建镜像

service_cms
# 基础镜像
FROM openjdk:8
# 环境变量
ENV APP_HOME=/apps
# 创建容器默认进入的目录
WORKDIR $APP_HOME
# 复制jar包到容器中
COPY ./service_cms-0.0.1-SNAPSHOT.jar ./service_cms.jar
# 暴露端口
EXPOSE 8004
# 启动命令
ENTRYPOINT ["java","-jar","-Xms100m","-Xmx100m"]
CMD ["service_cms.jar"]
service_edu
FROM openjdk:8
ENV APP_HOME=/apps
WORKDIR $APP_HOME
COPY ./service_edu-0.0.1-SNAPSHOT.jar ./service_edu.jar
EXPOSE 8001
ENTRYPOINT ["java","-jar","-Xms100m","-Xmx100m"]
CMD ["service_edu.jar"]

所有服务都一样,就是换了 jar 包名称,以及 端口号。

4、将 jar 包 以及 Dockerfile 上传到 服务器,尽量统一放到一个文件夹中,管理方便。每一个文件夹对应一个服务的 jar包以及 Dockerfile

5、对所有服务创建镜像:进入到对应服务目录内部执行此命令

docker build -t 新镜像名字:TAG . # 不要忘记TAG 后面有个空格和点

我这里是一个个创建的,比较麻烦,为了方便调试。

可以直接配置 docker-compose 创建镜像并启动容器

4、编写 docker-compose.yaml

version: "3.8"

networks:
    edu:

services:
    # 定义服务名字,只要不冲突即可
    gateway:
        # 镜像名字
        image: gateway:1.0
        # 自定义容器名字
        container_name: gateway
        ports:
            - "8222:8222"
            # 网络模式
        networks:
            - edu
    service_acl:
        image: service_acl:1.0
        container_name: service_acl
        ports:
            - "8009:8009"
        networks:
            - edu
    service_cms:
        image: service_cms:1.0
        container_name: service_cms
        ports:
            - "8004:8004"
        networks:
            - edu
    service_edu:
        image: service_edu:1.0
        container_name: service_edu
        ports:
            - "8001:8001"
        networks:
            - edu
    service_msm:
        image: service_msm:1.0
        container_name: service_msm
        ports:
            - "8006:8006"
        networks:
            - edu
    service_order:
        image: service_order:1.0
        container_name: service_order
        ports:
            - "8007:8007"
        networks:
            - edu
    service_oss:
        image: service_oss:1.0
        container_name: service_oss
        ports:
            - "8002:8002"
        networks:
            - edu
    service_statistics:
        image: service_oss:1.0
        container_name: service_statistics
        ports:
            - "8008:8008"
        networks:
            - edu
    service_ucenter:
        image: service_ucenter:1.0
        container_name: service_ucenter
        ports:
            - "8160:8160"
        networks:
            - edu
    service_vod:
        image: service_vod:1.0
        container_name: service_vod
        ports:
            - "8003:8003"
        networks:
            - edud

将 docker-compose.yaml 上传到 服务器中

5、编排容器

# 编排前可检查一下配置文件,如果没有任何东西输出就没有问题
docker-compose config -q
# 编排
docker-compose up

到这里后端服务就已经部署完毕

docker logs 容器名 可以通过查看容器日志的方式来调试

四、部署前端服务

前端的部署直接参考这篇博客

谷粒学苑 Vue +NUXT +SpringCloud 部署到服务器_我不是秃神的博客-CSDN博客

感谢观看!!

标签: docker 运维 容器

本文转载自: https://blog.csdn.net/aetawt/article/details/128999752
版权归原作者 我不是秃神 所有, 如有侵权,请联系我们删除。

“Docker 部署微服务项目”的评论:

还没有评论