Build service with_docker_in_90mins

Post on 21-Apr-2017

64.671 views 0 download

Transcript of Build service with_docker_in_90mins

Larry cai Charlie Zha zysimplelife AT gmail.com

Precondition You need finish/understand the basic docker

knowledge in http://www.slideshare.net/larrycai/learn-docker-in-90-minutes What is docker Command : pull/run/images/ps .. Interactive and daemon mode Build with Dockerfile

Build Service with Docker in 90 minutes2 05/02/23

Agenda Docker Revisit Exercise 1: Revisit Dockerfile Exercise 2: Manage data in container

(-v) Exercise 3: Manage data in container

from another Exercise 4: Link containers (--

name/--link) Exercise 5: Docker in Docker Exercise 6: Build service together

(haproxy+2 tomcat) Exercise 7: Docker Compose

Build Service with Docker in 90 minutes3 05/02/23

Docker Host

HAProxy (Load Balancer)

Tomcat(web1)

808080

8080

Web Service

Tomcat(web2)

8080

Client

Environment Preparation Boot2docker Installer (27M)

Contains latest docker already, fast Container persistence via disk automount on /var/lib/docker Add proxy /var/lib/boot2docker/profile if needed

$ sudo vi /var/lib/boot2docker/profile export http_proxy=<your proxy> $ sudo /etc/init.d/docker restart

$ docker -v User/Passwd: docker/tcuser

Build Service with Docker in 90 minutes4 05/02/23

http://boot2docker.io/

Docker Revisit Docker is an open-source engine that automates the

deployment of any application as a lightweight, portable, self-sufficient container that will run virtually anywhere.

Build Service with Docker in 90 minutes5 05/02/23

Based on LXC (Linux Container), easy to use.

Similar to VM as end-user with different features

Manage Data in Container Container as a Service and Data needs

persistency Load balancer, App, Database, Data storage

Share data from host by mount a Host Directory as a Data Volume VOLUME [ “/var/data” ] # in Dockerfile -v host:guest # in docker run

Share data from another Data-only container --volumes-from data-container

Backup/Restore Data-only container

Build Service with Docker in 90 minutes6 05/02/23

http://docs.docker.com/userguide/dockervolumes/ Img source from: http://centricconsulting.com/it-shops-will-leverage-their-knowledge-of-legos-to-build-enterprise-systems/

Exercise 1: Revisit Dockerfile Download code

$ git clone https://github.com/larrycai/docker-tomcat

Build Service $ vi Dockerfile

$ docker build .

Build Service with Docker in 90 minutes7 05/02/23

code https://github.com/larrycai/docker-tomcat

Exercise 2: Manage data in tomcat run larrycai/tomcat without volume

$ docker run –P –d larrycai/tomcat$ docker logs <id>

Share the local directory into it$ docker run -v `pwd`:/var/lib/tomcat7/webapps/ -P -d larrycai/tomcat$ docker ps

$ docker inspect <id>

Download sample.war $curl

https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war > sample.war

Visit the servicehttp://192.168.59.103:<port>/sample/

Build Service with Docker in 90 minutes8 05/02/23

code https://github.com/larrycai/docker-tomcatsample.war https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war

Exercise 3: Data container for tomcat 1. Create data container (Tips: use –e

https_proxy:<proxy>)$ docker run –v /tmp/webapps:/var/lib/tomcat7/webapps –-name webfarm jamtur01/fetcher https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war

2. Share data from another container$ docker run –-volumes-from webfarm –P –d larrycai/tomcat

3. Try to download new one Calendar.war to put into /tmp/wepapps

Build Service with Docker in 90 minutes9 05/02/23

Code https://github.com/jamtur01/dockerbook-code/blob/master/code/6/tomcat/fetcher/Dockerfile Calendar.war https://gwt-examples.googlecode.com/files/Calendar.war

Link the containers in docker Docker container has the same private

network Name the container and Link them to provide

