赞
踩
目录
以谷粒学苑为例,使用 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
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';
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
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
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博客
感谢观看!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。