Docker 主要的概念
Dockerfile => 用來產生 docker image 用的(介紹)
Image => 可以用來產生 docker container
Container => 實際上在 run 我們想要的 service
Docker pool (類似 git hub 的概念) https://hub.docker.com/
常用的指令:
docker command
docker images # 列出目前本地端有抓好哪些 docker image
docker ps # 列出目前正在運行中的 docker container
docker ps -a # 列出目前本地端一共有哪些 docker container (包含已經停止運行的)
docker pull [image_name:version] # 從 docker hub 下載一個特定版本的 docker image
docker pull [image] # 從 docker hub 下載最新版本的 docker image
docker run [image] # 從 docker image 建立一個 docker container 並且運行
docker start [container] # 啟動 docker container
docker stop [container] # 停止 docker container
例如
# 將 mongo db 版本 3.3 的 docker image 給抓下來
$ docker pull mongo:3.3
# 將 mongo db 最新版本的 docker image 給抓下來
$ docker pull mongo
pull Image 的狀態
pajace@ubuntu-server:~/mongo_db/3.2$ docker pull mongo:3.1
3.1: Pulling from library/mongo
8dddc0afbe0a: Downloading [====> ] 3.06 MB/37.19 MB
a3ed95caeb02: Download complete
32eed1053be0: Download complete
da7450003e70: Download complete
da146c968d58: Downloading [===============> ] 365.1 kB/1.168 MB
75ce455f57bd: Waiting
f1fac483f3f6: Waiting
dc616cc81177: Waiting
2b7ade65468e: Waiting
03913f2c5b05: Waiting
當完成的時候
pajace@ubuntu-server:~/mongo_db/3.2$ docker pull mongo:3.1
3.1: Pulling from library/mongo
8dddc0afbe0a: Pull complete
a3ed95caeb02: Pull complete
32eed1053be0: Pull complete
da7450003e70: Pull complete
da146c968d58: Pull complete
75ce455f57bd: Pull complete
f1fac483f3f6: Pull complete
dc616cc81177: Pull complete
2b7ade65468e: Pull complete
03913f2c5b05: Pull complete
Digest: sha256:bb3388e777b5d42c3d51370d2dcf2b1bd045b7169cf5e9373d6ef3bd56d9e78a
Status: Downloaded newer image for mongo:3.1
抓下來之後可以用 docker images 可以列出目前有哪些 Image
顯示目前有哪些 image 在 local 端
pajace@ubuntu-server:~/mongo_db/3.2$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo-express latest 11b1889462fa 3 weeks ago 252.3 MB
mongo 3.3.6 83370cc968c1 3 weeks ago 342.9 MB
mongo 3.2 4244d33b9b0e 3 weeks ago 313.1 MB
接下來就讓我們來建立一個 Container 並執行它,會用到的參數如下:
-d 讓這個 container 背景執行模式
-v 掛資料夾
-p 綁定 container 的 port 到 localhost
--name 設定一個名字給這個 container
... 當然還有很多
請參考這裡
建立並執行 mongodb docker container
# 建立並運行 mongodb docker container
$ docker run -d --name mongodb_3.3 -p 27017:27017 mongo:3.3.6
078e7112aa59050297e4f2ab5b3fa322e91a217226dece11aafc06f521e6ab5f
# 建立 mongo-express 並且連結到 剛剛建立的 mongodb docker container
$ docker run -d --name mongodb_web_336 --link mongodb_3.3:mongo -p 8081:8081 mongo-express
ac7f52660d4b661e14fb832ae2f8655702b8410b56de7d7f2bb74e2196898d4b
# 查看目前正在運行的 docker container
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac7f52660d4b mongo-express "tini -- node app" 3 seconds ago Up 2 seconds 0.0.0.0:8081->8081/tcp mongodb_web_336
078e7112aa59 mongo:3.3.6 "/entrypoint.sh mongo" 2 minutes ago Up 2 minutes 0.0.0.0:27017->27017/tcp mongodb_3.3
Windows 或 Mac 需要 port mapping, Ubuntu 上則不用
因為在 Windows 上,Docker 是 run 在一個 virtual machine 上面,所以需要做一下 port mapping, 好將 virtual machine 上的 port 導到 localhost 上面來
Unfortunately, the mechanism VirtualBox uses to share folders between the host system and the Docker container is not compatible with the memory mapped files used by MongoDB (see vbox bug, docs.mongodb.org and related jira.mongodb.org bug). This means that it is not possible to run a MongoDB container with the data directory mapped to the host.
因此在 Windows 或 Mac 上無法使用 -v /some_path/:/data/db 這個參數
當我們使用 docker run 建立並執行一個 container 之後,就可以使用 docker start 或 docker stop 來啟動或停止這個 contaner, 也可以任意的切換目前正在使用的 MongoDB.
啟動 container
$ docker stop BookServerMongoDB_3.3
$ docker start BookServerMongoDB_3.3
来自:http://mycodetub.logdown.com/posts/737534-use-mongodb-docker-image