the service outside and hide internal port/network !

Name the containerdocker run --name postgresql92 postgresql

Link container to the another container--link name:aliasdocker --link postgresql92:db app

Build Service with Docker in 90 minutes10 05/02/23

http://docs.docker.com/userguide/dockerlinks/ Img source from http://lethain.com/introduction-to-architecting-systems-for-scale/

Exercise 4: Link tomcat with haproxy Start tomcat with name web

$ docker run –-name tomcat –d larrycai/tomcat

Start another node with link alias$ docker run -it --link tomcat:web \ docker.cn/docker/busybox

Check environment and access it# env # check environment# cat /etc/hosts # check host # wget web:8080

Create another tomcat and Add HAProxy container$ docker run –-name tomcat1 –d larrycai/tomcat$ docker run –-name tomcat2 –d larrycai/tomcat$ docker run –-link tomcat1:back1 –-link tomcat2:back2 –it –P larrycai/haproxy bash# export CONFIG=/etc/haproxy/haproxy.cfg# echo " server back1 ${BACK1_PORT_8080_TCP_ADDR}:8080 maxconn 32" >> $CONFIG # echo " server back2 ${BACK2_PORT_8080_TCP_ADDR}:8080 maxconn 32" >> $CONFIG# haproxy -f /etc/haproxy/haproxy.cfg# ^P^Q

Access mapped 80/8080 port

Build Service with Docker in 90 minutes11 05/02/23

Docker in Docker Docker is client/Daemon via REMOTE API Docker in Docker can make environment

much clean Docker Host only environment All applications are in docker container Easy to deployment

Docker in Docker means install Docker Client into Containerhttps://get.docker.io/builds/Linux/x86_64/docker-latest

Build Service with Docker in 90 minutes12 05/02/23

Exercise 5: Docker in Docker Install docker client in docker container

Run docker command inside !!$ docker run –it -v /var/run/docker.sock:/docker.sock larrycai/docker bash# docker images

Point to Docker Host & Pass data inside # docker –H unix:///docker.sock images

or# export DOCKER_HOST=unix:///docker.sock# docker images

Build Service with Docker in 90 minutes13 05/02/23

Exercise 6: Build Service Together Do it all

Show the help Run the 2 tomcat container & Run the one haproxy

container over it. Show the generated port

$ docker run larrycai/craft

Build Service with Docker in 90 minutes14 05/02/23

Docker Host

HAProxy (Load Balancer)

Tomcat(web1)

808080

8080

Web Service

Tomcat(web2)

8080

Client

Craft(controll)

https://github.com/larrycai/docker-images/tree/master/craft /demo.sh/demo.sh

Docker Compose

Compose is a tool for defining and running complex applications with Docker.

With Compose, you define a multi-container application in a single file, then spin your application up in a single command which does everything that needs to be done to get it running.

https://docs.docker.com/compose/

Build Service with Docker in 90 minutes15 05/02/23

Install in boot2docker Boot2docker can’t install compose locally, But

we can use docker in docker to access it Pull image

$ docker pull dduportal/docker-compose:latest Set alias

alias compose='docker run --rm -ti \-v "$(pwd)":/app \-v /var/run/docker.sock:/var/run/docker.sock \dduportal/docker-compose:latest‘

https://registry.hub.docker.com/u/dduportal/docker-compose/

Build Service with Docker in 90 minutes16 05/02/23

Exercise 7(optional): Build Service With Docker Compose Create the compose file

$vi docker-compose.ymlweb1: image: larrycai/tomcat:latestweb2: image: larrycai/tomcat:latestproxy: image: larrycai/haproxy ports: - "80:8080" links: - web1:back1 - web2:back2

$compose up

Build Service with Docker in 90 minutes17 05/02/23

Recommend reading The Docker Book

http://dockerbook.com Docker Docs

https://docs.docker.com/

Build Service with Docker in 90 minutes18 05/02/23