docker-compose 项目部署 -实用记录

目前这里记录jar、mysql ,docker-compose一件部署,后面再添加reids、nginx...

1

项目文件,db数据,Dockerfile 准备;
注意: Dockerfile , docker-compose.yaml 的文件名是固定的!!!
说明:

  • volumesData :是数据挂载目录,项目启动后数据操作后存储的位置。
  • volumesJar:是jar 包挂载目录,更新版本就替换里面的jar包
  • mydocker.sql : 是数据初始化sql,本地导出来的

1
2
3

db - Dockerfile: 👇

FROM mysql:5.7
MAINTAINER hexiaoshu
LABEL version ='1.0'
LABEL description ='jar服务数据库'
WORKDIR /docker-entrypoint-initdb.d
ADD mydocker.sql .

说明:

  • FROM ,指定基础镜像
  • MAINTAINER ,作者
  • LABEL,说明信息
  • WORKDIR,当前微型linux系统内所在目录,工作目录
  • ADD,添加sql文件到镜像内,这里docker会自动初始化 sql

jar -Dockerfile:

FROM openjdk:8u222-jre
MAINTAINER xiaoshu
LABEL version ='1.0'
LABEL description ='测试jar服务'
WORKDIR /opt
ADD pratice.jar .
ENTRYPOINT ["java", "-jar", "pratice.jar"]
EXPOSE 8006

说明:EXPOSE 80 ,为 向外暴露 80端口

创建本地镜像文件 images ,注意在Dockerfile 文件所在目录
docker build -t xiaoshu-jar:1.0 . //. 当前目录
运行容器:
docker run -p 8006:8006 -d xiaoshu-jar:1.0
文件复制:

  • 复制容器内文件到当前目录:
    docker cp 容器ID:/文件名 .
  • 复制文件到容器:
    docker cp 文件名 容器ID:/foo.txt
    镜像保存:
    docker save -o ./redis.tar redis:latest
    镜像导入:
    docker load < /redis.tar

说明:这里提前创建jar的本地镜像,是为了挂载jar .

docker-compose

mysql常用env
environment:
     MYSQL_ROOT_PASSWORD: root                #数据库初始话为root用户设置的默认密码
     MYSQL_DATABASE: mproject                 #数据库名
     MYSQL_USER: mao                          #自定义数据库的用户,权限只作用于MYSQL_DATABASE配置的数据库
     MYSQL_PASSWORD: mao123
version: '3.3'
services:
  db:
    build: ./db/
    container_name: mydb
    restart: always
    volumes:
      - ./db/volumesData/:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 730730
      MYSQL_DATABASE: mydocker
    ports:
      - '13306:3306'
      
  app:
    image: docker-test/jar
    container_name: myjar
    volumes:  
      - ./jar/volumesJar/mydocker.jar:/opt/mydocker.jar
    entrypoint: java -jar mydocker.jar
    restart: always
    depends_on:
      - db
    ports:
      - '80:80'

说明:

  • version :指定 docker-compose 编译版本
  • services:服务列表,这里为yml文件上级属性
  • db:docker 服务名,主机名
  • build:编译Dockerfile 文件创建镜像,值为 Dockerfile文件路径
  • container_name :创建容器名称
  • restart:容器创建报错,是否尝试重启,always为一直重启
  • volumes:挂载目录,当前服务器 ./db/volumesData/ 路径,指向→ 容器内 /var/lib/mysql ,这里为吧数据存储在外部
  • environment:设置环境变量,MYSQL_ROOT_PASSWORD :mysql root 的密码 ;MYSQL_DATABASE:指定数据库
  • ports:容器端口映射
  • image:为指定镜像,build是创建镜像;这里指定镜像为刚创建的 docker-test/jar
  • entrypoint:容器创建成功后,执行命令 java -jar mydocker.jar 启动jar服务
  • depends_on:依赖关联,建立通信,这里与 数据库链接,docker会创建网桥
  • –注意: url: jdbc:mysql://db:3306/mydocker?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true ,链接地址是 db ,是服务名称,也是主机名称。

