VM虚拟机 Centos7安装docker docker部署redis MySQL springboot 项目 桥接访问容器

首先安装docker

参考链接::https://blog.csdn.net/qq_39997939/article/details/131005939
首先安装一些必要的包:

yum install -y yum-utils device-mapper-persistent-data lvm2

然后添加 Docker 仓库:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

注:如果出现如下错误,这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils安装就可以了

[root@ecs-1pku3 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager:找不到命令

现在,你可以安装 Docker 了:

yum install docker-ce

启动 Docker 并设置开机启动
安装完 Docker 后,我们需要启动 Docker:

systemctl start docker

我们也可以让 Docker 在启动时自动运行:

systemctl enable docker

docker安装Redis

参考链接:https://blog.csdn.net/A15130402745/article/details/128983421
我这里选择了6.2.6版本

docker pull redis:6.2.6

查看镜像

[root@localhost /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        6.2.6    da63666bbe9a   23 hours ago   138MB

做远程连接配置

mkdir -p /app/redis/data
mkdir -p /app/redis/conf

上传一份redis官网默认原始的redis.conf上传至/app/redis/conf目录下
注:redis.conf必须与要运行的redis容器版本一致,否则可能会报标签不识别的错误

修改redis.conf的配置相关
chmod -R 755 /app/redis/conf/*; #赋予权限
vim /app/redis/conf/redis.conf; #编辑redis的配置文件

运行容器(-v这里表示指定你的redis配置文件)

docker run -p 6379:6379 --name redis -v /app/redis/conf/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.2.6 redis-server /etc/redis/redis.conf

我遇到这个报错
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect

进入/etc/sysctl.conf 文件,设置 ’ vm.overcommit_memory = 1

然后又遇到了启动不成功,而且docker logs redis 没有日志,多方询问 原因是
在redis.conf中注掉daemonize yes这一行,或者改为daemonize no。因为我们的docker run里参数-d就是以守护进程方式启动redis,而配置文件里daemonize yes这个东东再次以守护进程方式启动,而且它会读取pidfile这个配置的文件作为进程ID文件。说白了,就是docker启动参数跟redis.conf配置冲突了。
在这里插入图片描述

[root@localhost /]# docker run -p 6379:6379 --name redis -v /app/redis/conf/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.2.6 redis-server /etc/redis/redis.conf
e7bb07133a5af5f2a307a5c48e0ace794930f48339b563cd33d7c9250ad11006
[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS          PORTS                                       NAMES
e7bb07133a5a   redis     "docker-entrypoint.s…"   40 seconds ago   Up 40 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis-test

然后可以尝试连接一下

docker安装MySQL

参考链接:https://zhuanlan.zhihu.com/p/640744750

我直接下载指定版本的mysql镜像

docker pull mysql:5.7 
[root@localhost /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    da63666bbe9a   23 hours ago   138MB
mysql        5.7       8da80fe49fcf   5 days ago     577MB

使用镜像运行容器

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=Root_123456 -d mysql:5.7

执行完后 尝试连接 root Root_123456

springboot项目

Dockerfile文件

# 基于java镜像创建新镜像
FROM openjdk:8
# 作者
MAINTAINER laopifu
# 将jar包添加到容器中并更名为app.jar
ADD  /app/laopifu/laopifu-1.0.jar laopifu.jar
# 运行jar包
ENTRYPOINT ["nohup","java","-jar","laopifu.jar","&"]

准备项目jar包,创建一个项目目录 将jar包和Dockerfile文件放到一起在这里插入图片描述
-t:打包后的镜像名称 -f:Dockerfile文件的路径,注意最后那个空格和点
先切换到根目录 cd /

docker build -t laopifuv2 -f /app/laopifu/Dockerfile .

然后运行容器

docker run -d -p 8082:8082 --name laopifuv2 laopifuv2

doocker ps查看一下运行情况(没有的话 用docker ps -a)

[root@localhost /]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
43c4b54e2b99   mysql:5.7   "docker-entrypoint.s…"   57 minutes ago   Up 57 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
e7bb07133a5a   redis       "docker-entrypoint.s…"   2 hours ago      Up 2 hours      0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis-test
[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                   CREATED             STATUS                     PORTS                                                  NAMES
81ea62a9bece   laopifuv2   "nohup java -jar 'la…"   7 minutes ago       Exited (1) 7 minutes ago                                                          laopifuv2
43c4b54e2b99   mysql:5.7   "docker-entrypoint.s…"   About an hour ago   Up About an hour           0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
e7bb07133a5a   redis       "docker-entrypoint.s…"   2 hours ago         Up 2 hours                 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis-test

我这里没有出现项目,查看日志发现报错

docker logs laopifuv2

最后处理好报错,再查看一下

[root@localhost /]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED             STATUS             PORTS                                                  NAMES
c68b71ebacdb   laopifuv2   "nohup java -jar lao…"   8 seconds ago       Up 7 seconds       0.0.0.0:8082->8082/tcp, :::8082->8082/tcp              laopifuv2
43c4b54e2b99   mysql:5.7   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
e7bb07133a5a   redis       "docker-entrypoint.s…"   2 hours ago         Up 2 hours         0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis-test

正常启动了
在虚拟机外浏览器访问正常运行
在这里插入图片描述
重启虚拟机后容器需要重启

 docker restart redis-test
 docker restart mysql
 docker restart laopifuv2

项目容器连接mysql、redis需要使用宿主机IP+容器端口

也可以使用docker 的 桥接 的网络模式 使用容器名称进行连接
就像这样
在这里插入图片描述
使用桥接方式

  1. 创建一个新的自定义网络
 docker network create my-net

在这里插入图片描述
2. 将需要通信的容器使用自定义网络启动
记得注意一下mysql的数据,容器删除后数据库会丢失

[root@localhost /]# docker run -p 6379:6379 --name redis --network my-net  -v /app/redis/conf/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.2.6 redis-server /etc/redis/redis.conf
c87aa1370897bb9aca32937459a6551d0cb7ddc1050fd111e379981b152edcaf
[root@localhost /]# docker run -p 3306:3306 --name mysql --network my-net -e MYSQL_ROOT_PASSWORD=Root_123456 -d mysql:5.7
e82d7767f6805b7a2dce7951af3047590fa5d4e209b740c9cb8337c93e576015
[root@localhost /]# docker run -d -p 8082:8082 --network my-net --name laopifuv2 laopifuv2 
25a9616917749803a883c8d9bb408282ebfee2ad6a9b1854eb52210e19ba701a
  1. 查看一下连接到自定义网络的容器
 docker network inspect my-net

在这里插入图片描述
说明容器已连接到自定义网络

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值