joomla continuous delivery with docker
TRANSCRIPT
Joomla Continuous Deliverywith Docker
Jirayut Nimsaeng (Dear)
Joomla Day Bangkok, Thailand 2014December 14, 2014 @ C.P. Tower
Release Build
Deploy Test
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
#whoami● Jirayut Nimsaeng (Dear)● Infrastructure Team Lead
at Proteus Technologies● ScrumMaster● Interested in Cloud and
Open Source Technology● Working with Docker since
version 0.6
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Experienced?● Develop and test on AppServ or XAMPP● Deploy with FileZilla● Git● Vagrant● Docker● Testing● Automated test● Automated deploy
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
WhyContinuous Delivery?
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Classic Release
Requirement
Design
Implementation
Testing
Release
Waterfall
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Risk
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Release Frequently
Split your product
Optimize business value
$$$
$Split time
January April
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
WhyDocker?
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Developer Problems
Developer Local Test QA
Production
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
What Developer needs
Production-like Quick Repeatable
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker can● Deploy reliably & consistently● Everything will be exactly the same
– Distros– Software versions– Library dependencies
● If it works locally, it will work everywhere
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker can● Deploy efficiently
– Laptop can run 10-100 containers easily– Server can run 10-1000 containers
● Containers can run at native speeds– http://www.slideshare.net/BodenRussell/kvm-and-
docker-lxc-benchmarking-with-openstack
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker CPU benchmark
0
2
4
6
8
10
12
14
Docker / KVM: Compute Node Steady-State CPU (Segment Overlay)
docker-usrdocker-syskvm-usrkvm-sys
Time: KVM(95s - 307s) Docker(31s – 243s)
CPU Usage In Percent
Docker Averages
– 0.2
– 0.03
KVM Averages
– 1.91
– 0.36
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker Memory benchmark
0.00E+00
1.00E+09
2.00E+09
3.00E+09
4.00E+09
5.00E+09
6.00E+09
7.00E+09
Docker / KVM: Compute Node Used Memory (Overlay)
kvmdocker
Axis Title
Memory Used
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker Memory benchmark
MEMCPY DUMB MCBLOCK0
2000
4000
6000
8000
10000
12000
14000
3823.34393.3
12881.61
3813.38
4395.92
12905.68
3428.95 3461.59
7223.23
Memory Benchmark Performance
Bare Metal (MiB/s)docker (MiB/s)KVM (MiB/s)
Memory Test
MiB/s
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker I/O benchmark
1 2 4 8 16 32 640
200
400
600
800
1000
1200
1400
1600
Sysbench Synchronous File I/O Random Read/Write @ R/W Ratio of 1.50
dockerKVM
Threads
Total Transferred In Kb/sec
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
What is Docker?● Platform to help code, test and deploy
applications● Combine with
– Lightweight container virtualization– Work flows– Tooling
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Containers vs. VMs
Server
Host OS
Hypervisor
GuestOS
GuestOS
GuestOS
Bins/Libs
AppA1
Bins/Libs
AppB1
Bins/Libs
AppA2
VM
Server
Host OS
Bins/Libs Bins/Libs
App A
1
App A
2
App B
1
App B
2
App B
3
Docker daem
o n
Container
Containers are isolated,but share OS and, whereappropriate, bins/libraries
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Dockerfile● Dockerfile is instructions to build Docker image
– How to run commands– Add files or directories– Create environment variables– What process to run when launching container
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Sample DockerfileFROM ubuntu:14.04
MAINTAINER Jirayut Nimsaeng <w [at] winginfotech.net>
ADD build-files /build-files
RUN apt-get update
RUN apt-get install -y openssh-server vim tmux rsync byobu
RUN mkdir /var/run/sshd
RUN sed -i 's/required pam_loginuid.so/optional pam_loginuid.so/g' /etc/pam.d/sshd
CMD /start.sh
EXPOSE 22
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker life cycle
App ADocker Container
DockerRegistry
PushCommit
Host
App A
1 Contai ner
Pull
Docker Engine
App A
2 Contai ner
App A
Image
App A
Image
UbuntuBase Docker
ApacheDocker Container
Apache + PHPDocker Image
Bins/Libs
Apache
Bins/Libs
Apache
ChangeCommit
App A
ΔΔ
Change
App A
Apache
Bins/Libs
App ADocker image
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker workflows
DockerfileFor App A
Host 1 (Dev/Build Server)
Docker Engine
Image A
pp AIm
age App A
DockerRegistry
Host 2 (Container Server)
1.Build
2.Push
3.Pull
4.Run
Docker Engine
Image A
pp A
Contain er A
pp A P
rodu ction
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker Use Cases● Docker as Development Environment
Host
Virtualbox VM
Docker DaemonSSH
20352022
22
Web Server
boot2docker-vm
80 1024+
Docker Containers
Database
2035
Hos
t-on
ly
80
80
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Docker Use Cases● Docker for Continuous Delivery
Jirayut NimsaengJoomla Continuous Delivery with Docker
December 14, 2014 @ C.P. Tower
Continuous Delivery with DockerDockerRegistry
DBBackupServer
GitlabServer
Gitlab CIServer
Gitlab CI Runner
Docker Engine
Test/Prod Server
Docker Engine
MySQLDockerfile
JoomlaDockerfile
MyS
QL Im
ageM
ySQ
L Image
Joomla Im
ageJoom
la Image
Joomla C
ontainer
MyS
QL C
ontainer
1. Push Code
2. Trigger
3. Trigger
4. Get
5. Build5.1. Get
6. Push Joomla Docker Image
7. Build7.1. Import
8. Push MySQL Docker Image
9. Trigger
10. PullDocker Image
12. Acceptance Test3.5. Unit Test
11. Deploy