使用MongoDB学习,构建练习开发环境的Docker Machine操作步骤
首先
在推进开发过程中,当想要尝试各种事情时,”可以创建并破坏的环境”非常方便。通过使用Docker,可以轻松构建这样的环境。
本次将以MongoDB为例介绍使用Docker构建开发环境的方法。
对于使用非Linux环境(如Mac或Windows)并使用Docker Machine的情况,将进行说明(省略了关于安装Docker Machine的步骤)。
如果您正在使用Linux环境(如Ubuntu)并在本地环境中已安装了Docker,那么只需阅读必要的部分即可。
此外,关于使用我们在本次创建的测试记录的MongoDB查询操作的总结,我们已经整理在了这里的”在这种情况下该怎么办?MongoDB查询操作反向索引参考”中,请随时阅读,如果有兴趣的话。
创建可使用的Docker虚拟环境
如果没有创建能够使用Docker的虚拟环境,你可以使用Docker Machine的create命令来创建环境。
在这里,我们将在VirtualBox上建立一个名为test-docker的虚拟环境。
$ docker-machine create --driver virtualbox test-docker
读取创建的虚拟环境的环境变量
为了使得本地环境可以使用docker命令,我们需要将之前创建的虚拟环境的环境变量加载到本地环境中。
$ eval "$(docker-machine env test-docker)"
创建并启动MongoDB容器。
当你可以使用docker命令时,接下来你可以创建和启动容器。
在这里,我们将容器名称保存为some-mongo。
如果MongoDB映像不存在,它会自动从Docker Hub获取映像。
另外,你可以指定MongoDB的版本,例如mongo:3.0.12。
您可以在官方网页上了解可用的版本。
$ docker run --name some-mongo -d mongo
Unable to find image 'mongo:latest' locally
latest: Pulling from library/mongo
6a5a5368e0c2: Pull complete
068577f76f42: Pull complete
40a9ca5f1cfb: Pull complete
取得したDokerイメージの一覧の確認方法
您可以通过以下方法查看已获取的Docker镜像列表。如果没有MongoDB的Docker镜像,您也可以通过执行docker run命令后确认是否已取得Docker镜像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest 3dfc45693d00 2 weeks ago 342.5 MB
在Docker上运行的容器如何确认。
在执行docker run命令后,您可以通过以下命令确认是否正确启动。
可以看到,名为some-mongo的MongoDB容器已成功启动。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d9206300ab1 mongo "/entrypoint.sh mongo" 6 minutes ago Up 6 minutes 27017/tcp some-mongo
准备测试记录
今回はMongoDBにサンプルレコードを挿入したいと思います。以下のソースをコピペしてファイルを作成してください。
ファイル名はimport.jsonとしてください。
{"no": 1,"firstName": "Taro","lastName": "Tanaka","age": 15,"body": {"height":165 ,"weight":60},"grades": [{ "semester":"first", "grade":90 },{ "semester":"second", "grade":80 }],"insertDate":ISODate("2016-10-20T15:00:00Z")}
{"no": 2,"firstName": "Satoshi","lastName": "Takeda","age": 16,"body": {"height":150 ,"weight":55},"grades": [{ "semester":"first", "grade":90 },{ "semester":"second", "grade":70 }],"insertDate":ISODate("2016-10-21T15:00:00Z")}
{"no": 3,"firstName": "Jiro","lastName": "Suzuki","age": 15,"body": {"height":170 ,"weight":65},"grades": [{ "semester":"first", "grade":60 },{ "semester":"second", "grade":80 }],"insertDate":ISODate("2016-10-22T15:00:00Z")}
将测试记录复制到容器中
将刚刚创建的import.json文件从本地环境复制到刚刚命名为some-mongo的容器内。
$ docker cp import.json some-mongo:import.json
登录到容器。
我会在MongoDB容器中通过bash进入。
$ docker exec -it some-mongo bash
插入测试记录
使用mongoimport命令将之前从本地环境复制的import.json中记录插入。此处将记录插入到数据库为test,集合为students的对象中。(集合对应关系型数据库中的表)
请注意,在容器中,默认情况下是root用户,因此使用#表示行首。
# mongoimport --db test --collection students --type json --file import.json
2016-10-22T08:13:40.093+0000 connected to: localhost
2016-10-22T08:13:40.103+0000 imported 3 documents
进入MongoDB.
データの準備ができたら実際にMongoDBに入ります。
# mongo
MongoDB shell version: 3.2.10
connecting to: test
指定数据库
クエリ操作をする前に、まずはどのDBを利用するのか指定をする必要があります。
先ほど作成したtestというDBを指定してくだい。
> use test
switched to db test
操作MongoDB
使用するDBを指定したら、先ほど挿入したレコードに対してクエリ操作をすることができます。
以下のコマンドで実際にレコードが正しく挿入されているか確認してみてください。
> db.students.count()
3
> db.students.find()
{ "_id" : ObjectId("580b1fb4bc40ca240baa778f"), "no" : 1, "firstName" : "Taro", "lastName" : "Tanaka", "age" : 15, "body" : { "height" : 165, "weight" : 60 }, "grades" : [ { "semester" : "first", "grade" : 90 }, { "semester" : "second", "grade" : 80 } ], "insertDate" : ISODate("2016-10-20T15:00:00Z") }
{ "_id" : ObjectId("580b1fb4bc40ca240baa7790"), "no" : 2, "firstName" : "Satoshi", "lastName" : "Takeda", "age" : 16, "body" : { "height" : 150, "weight" : 55 }, "grades" : [ { "semester" : "first", "grade" : 90 }, { "semester" : "second", "grade" : 70 } ], "insertDate" : ISODate("2016-10-21T15:00:00Z") }
{ "_id" : ObjectId("580b1fb4bc40ca240baa7791"), "no" : 3, "firstName" : "Jiro", "lastName" : "Suzuki", "age" : 15, "body" : { "height" : 170, "weight" : 65 }, "grades" : [ { "semester" : "first", "grade" : 60 }, { "semester" : "second", "grade" : 80 } ], "insertDate" : ISODate("2016-10-22T15:00:00Z") }
从MongoDB注销登录
您可以使用以下命令注销:
> quit()
削除方法
冒頭でも話したように、Dockerのメリットとしては「作っては壊すことのできる環境」が簡単に手に入ることです。
作成したMongoDBのコンテナを削除する場合は以下のようにできます。-fオプションを利用することで強制的に削除することができます。
docker rm -f some-mongo
如果要删除Docker映像本身,可以按以下方式操作。
docker rmi mongo