首先需要先安裝 Docker Toolbox,工具包包含下面幾種工具
- Docker Machine
- Docker Engine
- Docker Compose
- Kitematic
- command-line environment shell
- Oracle VM VirtualBox
整個流程為
- 安裝 Docker Toolbox
- 在 container 中執行 image 檔
- 在 Docker Hub 瀏覽可用的 image 檔
- 建置自己的 image 並 push 到 Docker Hub
因為 Docker 的常駐服務程式(daemon)採用 Linux 規範的核心功能,所以我們不能直接在 OSX 中執行。
因此需要使用 docker-machine
來建立掛載一個虛擬機器,並且用這個虛擬機器來執行 Docker。
如果 Docker 安裝在 Linux 系統中那麼 Docker client, Docker daemon, 還有任何 Docker 容器都
可以直接在本機上執行。
而在 OSX 中 Docker daemon 預設是執行在一個輕量的 Linux VM,整個 VM 被配置在記憶體中,約佔 24MB
啟動時間約 5 秒。
執行
- 建立或開啟
docker-machine
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| $ docker-machine create
$ docker-machine rm [name]
$ docker-machine create --driver virtualbox default
$ docker-machine [start|stop|restart|status]
$ docker-machine ls
$ eval "$(docker-machine evn default)"
# 啟動 docker $ docker run hello-world
$ docker ps
$ docker-machine start $ eval "$(docker-machine env default)"
|
Docker machine 運行著 Docker Engine,Engine 的部分提供我們 Docker 的核心功能。我們可以使用 image 和 container。
container 意思就像是一個 instance,而 image 檔就像是 class。
docker run hello-world
中 run
是建立和執行一個 container,最後 hello-world
則是 image
一個 container 等於是一個基本的 Linux 系統,而 image 則是您希望安裝到這個 container 的軟體。
docker 常用操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
$ docker run docker/whalesay cowsay boo
$ docker images
$ docker build -t docker-whale .
$ docker tag 32d9cb7369aa andyyou/node:latest $ docker tag [image id] [repo_account/image_name]
$docker login
$ docker push
$ docker rmi -f 7d9495d03763 $ docker rmi -f docker-whale
$ docker rm -f [container_id/container_name]
|
Docker with Node, MongoDB
下面為如何設定 Docker 容器搭配 MongoDB 與 NodeJS 的簡短介紹。我們將一步一步的介紹關於設定與過程中可能遇到的問題。
在我們熟悉 Docker 搭配 Node, MongoDB 的操作之後,我們將具備足夠基本知識來使用 Docker
MongoDB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| $ docker pull mongo:latest
$ docker run -v "$(pwd)":/data --name mongo -d mongo mongod --smallfiles
$ docker ps
$ docker ps -a
$ docker rm [container_id]
$ docker run -it --link mongo:mongo --rm mongo sh -c 'exec mongo "$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/test"'
$ docker exec -it 67d1db81df31 bash $ mongo $ db.col.insert({"a": 4}) $ db.col.find().pretty() $ mongodump --db test --out /data/test-backup $ mongorestore --db test-restored /data/test-backup/test
|
Node
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| $ docker pull node:latest
$ docker run -it --rm node
$ docker run -it --name node -v "$(pwd)":/data --link mongo:mongo -w /data -p 8082:3000 node bash
$ docker run --name nodeapp -v "$(pwd)":/data --link mongo:mongo -w /data/app/sandbox -p 8082:3000 -d node npm start
$ docker logs nodeapp $ docker logs -f nodeapp
$ docker-machine config
|
資源