Docker in Action
Simon Su @ Linker
https://goo.gl/q2ng7h
Prepare - start from a piece of code
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000 || process.env.PORT;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello Worldn');
});
server.listen(port, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
Run it...
Test it...
web.js
docker
See the local images
docker images
Search from Docker Hub
docker search node
docker run ...
docker run -it node bash
docker run -d node
docker run -d node node web.js
Run process and mount a folder
docker run -v `pwd`/web.js:/web.js 
-d node node web.js
Expose a port
docker run -it -p 3000:3000 node bash
Give it a name
docker run -d -p 5984:5984 
--name db couchdb
Link with another container
docker run -it --link db:db node bash
Attach to running instance
docker attach $id
Attach to running instance with “exec”
docker exec -it $id bash
See your process...
docker ps
docker ps -q
docker ps -a
docker ps -a -q
Stop & Start
docker stop $id
docker start $id
Kill container(s)
docker rm $id
docker rm -f $id
Kill process more easy
docker rm -f `docker ps -q`
docker rm -f `docker ps -a -q`
A complex start command
docker run -d -p 5984:5984 --name db couchdb
docker run -d --restart=always -l webserver 
--name webserver 
--link db:db 
-v `pwd`/web.js:/app/web.js 
-p 80:3000 
-e PORT=3000 
-w /app 
node node web.js
FROM node
RUN apt-get update -y && apt-get install curl -y
ADD /app /app
WORKDIR /app
CMD ["node","web.js"]
Dockerfile
Build the Dockerfile
docker build -t devops-node .
Run the new image
docker run -d -p 80:3000 devops-node
Test it… curl localhost
Push to Docker Hub
docker build -t myname/devops-node .
docker push myname/devops-node
Image maintain
docker rmi myname/devops-node
docker-compose
couchdb:
restart: always
image: couchdb
container_name: couchdb
volumes:
- /data/couchdb:/usr/local/var/lib/couchdb
environment:
- COUCHDB_USER=admin
- COUCHDB_PASSWORD=12345678
ports:
- "5984:5984"
webserver:
restart: always
image: devops-node
container_name: webserver
environment:
- PORT=3000
links:
- couchdb:couchdb
ports:
- "3000:3000"
Web Server
CouchDB
Port: 5984
Port: 3000
docker-compose.yml
Run default compose
docker-compose up
docker-compose up -d
Run single instance in compose file
docker-compose up -d couchdb
Check process
docker-compose ps
docker-compose -f file.yml ps
Delete compose process
docker-compose down
docker-compose -f file.yml down
docker-compose down couchdb
Something in advance...
● Docker swarm
● Kubernetes
● DCOS
● Monitoring
想學Swarm… 可以參考Evan大大的文章
http://www.evanlin.com/til-2016-07-13/

Docker in Action