一、docker-compose的安装
官网参考: https://docs.docker.com/compose/
1、安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose #赋予可执行权限
2、安装完成后,docker-compose常用命令
docker-compose version
docker-compose up (创建并启动所有容器)
docker-compose up -d (后台启动)
docker-compose ps (查看服务进程)
docker-compose logs [SERVER_NAME]
docker-compose stop (停止所有服务)
docker-compose down (停止所有服务,并删除所有的容器、镜像、网络)
docker-compose down --valumes (停止所有服务,并删除所有容器、镜像、网络、卷)
docker-compose stop SERVICE_NAME (停止某个服务)
docker-compose start SERVICE_NAME (启动某个服务,它所depends_on的服务也会启动)
docker-compose run SERVICE_NAME COMMAND (在某个服务容器中执行一次性的命令)
docker-compose exec SERVICE_NAME --index=1 /bin/sh (进入容器内部)
二、入门案例nodejs+redis(官网中的例子是python+redis)
实现一个用户访问次数计数的功能:
redis作为后端存储,对于用户的每次返回使用incr自增1
nodejs作为前端web服务器,当用户每次访问nodejs的首页时,nodejs会调用后端redis api的incr自增1
为此,我们需要一个可以运行nodejs的主机和一个可以运行redis主机,我们分别拉取它们的docker镜像。
docker pull node:10-alpine
docker pull redis:4-alpine
mkdir -p composetest/myapp
cd composetest/myapp
vi app.js ,内容如下:
const redis = require('redis');
const client = redis.createClient( 6379, 'redis');
var http=require('http');
var app=http.createServer(function(req,res){
res.writeHead(200,{'content-type':'text/html;charset=utf-8'})
if(req.url!="/favicon.ico"){
client.incr('count',function(err,data){
console.log(data);
res.end(`这是你第{data}次访问`);
});
}
});
console.log('http server listen on 3000');
app.listen(3000);
在myapp目录中运行 node init 初始化一个node项目,再node install redis --save 将redis的nodejs模块安装到项目本地。
cd ..
vi myapp.dockerfile ,内容如下:
FROM node:10-alpine
ADD myapp myapp
EXPOSE 3000
CMD node /myapp/app.js
vi docker-compose.yml ,内容如下:
version: '3'
services:
myapp:
build:
context: .
dockerfile: myapp.dockerfile
ports:
- "3000:3000"
depends_on:
- redis
redis:
image: "redis:4-alpine"
最后,启动所有服务
docker-componse up
停止所有服务:
docker-compose stop (停止容器 ) 或者
docker-compose down (停止容器,删除容器、网络)