##DevOps HW4
#####build two images:
In task1/node0 fold, run docker build -t task1fileout .
In task1/node1 fold, run docker build -t task1filein .
#####run two container from those images:
docker run -d --name fileout task1fileout
docker run —it link fileout:fileout --name filein task1filein
vagrant init ubuntu/trusty64
uncomment config.vm.network "public_network"
in Vagrantfile to use Bridged network attachment type, then choose the first option.
curl -sSL https://get.docker.com/ | sh
sudo -i
\# curl -L https://github.com/docker/compose/releases/download/1.5.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
\# chmod +x /usr/local/bin/docker-compose
\# exit
In host1(ip: 10.139.56.55), run a redis container using
docker run -d --name redis crosbymichael/redis
And a redis_ambassador container, which map the host 6379 port to the container 6379 port:
docker run -d --link redis:redis --name redis_ambassador -p 6379:6379 svendowideit/ambassador
In host2, run another redis_ambassador container uisng:
docker run -d --name redis_ambassador --expose 6379 -e REDIS_PORT_6379_TCP=tcp://10.139.56.55:6379 svendowideit/ambassador
The command set the environment varible REDIS_PORT_6379_TCP to the ip and port of host1, which allow the redis_ambassador connect to the redis_ambassador on host1.
Then run a client container using:
docker run -i -t --rm --link redis_ambassador:redis relateiq/redis-cli
The client container will be linked to the redis_ambassador.
stop and rm all container using
sudo docker stop $(docker ps -a -q)
sudo docker rm $(docker ps -a -q)
in host1: write docker-compose.yml using two service redis and redis_ambassador to run those two containers.
redis:
image: crosbymichael/redis
container_name: "redis"
redis_ambassador:
image: svendowideit/ambassador
container_name: "redis_ambassador"
ports:
- "6379:6379"
links:
- redis:redis
In host2: write one service redis for the redis_ambassador container, another service client for the client container.
redis_ambassador:
container_name: "redis_ambassador"
image: svendowideit/ambassador
expose:
- "6379"
environment:
REDIS_PORT_6379_TCP: tcp://10.139.56.55:6379
client:
container_name: "client"
image: relateiq/redis-cli
links:
- redis_ambassador:redis
Run sudo docker-compose up -d
in host1,
then run
sudo docker-compose up -d redis_ambassador
sudo docker-compose run client
in host2.
run redis command in client:
SET key 'Hello!'
GET key
#####demos:
Client performs 'SET/GET'
Extend from Deployment and Advanced Docker workshop.
First start a private registry listening on port 5000:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
Then add hooks as below.
Post-commit hook will build a new image task3app and push it to local registry:
#!/bin/bash
docker rmi task3app
docker build -t task3app /Users/Huangying/Repositories/DevOps_HW4/task3/App
docker tag task3app localhost:5000/task3app:latest
docker push localhost:5000/task3app:latest
Post-receive hook will pull the task3app image, stop and delete old container, then restart it: (depends on the slice, change 'blue' and 'green' keyword accordingly)
#!/bin/sh
GIT_WORK_TREE=/Users/Huangying/Repositories/DevOps_HW4/task3/Deployment/deploy/blue-www/ git checkout -f
cd ..
cd blue-www
npm install
docker pull localhost:5000/task3app:latest
docker stop app
docker rm app
docker rmi localhost:5000/task3app:blue
docker tag localhost:5000/task3app:latest localhost:5000/task3app:blue
docker run -p 50100:8080 -d --name app localhost:5000/task3app:latest