安装mongo
使用命令docker run mongo
,默认的tag是latest
,安装完成后再次运行docker ps
,可以看到
注意PORTS那列,hello-world-nginx的端口有映射关系0.0.0.0:32769 -> 80/tcp,但是mongo的端口只有27017/tcp,并任何没有映射关系。
要想让外部机器能够连接到mongo,需要使用下面的命令启动:
docker run -p 27017:27017 -d mongo
现在可以看到mongo已经有了端口映射本机的27017
:
Spring Boot应用连接mongo
运行Spring Boot应用:
mvn spring-boot:run
,mongo container已经在默认的端口27017
运行,因此只要运行程序,添加一些produc信息,就可以看到product列表。
运行robomongo
能够可视化的查看mongodb中的数据:
注意:当停止运行mongo并重新启动后,原来的数据会丢失。mongo的数据写在一个layer中,重启后会重新创建。
持久化mongodb数据
mongo docker重启后,之前的数据会丢失。这是因为docker会重新创建存储数据的layer。 要想将数据持久化,需要参考mongo的docker hub主页的说明,即:
- 在主机创建数据存储目录,如
/my_mongo_docker/data
- 使用命令启动docker:
docker run -v /Users/hope/my_mongo_docker/data:/data/db -p 27017:27017 -d mongo
上面的命令中:
-
-v
将本地目录映射到mongo的数据目录/data/db
(主机目录:docker目录) -
-p
将本地27017
端口映射到mongo的端口 -
-d
表示mongo在后台运行
再次运行Spring Boot应用,添加数据后可以看到本机目录中已经有数据存在:
重启mongo之后,之前的数据也还在。
安装MySQL
需要设置MYSQL_ROOT_PASSWORD
或 MYSQL_ALLOW_EMPTY_PASSWORD
docker run --name test-mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -v /Users/hope/my_mysql_docker/data:/var/lib/mysql -p 3306:3306 -d mysql
-
-e
设置环境变量MYSQL_ALLOW_EMPTY_PASSWORD
,密码为空 -
-v
设置主机目录:docker目录之间的映射 -
-p
设置主机端口:docker端口的映射 -
-d
后台运行
成功运行mysql docker后,使用mysql workbench测试连接: