Docker 部署 详细全过程 附代码

kyaa111 4年前 ⋅ 6768 阅读

Docker 部署本站 全过程

环境:CentOS7.6


1. 安装Docker

其他版本CentOS可以参考这个https://help.aliyun.com/document_detail/187598.html

查看本机内核版本,内核版本需高于 3.10

uname -r

确保 yum 包最新

yum update

安装相关软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装docker

install docker-ce

配置阿里云镜像加速docker镜像下载

参考这个

https://help.aliyun.com/document_detail/60750.html

启动docker

systemctl start docker

验证安装

docker version

2. 创建自定义网络

docker 默认是使用bridge,容器每次启动,IP都会发生变动,不利于维护管理, 172.17.0.0/16 是docker默认网段

docker network create --subnet=172.18.0.0/16 blognet 

3. 创建容器

注意所有中间件都需呀设置密码

如果在公网服务器部署, 注意配置防火墙/安全组

3.1 启动mysql容器

拉取mysql镜像

docker pull centos/mysql-56-centos7

创建并运行容器,123456root 密码, --network blognet --ip 172.18.0.2 使用之前创建的网络, 172.18.0.1是网关

docker run --name mysql56 -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123456 --network blognet --ip 172.18.0.2  -d centos/mysql-56-centos7

测试连接mysql,如:命令行或navicat,连接上即成功创建mysql容器,随后进行建库建表操作,blog-sql文件

3.2 启动redis容器

docker pull redis

以配置文件启动,这有现成的 链接:https://pan.baidu.com/s/1ptvnDPVdqfwgfnpvYHVnJQ 提取码:7h82

/root/redis/redis.conf 中daemonize=NO。非后台模式,如果为YES 会的导致 redis 无法启动,因为后台会导致docker无任务可做而退出。

-v /root/redis/data:/data 容器 /data 映射到宿主机 /root/redis/data

-d redis 后台模式启动 redis

redis-server /etc/redis/redis.conf redis 将以 /etc/redis/redis.conf 为配置文件启动

--appendonly yes 开启redis 持久化

docker run -p 6379:6379 --network blognet --ip 172.18.0.5 --name redis -v /root/redis/redis.conf:/etc/redis/redis.conf -v /root/redis/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

3.3 启动rabbitmq容器

这个是带web管理页面的,启动后访问ip:15672

docker pull rabbitmq:management
docker run -di --name=rabbitmq --network blognet --ip 172.18.0.6 -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management

3.4 启动mongo容器

docker pull mongo
docker run --network blognet --ip 172.18.0.7 -itd --name mongo -p 27017:27017 mongo --auth

进入容器

docker exec -it mongo mongo admin

mongo5.0以上使用

docker exec -it mongo mongosh admin

创建全局用户

db.createUser({ user:'admin', pwd:'123456', roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

创建用户以及关联数据库

db.createUser({ user: 'log', pwd: '123456', roles: [ { role: "readWrite", db: "log" } ] });
use log

3.5 启动后端容器

创建maven工程,导入源码,更改配置文件

spring:
  datasource:
    ###url/username/password都需要更改
    url: jdbc:mysql://192.168.43.150:3306/blog?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    driverClassName: com.mysql.jdbc.Driver
    druid:
      initial-size: 5
      max-active: 20
      min-idle: 5
      max-wait: 60000
      validation-query: SELECT 1
      validation-query-timeout: 2000
  ####找不到处理器直接抛出异常
  mvc:
    throw-exception-if-no-handler-found: true
  ####是否为工程中的资源文件建立映射
  resources:
    add-mappings: false
  ###邮箱配置
  mail:
    host: smtp.qq.com
    port: 465
    username: ***@qq.com
    password: ***
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true
  ### 如果使用qq邮箱,且部署在阿里云,需要启动ssl,且端口配置为465
#         ssl:
#            enable: true
  data:
    mongodb:
      username: 'log'
      password: '123456'
      host: 172.18.0.7
      port: 27017
      database: log
      field-naming-strategy: org.springframework.data.mapping.model.SnakeCaseFieldNamingStrategy

  ###Redis
  redis:
    host: 172.18.0.5
    port: 6379
    timeout: 1000
    jedis:
      pool:
        max-active: 10
        max-idle: 8
        min-idle: 2
        max-wait: 100
  ###RabbitMQ
  rabbitmq:
    host: 172.18.0.6
    port: 5672
    username: guest
    password: guest

mybatis:
  ###数据库模型对象
  type-aliases-package: com.zzx.model.pojo
  mapper-locations: mapper/*.xml
  ###打印sql
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

###是否启用swagger
swagger:
  enable: false

logging:
  level:
    org.springframework.security: info
    root: info
  path: e:/springboot-blog






### jwt
jwt:
  ###过期时间 s数432000 5天
  time: 432000
  ###安全密钥
  secret: "BlogSecret"
  ###token前缀
  prefix: "Bearer "
  ###http头key
  header: "Authorization"

###图片上传配置
upload:
  #静态资源对外暴露的访问路径 一个* 代表只匹配该路径下的一级子路径
  staticAccessPath: /img/*
  #文件上传目录
  uploadFolder: /root/images
  #文件夹层数
  layerCount: 2
  #文件夹内单位数
  folderSize: 16

###站点介绍
site:
  introduction: "分享知识"

server:
  port: 8001

打包项目,jar打包在target文件夹下,blog-1.0.jar

mvn clean package

编写dockerfile

#基础镜像jdk
FROM frolvlad/alpine-oraclejdk8:slim
#挂载的路径
VOLUME /tmp
#将jar打入镜像之中
ADD blog-1.0.jar app.jar
#容器向外暴露的端口
EXPOSE 8001
#入口命令,执行jar
ENTRYPOINT ["java","-jar","/app.jar"]

将dockerfile与blog-1.0.jar放在同级文件夹,

docker build -t springboot-blog .

打包完后查看一下,IMAGE ID 会不一样,正常

# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
springboot-blog              latest              568f1a418c79        3 hours ago         208MB

启动后端容器

 docker run --name springboot-blog -p 8001:8001 --network blognet --ip 172.18.0.3 -d springboot-blog

浏览器访问centos的ip+端口,例:192.168.125.100:8001,出现如下代码,即说明启动成功

{
	"code":404,
	"message":"接口不存在",
	"data":null
}

3.6 启动nginx容器

拉取nginx镜像

docker pull nginx

创建并启动nginx容器

docker run --name=nginx -p 80:80 --network blognet --ip 172.18.0.4  -d docker.io/nginx

default.conf

server {
    listen       80;
    server_name  localhost;
    #访问vue项目
    location / {
        root   /usr/share/nginx/html;
        index  index.html;
    }
    #将api转发到后端
    location /api/ { 
	proxy_pass http://172.18.0.3:8001/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    #转发图片请求到后端
    location /img/ { 
	proxy_pass http://172.18.0.3:8001/img/;
    }
}

将配置文件拷贝至容器内

 docker cp default.conf nginx:/etc/nginx/conf.d/default.conf

前端工程,下载好,cmd 切换目录到vue工程内 安装依赖

npm install 

打包

npm run build

将打包生成的dist文件夹改名为html,拷贝到nginx容器

docker cp html nginx:/usr/share/nginx

重启nginx容器

docker restart nginx

打开浏览器,输入centos ip192.168.125.100, 看到了空空的首页 登录 账号admin密码1,登录成功,即docker部署完成

获取源码

源码地址

有任何问题请发邮件至1970432392@qq.com