使用 docker 部署一个基于 Nginx、Redis、MySQL、SpringBoot 的前后端分离项目
安装依赖
$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 复制代码
添加 yum 国内软件源
$ sudo yum-config-manager \ --add-repo \ https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo 复制代码
更新yum软件源缓存, 安装 docker-ce
$ sudo yum makecache fast $ sudo yum install docker-ce 复制代码
启动 docker-ce
$ sudo systemctl enable docker $ sudo systemctl start docker 复制代码
当前用户加入 docker 用户组, 加入后退出终端重新登录
$ sudo groupadd docker $ sudo usermod -aG docker sabercon 复制代码
在 /etc/docker/daemon.json
中写入腾讯云镜像
{ "registry-mirrors": [ "https://mirror.ccs.tencentyun.com", "https://dockerhub.azk8s.cn", "https://hub-mirror.c.163.com" ] } 复制代码
重启服务
$ sudo systemctl daemon-reload $ sudo systemctl restart docker 复制代码
$ docker pull mysql $ docker run -p 3306:3306 --name mysql \ -v /etc/localtime:/etc/localtime \ -v ~/mysql/data:/var/lib/mysql \ -v ~/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=sabercon20 \ -d mysql 复制代码
进入容器操作 mysql
$ docker exec -it mysql /bin/bash $ mysql -uroot -psabercon20 --default-character-set=utf8 复制代码
创建用户并修改时区
CREATE USER 'sabercon'@'%' IDENTIFIED WITH mysql_native_password BY 'sabercon20'; GRANT ALL PRIVILEGES ON *.* TO 'sabercon'@'%'; SET GLOBAL time_zone = '+8:00'; SET time_zone = '+8:00'; FLUSH PRIVILEGES; 复制代码
不开启持久存储
$ docker pull redis $ docker run --name redis \ -v /etc/localtime:/etc/localtime \ -d redis 复制代码
进入容器操作 redis
$ docker exec -it redis redis-cli 复制代码
先启动拷贝配置文件
$ docker pull nginx $ docker run --name nginx -d nginx $ docker container cp nginx:/etc/nginx ~/nginx/ $ mv nginx conf $ docker stop nginx $ docker rm nginx 复制代码
启动 nginx
$ docker run -p 80:80 --name nginx \ -v /etc/localtime:/etc/localtime \ -v ~/nginx/html:/usr/share/nginx/html \ -v ~/nginx/logs:/var/log/nginx \ -v ~/nginx/conf:/etc/nginx \ -d nginx 复制代码
在 ~/nginx/conf/conf.d
中加入 api.conf
server { listen 80; server_name www.sabercon.cn; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://172.16.0.17:8080/api; } } 复制代码
安装文件传输工具上传 dist.tar.gz 到 ~/nginx/
$ sudo yum -y install lrzsz $ rz 复制代码
解压覆盖 ~/nginx/html
$ tar -zxvf dist.tar.gz $ sudo rm -rf html $ mv dist html $ docker restart nginx 复制代码
创建 Dockerfile 文件
# 该镜像需要依赖的基础镜像 FROM java:8 # 将当前目录下的 jar 包复制到 docker 容器的 / 目录下 ADD motto-log-0.0.1-SNAPSHOT.jar /motto-log.jar # 运行过程中创建一个 motto-log.jar 文件 RUN bash -c 'touch /motto-log.jar' # 声明服务运行在 8080 端口 EXPOSE 8080 # 指定 docker 容器启动时运行jar包 ENTRYPOINT ["java", "-jar","/motto-log.jar"] # 指定维护者的名字 MAINTAINER sabercon 复制代码
maven package 后将 Dockerfile 和 jar 包一起上传服务器
# . 表示 Dockerfile 所在目录 $ docker build -t motto-log:0.0.1-SNAPSHOT . $ docker run -p 8080:8080 --name motto \ --link redis:redis \ --link mysql:mysql \ -v /etc/localtime:/etc/localtime \ -v ~/motto/logs:/var/logs \ -d motto-log:0.0.1-SNAPSHOT 复制代码