docker-compose up -d 后台运行,容器编排
docker-compose down 停止运行,会移除容器,但是创建的镜像会保留
docker-compose logs -f serviername 实时输出日志
docker restart container-id 更新jar版本后,重启容器。
docker ps 查看正在运行的容器
4
日志:5

记录几个docker 地址:
docker-compose文档
docker-hup,镜像下载地址
dockerhub上,mysql使用说明

下回再更!!
11

reids 操作:

version: '3.3'
services:
  db:
    build: ./db/
    container_name: mydb
    restart: always
    volumes:
      - ./db/volumesData/:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 730730
      MYSQL_DATABASE: mydocker
    ports:
      - '13306:3306'

  myredis:
    image: redis
    container_name: myredis
    volumes:
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis/volumesData/:/data
    environment:
      appendonly : 'yes'
    entrypoint: redis-server /usr/local/etc/redis/redis.conf
    restart: always
    ports:
      - '6379:6379'

  app:
    image: docker-test/jar
    container_name: myjar
    volumes:
      - ./jar/volumesJar/mydocker.jar:/opt/mydocker.jar
    entrypoint: java -jar mydocker.jar
    restart: always
    depends_on:
      - db
      - myredis
    ports:
      - '80:80'

注意: application-dev.yml 配置的 host: myredis ,是服务名

  redis:
    database: 0        # 设置存储分片 db0
    host: myredis
    port: 6379
    password: 730730
    lettuce:
      pool:
        max-active: 8       #最大链接数
        max-wait: 1000      #最大阻塞等待时间
        max-idle: 8         #最大空闲链接
        min-idle: 0
      shutdown-timeout: 100 #关闭超时时间

1

挂载后的数据

2

nginx 操作:

1

首先准备两个镜像jar,操作跟上面 ↑ 的一样:
在这里插入图片描述
在这里插入图片描述

docker build -t test-8082/jar .

nginx.conf:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
     
    upstream jar-cluster {
     	server hexiaoshu.club:8081;
     	server hexiaoshu.club:8082;
    } 
    server {
		listen       80;
        server_name  hexiaoshu.club;
    
        location / {															
            root   /usr/share/nginx/html;												
            index  index.html index.html;
        }

		location /test {
			proxy_pass http://jar-cluster;
			add_header Access-Control-Allow-Origin *;  							 #表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求
			proxy_next_upstream http_502 http_504 error timeout invalid_header;  #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移
			proxy_set_header Host $host;							  			 #原http请求的Header中的Host字段也放到转发的请求里
			proxy_set_header X-Forwarded-For $remote_addr;						 #XFF头,它代表客户端,也就是HTTP的请求端真实的IP,配置代理后保证网站的web服务器能获取到真实IP
			proxy_redirect default;
		}
		
        location = /50x.html {
            root   html;
        }
    }
}

docker-composy.yml:

version: '3.3'
services:
  mynginx:
    image: nginx
    container_name: mynginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./logs:/var/log/nginx
      - ./static:/usr/share/nginx/html     
    ports:
      - '80:80'
    environment:
      - NGINX_HOST=hexiaoshu.club
      - NGINX_PORT=80
      
  jar8081:
    image: test-8081/jar
    container_name: 8081jar
    volumes:
      - ./test-jar/docker-8081.jar:/opt/docker-8081.jar
    entrypoint: java -jar docker-8081.jar
    restart: always
    depends_on:
      - mynginx
    ports:
      - '8081:8081'  

  jar8082:
    image: test-8082/jar
    container_name: 8082jar
    volumes:
      - ./test-jar/docker-8082.jar:/opt/docker-8082.jar
    entrypoint: java -jar docker-8082.jar
    restart: always
    depends_on:
      - mynginx
    ports:
      - '8082:8082'       

在yml 文件目录运行,查看jar运行日志

docker-compose up -d
docker-compose logs -f 8081jar

访问:http://hexiaoshu.club/test/out 80 端口,轮询转发 8081 8082
3

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值