为什么要用docker部署?
使用docker部署并不能提高效率,它的优势主要是部署方便、安全。前后端分离的项目部署比较麻烦,如果能使用一行命令启动,就非常方便。
准备工作:
- 安装docker
- 安装docker-compose
- mysql、redis自行安装
docker目录
- docker
- nginx
- mime.types
- nginx.conf
- conf.d
- default.conf
- myProject.conf(自己创建的文件)
- gzip.conf
- certificate(ssl证书)
- server.key
- server.pem
- Dockerfile
- docker-compose.yml
- admin-1.0.SNAPSHOT.jar(springboot打包后的文件)
- dist(vue打包后的文件夹)
- nginx
Dockerfile
FROM openjdk:8
MAINTAINER xxx "xxx@qq.com"
WORKDIR /app
ADD ./admin-1.0-SNAPSHOT.jar /app/admin-1.0-SNAPSHOT.jar
EXPOSE 8080
CMD java -jar /app/admin-1.0-SNAPSHOT.jar --spring.profiles.active=prod
docker-compose.yml
version: "3"
services:
helloApp:
image: carve/hello:latest
container_name: helloApp
build:
context: ./
dockerfile: Dockerfile
environment:
COMPOSE_PROJECT_NAME: hello-server
TZ: Asia/Shanghai
working_dir: /app
hello-nginx:
image: nginx
container_name: hello-nginx
ports:
- 8000:8000
- 8081:8081
volumes:
- ./nginx/:/etc/nginx/
- ./dist:/app/dist
links:
- helloApp
depends_on:
- helloApp
gzip.conf 静态压缩,建议加上,能大幅度减小请求的文件大小
#开启gzip功能
gzip on;
#开启gzip静态压缩功能
gzip_static on;
#gzip缓存大小
gzip_buffers 4 16k;
#gzip http版本
gzip_http_version 1.1;
#gzip 压缩级别 1-10
gzip_comp_level 5;
#gzip 压缩类型
gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
myProject.conf
upstream apistream{
# 对应docker-compose里的服务名称
server helloApp:8080;
}
server {
listen 8081;
server_name somename alias another.alias;
location / {
root /app/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html; # 解决页面刷新404问题
}
}
server {
listen 8000;
server_name somename alias another.alias;
location / {
proxy_pass http://apistream;
}
}
nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
index index.html index.htm;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
docker排查错误常用命令
# 查看运行的容器:
docker ps
# 删除容器:
docker rm -f 容器id或容器名称
# 删除所有容器:
docker rm -f $(docker ps -aq)
# 创建、启动并进入容器:
docker run -it 容器id或容器名称 bash
# 进入启动过的容器:
docker exec -it 容器id或容器名称 bash
# 退出容器:【停止容器】exit 【非停止容器】ctr+p+q
# 启动容器:
docker start 容器id
# 查看所有镜像:
docker images
# 删除镜像:
docker rmi -f 镜像id
# 删除所有镜像:
docker rmi -f $(docker images -aq)
# 查看后端项目的错误-日志(进入docker-compose的目录下):
cd /mnt/docker/
docker-compose logs
# 查看服务端ngix-日志:
docker logs nginx