Docker in Action

30
Docker in Action Simon Su @ Linker https://goo.gl/q2ng7h

Transcript of Docker in Action

Docker in ActionSimon 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 World\n');});

server.listen(port, () => { console.log(`Server running at http://${hostname}:${port}/`);});

Run it...

Test it...

web.js

docker

See the local imagesdocker images

Search from Docker Hubdocker 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 folderdocker run -v `pwd`/web.js:/web.js \

-d node node web.js

Expose a portdocker run -it -p 3000:3000 node bash

Give it a namedocker run -d -p 5984:5984 \

--name db couchdb

Link with another containerdocker run -it --link db:db node bash

Attach to running instancedocker attach $id

Attach to running instance with “exec”docker exec -it $id bash

See your process...docker ps

docker ps -qdocker ps -a

docker ps -a -q

Stop & Startdocker stop $iddocker start $id

Kill container(s)docker rm $id

docker rm -f $id

Kill process more easydocker rm -f `docker ps -q`

docker rm -f `docker ps -a -q`

A complex start commanddocker run -d -p 5984:5984 --name db couchdbdocker 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 -yADD /app /appWORKDIR /app

CMD ["node","web.js"]

Dockerfile

Build the Dockerfiledocker build -t devops-node .

Run the new imagedocker run -d -p 80:3000 devops-node

Test it… curl localhost

Push to Docker Hubdocker build -t myname/devops-node .

docker push myname/devops-node

Image maintaindocker 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 composedocker-compose up

docker-compose up -d

Run single instance in compose filedocker-compose up -d couchdb

Check processdocker-compose ps

docker-compose -f file.yml ps

Delete compose processdocker-compose down

docker-compose -f file.yml downdocker-compose down couchdb

Something in advance...

● Docker swarm● Kubernetes

● DCOS● Monitoring

想學Swarm… 可以參考Evan大大的文章http://www.evanlin.com/til-2016-07-13/