Docker 部署 详细全过程 附代码

2020-03-28 01:54:01 7662

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

Kubernetes Cloud Native 实践 ( 一 ) 安装

全文目录Kubernetes Cloud Native 实践 ( 一 ) 安装Kubernetes Cloud Native 实践 ( 二 ) 简单使用Kubernetes Cloud Native 实践 ( 三 ) NFS/PV/PVCKubernetes Cloud Native 实践 ( 四
2023-06-13
SkyWalking for Java

SkyWalking for Java

Skywalking的性能损耗接近3%一. Docker配置docker pull apache/skywalking-oap-server:9.4.0-java17docker pull apache/skywalking-ui:v9.4.0-java17docker pull elasticse
2023-05-19

Docker Graceful Shutdown

有几个前提操作系统层面: 提供了 kill -9 (SIGKILL)和 kill -15(SIGTERM) 两种停机策略. SIGKILL 信号是一个不能被阻塞、处理或忽略的信号,它会立即终止目标进程. SIGTERM 信号是一个可以被阻塞、处理或忽略的信号,它也可以通知目标进程终止,但是它相对于
2023-05-17

Docker启动容器出现No Such File Or Directory排查

dockerfile如下FROM alpine ADD test-backend /test-backend RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/time
2023-03-22

Ubuntu Golang 编译 + Docker部署

配置Golang编译环境下载go环境 https://studygolang.com/dl 选择go1.20.2.linux-amd64.tar.gztar -zxvf go1.20.2.linux-amd64.tar.gz 解压到 /usr/local/go创建 /usr/local/go-pat
2023-03-22

Nginx+Frp+Docker实现HTTPS内网穿透

内网穿透实用性非常强, 例如支付回调/访问内网数据库域名dns需要解析到服务器地址frp下载地址https://github.com/fatedier/frp/releases下载这两个文件frp_0.38.0_linux_amd64.tar.gzfrp_0.38.0_windows_amd64.z
2021-10-29

Docker 安装 MongoDB

docker pull mongo docker run -itd --name mongo -p 27017:27017 mongo --auth -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mo
2021-01-13

Jenkins + Gitee 持续集成

接上文/article/537098261463302145 Jenkins安装JDK安装将jdk-8u171-linux-x64.rpm(oracle官网下载)上传至服务器执行安装命令rpm -ivh jdk-8u171-linux‐x64.rpm RPM方式安装JDK,其根目录为:/usr/ja
2020-12-04

Maven插件自动构建项目镜像

搭建docker私有仓库docker pull registry 启动容器docker run ‐di --name=registry -p 5000:5000 registry 打开浏览器 输入地址http://localhost:5000/v2/_catalog看到{"repositories"
2020-11-22

Docker 部署 详细全过程 附代码

Docker 部署本站 全过程环境:CentOS7.61. 安装Docker其他版本CentOS可以参考这个https://help.aliyun.com/document_detail/187598.html查看本机内核版本,内核版本需高于 3.10uname -r 确保 yum 包最新yum u
2020-03-28

freemarker 时间显示不正常 设置时区

项目在本地开发的时候显示正常,部署上服务器就一直差8个小时,最后发现freemarker官方文档有这样的说明time_zone:时区的名称来显示并格式化时间。 默认情况下,使用JVM的时区。 也可以是 Java 时区 API 接受的值,或者 "JVM default" (从 FreeMarker 2
2020-03-28
IDEA 2019.1 xml 不高亮

IDEA 2019.1 xml 不高亮

前几天更新了idea后,发现xml里的代码都没有了高亮,变得跟记事本一个德性了打开setting ,搜索 File Types,找到xml项, 查看下方的匹配格式,果然没有xml,(idea真是厉害)点击右方的+,输入*.xml,点击ok,解决问题
2020-03-28

npm install 淘宝镜像

npm install --registry=https://registry.npm.taobao.org
2020-03-28
Java中方法的参数传递机制

Java中方法的参数传递机制

来看一段代码 public class Man { private String name; private Integer age; public String getName() { return name; } publi
2020-03-28
基于自定义注解手写权限控制

基于自定义注解手写权限控制

方法一: AOP 方法二: 拦截器项目结构项目依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-w
2020-03-28

Docker 部署 详细全过程 附代码

Docker 部署本站 全过程环境:CentOS7.61. 安装Docker其他版本CentOS可以参考这个https://help.aliyun.com/document_detail/187598.html查看本机内核版本,内核版本需高于 3.10uname -r 确保 yum 包最新yum u
2020-03-28

SpringBoot 启动普通java工程

引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.9</version> </dependency>
2020-03-28

Vue.js DOM操作

<template> <input type="button" @click="reply($event)" value="回复"> </template> export default { methods: { replyFun(e) {
2020-03-29
CentOS7编译调试OpenJDK12

CentOS7编译调试OpenJDK12

1. 下载源码https://hg.openjdk.java.net/jdk/jdk12点击左侧的browse,再点击zip,就可以下载zip格式的源码压缩包。unzip xxx.zip 解压文件2. 安装jdkyum install java-11-openjdk-devel -y3. 运行con
2020-04-23
编写自己的Spring Boot Starter

编写自己的Spring Boot Starter

1.新建一个maven项目命名规则统一是xxx-spring-boot-starter完整pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
2020-06-29