2. 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 09/16/16
3. 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 09/16/16
Docker HostDocker Host
HAProxy
(Load Balancer)
Tomcat
(web1)
Tomcat
(web1)
808080
8080
Web Service
Tomcat
(web2)
Tomcat
(web2)
8080
ClientClient
4. 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 09/16/16
http://boot2docker.io/
5. 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 09/16/16
Based on LXC (Linux
Container), easy to use.
Similar to VM as end-
user with different
features
6. 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 DataVolume
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 09/16/16
http://docs.docker.com/userguide/dockervolumes/
Img source from:
http://centricconsulting.com/it-shops-will-leverage-their-knowledge-
7. 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 09/16/16
code https://github.com/larrycai/docker-tomcat
8. 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 service
http://192.168.59.103:<port>/sample/
Build Service with Docker in 90 minutes8 09/16/16
code https://github.com/larrycai/docker-tomcat
sample.war https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war
9. 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 09/16/16
Code https://github.com/jamtur01/dockerbook-code/blob/master/code/6/tomcat/fetcher/Dockerfile
Calendar.war https://gwt-examples.googlecode.com/files/Calendar.war
10. 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 container
docker run --name postgresql92 postgresql
Link container to the another container
--link name:alias
docker --link postgresql92:db app
Build Service with Docker in 90 minutes10 09/16/16
http://docs.docker.com/userguide/dockerlinks/ Img source from http://lethain.com/introduction-to-
architecting-systems-for-scale/
11. 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 09/16/16
12. 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
Container
https://get.docker.io/builds/Linux/x86_64/docker-latest
Build Service with Docker in 90 minutes12 09/16/16
13. 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 09/16/16
14. 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 09/16/16
Docker HostDocker Host
HAProxy
(Load Balancer)
Tomcat
(web1)
Tomcat
(web1)
808080
8080
Web Service
Tomcat
(web2)
Tomcat
(web2)
8080
ClientClient
Craft
(controll)
https://github.com/larrycai/docker-images/tree/master/craft
/demo.sh/demo.sh
15. 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 09/16/16
16. 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 09/16/16
17. Exercise 7(optional): Build Service With Docker
Compose
Create the compose file
$vi docker-compose.yml
web1:
image: larrycai/tomcat:latest
web2:
image: larrycai/tomcat:latest
proxy:
image: larrycai/haproxy
ports:
- "80:8080"
links:
- web1:back1
- web2:back2
$compose up
Build Service with Docker in 90 minutes17 09/16/16
18. Recommend reading
The Docker Book
http://dockerbook.com
Docker Docs
https://docs.docker.com/
Build Service with Docker in 90 minutes18 09/16/16