Docker 到底有什么优点吸引我们?
- Build:允许自由组合各种服务来构建我们的应用,避免开发和生产之间的环境问题,并且不局限在任何平台和语言
- Ship:通过统一的用户接口,管理,设计应用开发、测试、发布的生命周期
- Run:可以快捷地在多个平台,发布可扩展、安全、可靠的服务
Use it!
说了这么多,那就让我们玩起来!
0. Install Docker Tools
NOTE:
- 如果是 Mac OS X 用户,请先安装 Virtualbox
brew cask install virtualbox
。 - 如果不喜欢 Docker CLI 工具,也可以安装 Kitematic,Kitematic 是 Docker 的 GUI 管理工具。
1. Create Node.js Project
server.js
// Import modules
// Create App
// Redis Client
// Compose Schema
// Compose Model
// Create Session
// Routes for redis
'/redis',
'/redis/set',
'/redis/get',
// Routes for redis
'/mongoose',
'/mongoose/set',
'/mongoose/get',
`mongodb://`,
package.json
2. Machine:在 virtualbox 中创建 Docker Host
3. Compose:定义及操作
为项目创建 Dockerfile
Dockerfile
FROM mhart/alpine-node
# FROM mhart/alpine-node:base
# FROM mhart/alpine-node:base-0.10
WORKDIR /src
ADD . .
# If you have native dependencies, you'll need extra tools
RUN apk add --update make gcc g++ python
# If you need npm, don't use a base tag
RUN npm install
# If you had native dependencies you can now remove build tools
RUN apk del make gcc g++ python && \
rm -rf /tmp/* /var/cache/apk/* /root/.npm /root/.node-gyp
EXPOSE 3000
CMD ["npm", "start"]
创建 docker-compose.yml 来组合 Node.js, Redis, Mongodb 服务
Dockerfile
app:
build: .
volumes:
- .:/src
links:
- mongo
- redis
ports:
- 3000:3000
redis:
image: redis
mongo:
image: mongo
测试、访问我们的服务 :rocket:
关闭服务,休息下
NOTE:
Compose 的前身是 fig。
up
start
logs
stop
rm
等 COMMANDs 可以针对某个 Container 使用 e.g:$ docker-compose logs app
如果 Node 项目比较大,依赖的模块较多,频繁改动,我们可以不需要创建 Node 项目本身的 Container,只需要创建启动其他服务即可。
其他工具
- Vargant - 也是一款环境构建工具,比 Docker 还早
Vargant 是一款不错的工具,可以帮助我们快速搭建各种服务环境,也能团队之间进行分享,现在基于它的工具链也越来越丰富,感兴趣也可以一试。
- 不用其他构建工具,我们自己搭
“自己动手,丰衣足食” - 不依赖环境构建工具,自己搭,时间精力充足的化,不妨一试,会收获更多。
最后
Docker 可玩的不仅仅如此,还可以打包、发布容器应用到线上,构建自己的 Paas(dokku) 服务等。
Docker Compose 也可以有更高级玩法。
Enjoy!
Relates
- https://docs.docker.com/kitematic/
- https://docs.docker.com/installation/mac/
- https://docs.docker.com/machine/install-machine/
- https://docs.docker.com/compose/install/
- https://github.com/mhart/alpine-node
- https://github.com/progrium/dokku