文章目录
1:安装docker
2:docker安装mysql
3:docker安装redis
4:docker部署srpingboot项目
1:安装docker
执行命令
yum install -y docker
查看docker是否安装成功
yum list installed |grep docker
启动docker服务
systemctl start docker.service
查看docker服务状态 running 就是启动成功
systemctl status docker
配置国内镜像
为什么要配置国内镜像?
- 在日常进行Docker pull时,就算挂上了某些工具,仍然会出现timeout error的情况,这主要是因为国外的镜像源的下载速度实在是太慢太慢太慢了。
国内镜像地址:
Docker中国区官方镜像:
https://registry.docker-cn.com
网易:
http://hub-mirror.c.163.com
ustc:
https://docker.mirrors.ustc.edu.cn
中国科技大学:
https://docker.mirrors.ustc.edu.cn
阿里云:
登录:cr.console.aliyun.com
点击“创建我的容器镜像”,得到专属加速地址。
如何配置?
-
在宿主机器编辑文件(若没有则需手动创建):
vim /etc/docker/daemon.json
-
格式如下:
{ "registry-mirrors": [ "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com" ] }
-
配置完成之后重启docker
service docker restart
到此!我们docker的安装已经基本完成,那么再往下走之前我们需要了解一些docker基本的操作指令,以方便我们更方便的往下搭建镜像和容器
基本的镜像命令:
帮助命令:
docker --help
查看镜像是否配置成功:
docker info
查看本地镜像:
docker images
查看本地全部镜像:
docker images -a
删除镜像:
docker rmi xxx(镜像id)
基本容器命令:
停止容器:
docker stop xxx(容器id)
启动已经停止容器:
docker start xxx(容器id)
进入容器:
docker exec -it xxx(容器id) /bin/bash
删除容器:
docker rm -f xxx(容器id)
重启容器命令:
docker restart xxx(容器id)
查看容器的运行信息
docker ps
查看全部容器的运行信息
docker ps -a
官网的镜像地址:
该网站上都是别人已经写好并发布的镜像,我们可以直接搜索自己想要的镜像pull,大大简化部署时间;
https://hub.docker.com/
2:docker安装mysql
(1)拉取指定版本:
docker pull mysql:8.0.20
注意:8.0.20是版本号,可以根据自己的需求拉取指定的版本,若没有指定版本号则默认拉取最新的版本
(2)创建目录(用于容器数据挂载):
mkdir -p /usr/local/etc/mysql/log
mkdir -p /usr/local/etc/mysql/data
mkdir -p /usr/local/etc/mysql/conf
注意:mkdir是liunx创建目录指令,后续的路径可根据自己的需要创建到指定的文件夹下
(3)运行mysql容器
sudo docker run --privileged=true -p 3006:3306 --name mysql-8 -v /usr/local/etc/mysql/log:/var/log/mysql -v /usr/local/etc/mysql/data:/var/lib/mysql -v /usr/local/etc/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=szml666 -d mysql:8.0.20 --lower-case-table-names=1
在复制这段命令之前我们需要先理解上面这段命令
容器与主机映射端口为, 3006(主机端口,即外部连接mysql使用的端口号): 3306(容器端口):
-p 3006:3306
容器运行后的名称:
--name mysql-8
将容器/var/log/mysql目录下的数据,备份到主机的 /mysqldata/mysql/log目录下:
-v /usr/local/etc/mysql/log:/var/log/mysql
将容器/var/lib/mysql目录下的数据,备份到主机的 /mysqldata/mysql/data目录下:
-v /usr/local/etc/mysql/data:/var/lib/mysql
将容器/etc/mysql目录下的数据,备份到主机的 mysqldata/mysql/conf目录下:
-v /usr/local/etc/mysql/conf:/etc/mysql
将容器/etc/mysql目录下的数据,备份到主机的 mysqldata/mysql/conf目录下:
-e MYSQL_ROOT_PASSWORD=root:设置当前mysql实例的密码为root
需要运行的容器名称以及版本号
mysql:8.0.20
不去分表的大小写(主要针对mycat问题):
--lower-case-table-names=1
(4)进行授权远程连接(mysql 8.0跟之前的授权方式不同)
登录容器:
docker exec -it 容器名称 /bin/bash
登录mysql
mysql -u root -p
执行:
GRANT ALL ON *.* TO 'root'@'%';
刷新权限:
flush privileges;
更改加密规则:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
设置密码:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123654';
刷新权限:
flush privileges;
这一步主要防止我们使用数据库视图工具及连接的时候连接不上的问题
到此mysql的容器启动完成,我们可以用Navicat 测试连接
3:docker安装redis
(1)拉取指定版本:
docker pull redis:7.0.11
注意:7.0.11是版本号,可以根据自己的需求拉取指定的版本,若没有指定版本号则默认拉取最新的版本
(2)创建目录和文件夹(用于容器数据挂载和文件配置):
mkdir -p /usr/local/etc/redis/conf
touch /usr/local/etc/redis/conf/redis.conf
(3)运行redis容器
docker run -d \ --name redis-7.0.11 -p 6369:6379 \ --restart unless-stopped -v /usr/local/etc/redis/data:/data -v /usr/local/etc/redis/conf/redis.conf:/etc/redis/redis.conf \ redis:buster redis-server /etc/redis/redis.conf
理解上面这段命令
启动容器的名字:
-name redis
后台运行:
-d
将容器的 6379(后面那个) 端口映射到主机的 6379(前面那个) 端口:
-p 6379:6379
容器重启策略:
-restart unless-stopped
将Redis储存文件夹挂在到主机:
-v /mydata/redis/data:/data
将配置文件夹挂在到主机:
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf
启动哪个版本的 Redis (本地镜像的版本):
redis:buster
Redis 容器中设置 redis-server 每次启动读取 /etc/redis/redis.conf 这个配置为准:
redis-server /etc/redis/redis.conf
shell 命令换行:
\
(4)修改redis密码
1:查看运行的redis,并记下它的 CONTAINER ID
docker ps
2:通过容器id,进入redis
docker exec -it CONTAINER_ID /bin/bash
3:运行redis客户端
redis-cli
4:查看redis的密码
config get requirepass
5:置redis的密码
config set requirepass xxx(你的密码)
6:认证
auth xxx(你的密码)
到此redis的容器启动完成,我们可以用RedisDeskt测试连接
4:docker部署srpingboot项目
(1)使用idea将java项目打成jar包:
先清除之前的再重新打包
找到打包的jar包,在项目文件夹的target文件夹里面
(2)拉取jdk指定版本:
docker pull java:8
(3)在centos中指定文件夹用于存放jar包和dockerfile
dockerfile:用于将jar包编译成镜像
-
在指定文件夹下执行:
vim dockerfile
-
填写以下内容:
#依赖jdk镜像 FROM java:8 #作者 MAINTAINER xxx 设置时区 ENV TimeZone=Asia/Shanghai #使用软连接,并且将时区配置覆盖/etc/timezone RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone #暴露端口 EXPOSE 8089 #启动程序命令 ENTRYPOINT ["java","-jar","/data/jeecg-boot-module-system-3.3.0.jar"]
dockerfile命令:
命令 作用 FROM 来源于哪个基础镜依赖 MAINTAINER 作者信息 RUN 容器构建时需要运行的命令 EXPOSE 对外暴露端口 WORKDIR 容器创建后,终端默认登录进来的工作目录 USER 指定该镜像以什么用户去执行 默认为root ENV 运行时环境变量 VOLUME 配置容器数据卷挂载 ADD 将宿主机目录下的文件拷贝进镜像并且会自动处理URL和解压tar包 ,等于copy+解压 COPY 将源文件从宿主机拷贝到容器内 CMD 在执行docker run时候执行,可以有多个cmd指令但是只有最后一个生效, docker run的参数会覆盖 cmd的参数,一般可变参数用cmd,支持两种格式 shell: yum isntall -y vim ; exec: [“可执行文件”,“参数”] ENTRYPOINT 也是用来指定容器启动时要执行的命令,类似cmd 但是不会被 run 后的参数命令覆盖,固定参数一般用ENTRY_POINT, 当CMD和ENTRYPOINT联用时,cmd多用于给ENTRYPOINT传参 -
将jar包放到dockerfile填写的文件夹下:
如:我jar包当前放的是docker同级文件夹下的data文件夹
(4)编译dockerfile制作成镜像
docker build -t app-api .
app-api : 为生成镜像后的镜像名字;注意后面的"."!!!
(5)生成容器
docker run -p 8089:8080 --name app-api -d app-api
8089:为对外暴露端口
8080:为项目端口
--name app-api:为容器名字 app-api
-d app-api: 为执行哪个镜像
(6)最后部署成功,我们可以用ApiPost测试接口能否成功访问
请求路径为:宿主机ip+容器暴露的端口+接口的路径
例:http://xx:xx:xx:xx:8089/test
至此使用docker部署springboot项目成功,每个人的项目不同,需要部署的服务不同,但是所有的逻辑是相通的