本文章全部阅读大约2小时,包含一个完整的springboot + vue +mysql+redis前后端分离项目的部署在docker上的全流程,比较复杂,请做好心理准备,遇到问题可留言或则私信
目录
1 安装Docker,以及简单使用参照
2 Docker部署mysql
如何配置docker中的mysql为,外界可远程访问那?
如何修改mysql的配置文件?
如何在本机和远程登陆mysql?
本机
远程
3 部署Redis
4 重新打包springboot项目
5 在宿主机上部署前端项目
6 Docker 的命令
关于重启
常用的
7 快速入门
8 其他的疑惑解答
文件挂载与文件夹的挂载?
为什么挂载的文件变成文件夹了?
(14条消息) ubuntu安装、使用docker超级详细的入门教程_ubuntu 安装docker_v奶油爆米花的博客-CSDN博客
看不懂的先看本文件的1和8
1 查看下已有的镜像
docker images
2 下载Mysql的镜像(这里已5.7版本为例)
docker pull mysql:5.7
3 再次查看是否成功
docker images;
4 运行镜像
docker run -d -p 3307:3306 -v mysql_conf:/etc/mysql/conf.d -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=自己设置的密码 --name mysql01 mysql:5.7
注意这里第一个端口为宿主主机的端口,第二个为docker的端口,两者互相独立而不干扰,在外界访问时服务器时,先通过宿主机的端口访问,然后docker会监听对应的端口从而将宿主机的端口映射为容器的端口
5 查看运行的容器
docker ps;
7 查看mysql的IP地址,需要先记下来,待会要用到的
docker inspect 容器的id
8 查询卷挂载目录列表
docker volume ls
9 根据指定列查出此列的文件地址
docker volume inspect mysql_data
10 将Mountpoint复制下来,去此目录下上传sql文件
11上传文件(略)
我这边已经上传好了(yyy.sql)
12 将sql文件暂存docker
sudo docker cp sql文件路径 mysql容器id:/
注意 linux命令后面中后面要加上:/
13 将数据导入数据库
进入docker容器
docker exec -it mysql01 /bin/bash
14 创建数据库....报错了!
额额额额额额,哈哈,其实 不是别忘了我们还没有登陆数据库那!!!
15 登陆数据库系统
mysql -u root -p
密码就是刚昂运行时的密码
16 创建数据库
create database 数据库名;
17 查看是否创建成功
show databases;
18 选定数据库
use yyy
19 运行刚刚暂存的sql文件
source yyy.sql(这个名字就是上传sql文件的名字)
20 查看数据库中的表格
show tables
21 修改mysql的密码(可不用)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
修改用户权限为可远程访问
22 新建用户用户并设置可远程访问(可不用)
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
23 授予用户所有表的权限(可不用)
grant all on *.* to 'username'@'%';
24 刷新权限
flush privileges;
25 退出数据库系统,退出bash使用
exit
25 (可不用)
如何直观的修改远程访问权限?
1 选用mysql数据库
user mysql;
2 查询所有用户名和host
select user,host from user;
3 .修改root用户的host字段
update user set host="%" where user="root"
4 立即刷新权限
flush privileges
OK!额,如果想配置可远程访问mysql看下面的
1 进入数据库修改用户权限为可远程访问
方法看上面的···如何直观的修改远程访问权限?···
2 放行层层的防火墙下的端口
2.1 打开服务器安全组的特定端口
2.2 在操作系统(utuntu)内部放行
#允许所有的外部IP访问本机的22/tcp端口(ssh)
sudo ufw allow 端口号/tcp
2.3 在宝塔面板中放行
3 直接远程访问命令即可访问
注意这里的端口号是宿主机器的不是docker的
mysql -h 服务器的IP地址 -P 端口 -u 用户名 -p
eg:
mysql -h 192.168.5.116 -P 3306 -u root -p
1 查看当前mysql使用的配置文件
mysql --help | grep 'my.cnf'
2 进入修改即可
vim 路径
mysql -u root -p
mysql -h 服务器的IP地址 -P 端口 -u 用户名 -p
eg:
mysql -h 192.168.5.116 -P 3306 -u root -p
1 拉取redis的镜像
docker pull redis
2 查看是否下载成功
docker images
3 运行redis(最重要的步骤)
3.1新建映射文件夹
建立以下目录
3.2 把redis的配置文件放到conf中
redis.conf下载链接
http://download.redis.io/redis-stable/redis.conf
3.3 修改下载的配置文件
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
databases 16 #数据库个数(可选),我修改了这个只是查看是否生效。。
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
requirepass foobared #设置密码 把foobared改为自己设置密码
3.4 运行命令
docker run --name myredis01 -p 6380:6379 -v /mydockerconf/redis/data:/redis/data -v /mydockerconf/redis/conf:/redis/conf/redis.conf -d redis redis-server /redis/conf/redis.conf
4 查看是否成功
docker ps
5 查看Redis的ip,并记住
docker inspect redis的id
6 查看日志
docker logs redis的id
1)重新在springboot项目中编写配置文件/新建一个配置文件
刚刚的mysql 的ip地址,以及端口号(在docker容器的端口号)
172.17.0.2:3306
刚刚的redis 的ip地址,以及端口号
172.17.0.3:6379
实例如下
spring: redis: host: 172.17.0.3 port: 6379 password: database: 0 jedis: pool: max-active: 10 max-wait: 5000 max-idle: 500 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://172.17.0.2:3306/yyy?useUnicode=true&characterEncoding=UTF-8&useSSL=false username: yyy password: xx type: com.alibaba.druid.pool.DruidDataSource
2)打包成jar包上传给服务器的指定目录
如图第二个
3)编写Dockerfile
# Docker image for springboot file run # VERSION 0.0.1 # Author: # 基础镜像使用java FROM openjdk:8 # 作者 MAINTAINER mydockerscm # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将MyBlogscm-0.0.1-SNAPSHOT.jar包添加到容器中并更名为app.jar ADD MyBlogscm-0.0.1-SNAPSHOT.jar app.jar # 运行jar包 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
4)构建镜像
回到我们新建好的目录
docker build -t 自己随便起的名字:自己随便起的便签 .
(注意最后的 .)
5)查看是否成功
docker images
6) 启动容器
7)查看是否成功
8)查看运行日志
docker logs 容器id
可参考这篇文章的前端部分的部署
(11条消息) 宝塔部署前后端分离项目(Vue+SpringBoot)_宝塔面板部署前后端分离项目_桂亭亭的博客-CSDN博客
守护进程重启 sudo systemctl daemon-reload
重启docker服务 systemctl restart docker
重启docker服务 sudo service docker restart
关闭docker service docker stop
关闭docker systemctl stop docker
docker ps
查看当前运行中的容器docker images
查看镜像列表docker rm container-id
删除指定 id 的容器docker stop/start container-id
停止/启动指定 id 的容器docker rmi image-id
删除指定 id 的镜像docker volume ls
查看 volume 列表docker network ls
查看网络列表
Docker 是一个应用打包、分发、部署的工具
你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,
而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。
本文档课件配套 视频教程
特性 | 普通虚拟机 | Docker |
---|---|---|
跨平台 | 通常只能在桌面级系统运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行 | 支持的系统非常多,各类 windows 和 Linux 都支持 |
性能 | 性能损耗大,内存占用高,因为是把整个完整系统都虚拟出来了 | 性能好,只虚拟软件所需运行环境,最大化减少没用的配置 |
自动化 | 需要手动安装所有东西 | 一个命令就可以自动部署好所需环境 |
稳定性 | 稳定性不高,不同系统差异大 | 稳定性好,不同系统都一样部署方式 |
目前我们只使用到了,打包和部署
打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装
部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在 Windows/Mac/Linux。
常规应用开发部署方式:自己在 Windows 上开发、测试 --> 到 Linux 服务器配置运行环境部署。
问题:我机器上跑都没问题,怎么到服务器就各种问题了
用 Docker 开发部署流程:自己在 Windows 上开发、测试 --> 打包为 Docker 镜像(可以理解为软件安装包) --> 各种服务器上只需要一个命令部署好
优点:确保了不同机器上跑都是一致的运行环境,不会出现我机器上跑正常,你机器跑就有问题的情况。
例如 易文档,SVNBucket 的私有化部署就是用 Docker,轻松应对客户的各种服务器。
镜像:可以理解为软件安装包,可以方便的进行传播和安装。
容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。
文件夹挂载
若文件夹不存在,则docker会先创建出文件夹(若为多层文件夹,则递归创建)
文件挂载
docker 禁止用主机上不存在的文件挂载到容器中,所以我们在想挂载文件时直接挂载整个文件夹即可
因为docker默认会直接挂载文件夹,如果不存在也会创建文件夹而不是文件