docker-compose 项目部署 -实用记录
目前这里记录jar、mysql ,docker-compose一件部署,后面再添加reids、nginx...
项目文件,
db
数据,Dockerfile
准备;
注意:Dockerfile
,docker-compose.yaml
的文件名是固定的!!!
说明:
volumesData
:是数据挂载目录,项目启动后数据操作后存储的位置。volumesJar
:是jar 包挂载目录,更新版本就替换里面的jar包mydocker.sql
: 是数据初始化sql,本地导出来的
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
查看正在运行的容器
日志:
记录几个docker 地址:
docker-compose文档
docker-hup,镜像下载地址
dockerhub上,mysql使用说明
下回再更!!
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 #关闭超时时间
挂载后的数据
nginx 操作:
首先准备两个镜像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
更多推荐
所有评论(0)