Upload
jirayut-nimsaeng
View
287
Download
2
Embed Size (px)
DESCRIPTION
Docker Continuous Delivery Workshop slide in Docker Training & Workshop for DevOps and Continuous Delivery at OSS Festival 2014 Thailand on October 11, 2014
Citation preview
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