安装docker参考我另一篇博客:docker安装
安装docker-compose:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
version: '3.8'
services:
nginx:
image: nginx:1.20
privileged: true
restart: always
network_mode: "host"
volumes:
- /usr/local/tool/nginx/dist:/usr/share/nginx/html/dist
- /usr/local/tool/nginx/nginx.conf:/etc/nginx/nginx.conf
- /usr/local/tool/nginx/cert:/usr/local/nginx/cert
- /usr/local/tool/nginx/logs:/var/log/nginx
mysql:
image: mysql:8.0.28
ports:
- 3306:3306
privileged: true
restart: always
command: --default-authentication-plugin=mysql_native_password
environment:
- MYSQL_ROOT_PASSWORD=mysql@2022
volumes:
- /usr/soft/mysql-3306/conf:/etc/mysql
- /usr/soft/mysql-3306/logs:/var/log/mysql
- /usr/soft/mysql-3306/data:/var/lib/mysql
- /usr/soft/mysql-3306/mysql-files:/var/lib/mysql-files
redis:
image: redis:6.0
ports:
- 6379:6379
privileged: true
restart: always
command: ["redis-server" ,"--appendonly" ,"yes" ,"--requirepass" ,"redis@2022"]
volumes:
- /usr/soft/redis-6379/redis.conf:/usr/local/etc/redis/redis.conf
- /usr/soft/redis-6379/data:/data
tool:
image: tool-service:1.0
build: .
privileged: true
restart: always
network_mode: "host"
volumes:
- /home/tool/uploadPath:/home/tool/uploadPath
- /home/tool/logs:/home/tool/logs
depends_on:
- mysql
- redis
其中的version需要跟docker的版本相对应,以下是官网给出对应关系列表:
官网地址:官网docker与docker-compose对应关系地址
这是对应的部分介绍:
nginx.conf配置:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# HTTPS server
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /usr/local/nginx/cert/server.crt;
ssl_certificate_key /usr/local/nginx/cert/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /backend/{
proxy_set_header Host $http_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;
client_max_body_size 20M;
proxy_send_timeout 500;
proxy_read_timeout 480;
proxy_pass http://localhost:8999;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
当进行到Java的后端项目时,需要先写对应的Dockerfile与打包后jar包,都需要在与yml文件在同一目录下。
Dockerfile内容如下:
#基础镜像通过java8来的
FROM java:8
#将当前文件中所有*.jar 拷贝到项目的app.jar中(这个app.jar是自己生成的)
COPY *.jar /app.jar
#映射地址
CMD ["--server.prot=8999"]
#暴露端口
EXPOSE 8999
#执行命令java -jar
ENTRYPOINT ["java","-jar","/app.jar"]
这是我对应的目录结构:
就在这个目录下,输入命令docker-compose up -d
之后,就可以启动项目了。
当想将项目停掉,输入命令docker-compose down
。但是如果Java代码修改之后,需要将原先的docker镜像删除之后再重新启动。
# 1. 基于docker-compose.yml启动管理的容器
docker-compose up -d
# 2. 关闭并删除容器
docker-compose down
# 3. 开启|关闭|重启已经存在的由docker-compose维护的容器
docker-compose start|stop|restart
# 4. 查看由docker-compose管理的容器
docker-compose ps
# 5. 查看日志
docker-compose logs -f
# 指定本 yml 依从的 compose 哪个版本制定的
version
# 构建镜像上下文路径
build
context:上下文路径。
dockerfile:指定构建镜像的 Dockerfile 文件名。
args:添加构建参数,这是只能在构建过程中访问的环境变量。
labels:设置构建镜像的标签。
target:多层构建,可以指定构建哪一层
# 开启权限
cap_add
# 关闭权限
cap_drop
# 为容器指定父 cgroup 组,意味着将继承该组的资源限制
cgroup_parent
# 覆盖容器启动的默认命令
command
# 指定自定义容器名称,而不是生成的默认名称
container_name
# 设置依赖关系
depends_on
# 指定与服务的部署和运行有关的配置
deploy
# 自定义 DNS 服务器
dns
# 覆盖容器默认的 entrypoint
entrypoint
# 文件添加环境变量
env_file
# 添加环境变量
environment
# 暴露端口
expose
# 指定容器运行的镜像
image
# 服务的日志记录配置
logging
# 设置网络模式
network_mode
# 将主机的数据卷或着文件挂载到容器里
volumes