Post on 02-Dec-2014
description
Continuous DeliveryWorkshop
Jirayut Nimsaeng (Dear)
Docker for DevOps and Continuous Delivery WorkshopOctober 11, 2014 @ OSS Festival 2014
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Docker installation● Boot2docker for Windows & Mac OS X
– http://boot2docker.io– Ready to run Docker with
● VirtualBox 4.3.14 (latest version is 4.3.16)● Docker latest version (1.2.0)● Lightweight Linux distribution● Boot in 5-10s
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Docker installation● Ubuntu based
– https://docs.docker.com/installation/ubuntulinux/– Recommend Ubuntu 14.04 64-bit LTS– curl -sSL https://get.docker.io/ubuntu/ | sudo sh
● Redhat based– https://docs.docker.com/installation/centos/– Recommend CentOS 7 – EPEL repository enabled first– sudo yum install docker-io
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Docker architecture
Host
Docker Daemon
Web Server 80 xxxx
Docker Containers
Database
Docker Client
socket
3306
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Boot2docker architecture
Host
Virtualbox VM
Docker DaemonSSH
20352022
22
Web Server
boot2docker-vm
80 1024+
Docker Containers
Database
2035
Hos
t-on
ly
80
80
3306
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
VirtualBox port forward
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Run first Docker container● docker images● docker pull 10.1.3.227:5000/ubuntu:latest● docker images● docker run 10.1.3.227:5000/ubuntu echo “Hello
World”● docker run -i -t 10.1.3.227:5000/ubuntu /bin/bash
– whoami– hostname– cat /etc/*release*– exit
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Docker basic operations● docker search [name]● docker pull [name[:tag]]
– docker pull centos– docker pull ubuntu:latest
● docker run [-itd] [name[:tag]] [command]● docker ps● docker ps -a● docker rm [name or cid]● docker rm [part of cid]● docker images● docker rmi [name:tag or iid]
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Image name and tag● If you do docker command without tag, it will
pull Docker image with every tags● docker pull 10.1.3.227:5000/ubuntu:12.04● docker images● docker pull 10.1.3.227:5000/ubuntu● docker images
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Create your first image● docker run -i -t 10.1.3.227:5000/ubuntu /bin/bash
– vim– echo 'Acquire::http::Proxy "http://10.1.3.227:3142";' > /etc/apt/apt.conf.d/11proxy– apt-get update– apt-get install vim– touch vim-installed– ls– exit
● docker ps -a● docker commit [cid] ubuntu-vim● docker images● docker run -i -t ubuntu-vim /bin/bash
– ls
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Docker registry operation● Register your account at https://hub.docker.com● You can pull without logging-in● docker login● docker push ubuntu-vim● docker tag ubuntu-vim winggundamth/ubuntu-vim● docker images● docker push winggundamth/ubuntu-vim● docker pull xxx/ubuntu-vim
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Expose ports● ifconfig eth1● docker run -i -t -p 80:80 ubuntu-vim /bin/bash
– apt-get install apache2– service apache2 start– Go to browser: http://ipaddress– exit
● Commit your apache2 container as ubuntu-apache2 with tag 14.04 and latest
● Clear your stopped containers
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Run as daemon & expose port option● docker run ubuntu-apache2● docker run -d ubuntu-apache2 service apache2 start● docker run -d ubuntu-apache2 apachectl
-DFOREGROUND● docker run -d -p 80:80 ubuntu-apache2 apachectl
-DFOREGROUND● docker run -d -p 8880:80 ubuntu-apache2 apachectl
-DFOREGROUND● docker run -d -p 80 ubuntu-apache2 apachectl
-DFOREGROUND● docker ps
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Docker container operation● docker ps● docker stop [container id or name]● docker start [container id or name]● docker kill [container id or name]● docker logs [container id or name]● docker diff [container id or name]● docker top [container id or name]● docker inspect [container id or name]
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Dockerfile● Create filename Dockerfile● Dockerfile Syntax
– FROM - defines base image– MAINTAIN – author information– RUN – executes command– ENV – sets environment– EXPOSE – expose a port– ADD – add local file– CMD – default command to execute
● Execute Dockerfile with command docker build● Docker will keep cache when execute each command above
– Use docker build -–no-cache if you want to build without cache
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
SSH Image to DockerfileFROM ubuntu-vimRUN apt-get install -y openssh-serverRUN sed -i 's/required pam_loginuid.so/optional pam_loginuid.so/g' /etc/pam.d/sshdRUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_configRUN mkdir /var/run/sshdRUN echo "root:test1234" | chpasswdCMD /usr/sbin/sshd -DEXPOSE 22
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Build & run image from Dockerfile● vi Dockerfile● docker build -t ubuntu-ssh .● docker images● docker run -d -p 2230:22 ubuntu-ssh● docker ps● ssh -p 2230 root@localhost
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Let's deploy WordPress
Host
Docker Daemon
ApacheWordpress
80 80
Docker Containers
MySQL3306
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Build MySQLFROM ubuntu-vimENV DEBIAN_FRONTEND noninteractiveRUN echo 'mysql-server mysql-server/root_password password test1234' | debconf-set-selectionsRUN echo 'mysql-server mysql-server/root_password_again password test1234' | debconf-set-selectionsRUN apt-get install -y mysql-serverRUN sed -i 's/bind-address/#bind-address/g' /etc/mysql/my.cnfRUN service mysql start && \ mysql -u root -ptest1234 -e "CREATE DATABASE wordpress CHARACTER SET utf8 COLLATE utf8_general_ci;" && \ mysql -u root -ptest1234 -e "GRANT ALL PRIVILEGES ON wptest.* TO wptest@'%' IDENTIFIED BY 'wptest' WITH GRANT OPTION;"CMD /usr/bin/mysqld_safeEXPOSE 3306
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Build ApacheFROM ubuntu-vimENV DEBIAN_FRONTEND noninteractiveRUN apt-get install -y libapache2-mod-php5 php5 php5-mysql php5-curlADD wordpress /var/www/wordpressADD default /etc/apache2/sites-available/000-default.confRUN a2enmod rewriteRUN chown -R www-data:www-data /var/wwwCMD apachectl -DFOREGROUNDEXPOSE 80
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Apache Configuration<VirtualHost *:80>
DocumentRoot /var/www/wordpress
<Directory /var/www/wordpress>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Wordpress Configuration● wget http://10.1.3.227:8000/wordpress-
4.0.tar.gz● tar xvfz wordpress-4.0.tar.gz
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Run it● docker run -d -p 3306:3306 --name mysql
ubuntu-mysql● docker run -d -p 80:80 ubuntu-wp● Go to http://192.168.59.103
– Use 172.17.42.1 as database host ip
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Continuous Delivery with Docker
MySQLDockerfile
Host 1 (Dev/Build Server)
Docker Engine
MyS
QL D
ata Image
MyS
QL D
ata Image
DockerRegistry
Host 2 (Container Server)
1.Build
3.Push
7.Pull
8.Run
Docker Engine
MyS
QL D
ata Image
Contain er M
ySQ
L Dat a
BackupServer
2.Get DB Backup
WordpressDockerfile4.Build
RepositoryServer
5.Get Wordpress Code
Wordpr ess Im
a geW
ordpr ess Ima ge
6.PushW
ordpr ess Ima ge
Contain er W
or dpress
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Build MySQLFROM ubuntu-vimENV DEBIAN_FRONTEND noninteractiveRUN echo 'mysql-server mysql-server/root_password password test1234' | debconf-set-selectionsRUN echo 'mysql-server mysql-server/root_password_again password test1234' | debconf-set-selectionsRUN apt-get install -y mysql-server wgetRUN wget http://10.1.3.227:8000/wptest.sqlRUN sed -i 's/bind-address/#bind-address/g' /etc/mysql/my.cnfRUN service mysql start && \ mysql -u root -ptest1234 -e "CREATE DATABASE wptest CHARACTER SET utf8 COLLATE utf8_general_ci;" && \ mysql -u root -ptest1234 -e "GRANT ALL PRIVILEGES ON wptest.* TO wptest@'%' IDENTIFIED BY 'wptest' WITH GRANT OPTION;" mysql -u root -ptest1234 wptest < wptest.sql && \ service mysql stopCMD /usr/bin/mysqld_safeEXPOSE 3306
Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop
October 11, 2014 @ OSS Festival 2014
Build ApacheFROM ubuntu-vimENV DEBIAN_FRONTEND noninteractiveRUN apt-get install -y libapache2-mod-php5 php5 php5-mysql php5-curlADD wordpress /var/www/wordpressADD default /etc/apache2/sites-available/000-default.confRUN a2enmod rewriteRUN chown -R www-data:www-data /var/wwwCMD apachectl -DFOREGROUNDEXPOSE 80