docker continuous delivery workshop

26
Continuous Delivery Workshop Jirayut Nimsaeng (Dear) Docker for DevOps and Continuous Delivery Workshop October 11, 2014 @ OSS Festival 2014

Upload: jirayut-nimsaeng

Post on 02-Dec-2014

286 views

Category:

Technology


2 download

DESCRIPTION

Docker Continuous Delivery Workshop slide in Docker Training & Workshop for DevOps and Continuous Delivery at OSS Festival 2014 Thailand on October 11, 2014

TRANSCRIPT

Page 1: Docker Continuous Delivery Workshop

Continuous DeliveryWorkshop

Jirayut Nimsaeng (Dear)

Docker for DevOps and Continuous Delivery WorkshopOctober 11, 2014 @ OSS Festival 2014

Page 2: Docker Continuous Delivery Workshop

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

Page 3: Docker Continuous Delivery Workshop

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

Page 4: Docker Continuous Delivery Workshop

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

Page 5: Docker Continuous Delivery Workshop

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

Page 6: Docker Continuous Delivery Workshop

Jirayut NimsaengDocker for DevOps and Continuous Delivery Workshop

October 11, 2014 @ OSS Festival 2014

VirtualBox port forward

Page 7: Docker Continuous Delivery Workshop

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

Page 8: Docker Continuous Delivery Workshop

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]

Page 9: Docker Continuous Delivery Workshop

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

Page 10: Docker Continuous Delivery Workshop

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

Page 11: Docker Continuous Delivery Workshop

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

Page 12: Docker Continuous Delivery Workshop

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

Page 13: Docker Continuous Delivery Workshop

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

Page 14: Docker Continuous Delivery Workshop

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]

Page 15: Docker Continuous Delivery Workshop

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

Page 16: Docker Continuous Delivery Workshop

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

Page 17: Docker Continuous Delivery Workshop

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

Page 18: Docker Continuous Delivery Workshop

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

Page 19: Docker Continuous Delivery Workshop

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

Page 20: Docker Continuous Delivery Workshop

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

Page 21: Docker Continuous Delivery Workshop

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>

Page 22: Docker Continuous Delivery Workshop

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

Page 23: Docker Continuous Delivery Workshop

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

Page 24: Docker Continuous Delivery Workshop

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

Page 25: Docker Continuous Delivery Workshop

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

Page 26: Docker Continuous Delivery Workshop

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