Docker 整合 SpringBoot 和 MongoDB
1.安装 Docker
目前 DockerHub 上只支持 Win10 专业版,企业版,教育版直接安装 Docekr Desktop for Windows,家庭版和 Win7 和 Win8 暂时还不能安装,只能安装 Docker ToolBox。下面是 Docker ToolBox 的安装教程
如果功能里没有 Hyper-V 可以忽略,安装成功后桌面会多出三个图标
2.拉取 MongoDB 镜像
打开 Docker Quickstart Terminal (小鲸鱼图标)运行 docker search mongo 寻找可以拉取的 mongo 镜像。我们拉取最新的 mongo 镜像,输入 docker pull mongo:latest,下载完成后我们查看是否本地已存在该镜像 输入 docker images
当然我们也可以打开 Kitematic (图标像蓝色 K 的)这是图形化的 docker 界面。登录 docker 账号,进入界面,可以直接点击想要拉取的镜像 ,或者搜索我们想要的镜像
例如我们要拉取 redis 镜像,点击 CREATE,你就会发现它在自动下载啦。不过速度可能会比较慢
如果不习惯 Docker Quickstart Terminal 可以选择 PowerShell
把镜像放到容器中启动
首先输入 dokcer run --name mongo -d mongo:latest 把 mongo 镜像放进容器中启动。成功后输入 docker ps 查看正在启动的容器
进入 mongo 容器并新建 mongo 数据库,和用户
输入 docker exec -it mongo bash 然后会出现(root@/)像 linux 那样,输入 mongo 进入容器,出现 mongo 版本就表示成功了。如下图:
新增数据库用户 输入 use tableName(你的数据库名),就可以创建了,然后再输入 db.createUser({user: “你想要的的用户名”, pwd: “你设置的密码”, roles: [{ role: “dbOwner”, db: “你的数据库名” }]})。最后创建成功后可以通过 db.auth()验证是否已创建成功。
当然如果觉得命令行太麻烦,也是可以使用图形化操作的,这里可以设置端口,容器重名、删除等功能
3.搭建 SpringBoot 项目整合 Docker 和 MongoDB
创建 SpringBoot 项目,并在 maven 引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.8.2</version>
</dependency>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
配置 application.properties
注意红色部分,因为我们在 docker mongoDB 中新增用户的格式是:user=‘’,pwd=‘’,所以我们这边也要这样配置。
编写简单实例 项目结构如下
实例如下:我们可以调用 SpringData 封装好的 MongoDB 直接调用 MongoTemplate 里面的方法实现简单的增删改查。
创建实体类
调用 MongoTemplate 方法
启动项目,用 postman 测试
增加用户功能
查找所有用户功能
4.编写 Dockerfile 让项目在 docker 上运行
连接 dokcer 这里使用默认的本机自带的 default,连接成功后会显示 docker 已有的镜像和正在运行的容器
进入 Edit Configurations
配置 Dockerfil 位置,另外添加 maven 命令:clean package -Dmaven.test.skip=true
编写 Dockerfile
FROM openjdk:8
VOLUME /tmp
ADD target/demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
EXPOSE 8080
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
运行 Dockerfile 运行成功后会在容器中出现,log 中出现 SpringBoot 项目启动成功信息
postman 测试查找用户成功
5 踩坑合集
DockerTool Box 踩坑合集
1.DockerTool Box 启动报 (default) No default Boot2Docker ISO found locally, downloading the latest release… 错误
2.DockerTool Box 启动报 VBoxManage.exe: error: Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT)错误
以管理员模式启动 cmd,输入 bcdedit。确保下图红色圈中部分为 off。若为 Auto 则输入 bcdedit /set hypervisorlaunchtype off 再重启电脑。
Dockerfile ADD 的坑
Dockerfile ADD 需要指定路径 不指定则会出现 docker-maven-plugin ADD failed: no source files were specified 错误
ADD 不指定路径
ADD 指定路径
连接 Docker 的坑
如果你想连接自己服务器上的 docker,你需要在服务器新增端口为 2375 的入站规则,否则 idea 这边会连接失败
ADD 指定路径
连接 Docker 的坑
如果你想连接自己服务器上的 docker,你需要在服务器新增端口为 2375 的入站规则,否则 idea 这边会连接失败