Post on 21-Apr-2017
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