13
LXC Linux Containers - O Docker vai mudar tudo! O Docker é um motor de código aberto que automatiza a implementação de qualquer aplicação encapsulando-a num contentor portátil, auto-suficiente e leve, que será executado em praticamente qualquer ambiente de O/S e infra-estruturas de Clouds públicas e privadas. O Docker, atualmente usa o sistema de LinuX Containers (LXC), os quais são executados no mesmo sistema operativo em que reside o Docker. Isso permite que este partilhe os recursos do sistema operativo base em que reside. Usa o sistema de ficheiros AuFS e automáticamente gere as configurações de rede nos respectivos containers. O AuFS é um sistema de ficheiros dispostos em camadas. Desta forma poderá ter uma única parte só de leitura e outra de escrita, ou mesclar os dois modos. Assim, pode ter as partes comuns do sistema operativo como somente de leitura tal como os dados que necessitam ser partilhados entre todos os seus recipientes, e, de seguida, dar a cada um o seu próprio recipiente de montagem para a escrita. Então, digamos que você tem uma imagem de recipiente que é de 1GB de tamanho. Se, ao contrário quiser usar uma máquina virtual completa, iria precisa ter 1GB vezes x número de VMs que você deseja. Com LXC e AuFS pode partilhar a maior parte do 1GB e se tem por exemplo 1000 contentores, ainda pode ter apenas um pouco mais de 1 GB de espaço para o sistema operativo dos recipientes (containers), assumindo todos eles são a imagem do mesmo sistema operativo em execução. Um sistema virtualizado completo recebe o seu próprio conjunto de recursos que lhe são atribuídos, e faz a partilha mínima. Ganha em mais isolamento, mas é muito mais pesado (requer muito mais recursos). Com LXC pode ter menos isolamento, mas como os containers são mais leves e exigem menos recursos, pode-se facilmente executar 1000 recipientes /contentores num único host, e num piscar de olhos, como veremos a seguir. Tente fazer isso com Xen, para não falar no Hyper-V?!! Se não tiver ao seu dispor um servidor altamente potente e caro, tal não irá ser possível. LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI ! 1

O docker vai mudar tudo na sua infra estrutura-ti

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: O docker vai mudar tudo na sua infra estrutura-ti

LXC Linux Containers - O Docker vai mudar tudo!

O Docker é um motor de código aberto que automatiza aimplementação de qualquer aplicação encapsulando-anum contentor portátil, auto-suficiente e leve, que seráexecutado em praticamente qualquer ambiente de O/S einfra-estruturas de Clouds públicas e privadas.

O Docker, atualmente usa o sistema de LinuX Containers(LXC), os quais são executados no mesmo sistemaoperativo em que reside o Docker. Isso permite que estepartilhe os recursos do sistema operativo base em quereside. Usa o sistema de ficheiros AuFS eautomáticamente gere as configurações de rede nosrespectivos containers.

O AuFS é um sistema de ficheiros dispostos em camadas.Desta forma poderá ter uma única parte só de leitura eoutra de escrita, ou mesclar os dois modos. Assim, podeter as partes comuns do sistema operativo comosomente de leitura tal como os dados que necessitam serpartilhados entre todos os seus recipientes, e, deseguida, dar a cada um o seu próprio recipiente demontagem para a escrita.

Então, digamos que você tem uma imagem de recipienteque é de 1GB de tamanho. Se, ao contrário quiser usar uma máquina virtual completa, iria precisa ter 1GB vezes xnúmero de VMs que você deseja. Com LXC e AuFS pode partilhar a maior parte do 1GB e se tem por exemplo 1000contentores, ainda pode ter apenas um pouco mais de 1 GB de espaço para o sistema operativo dos recipientes(containers), assumindo todos eles são a imagem do mesmo sistema operativo em execução.

Um sistema virtualizado completo recebe o seu próprio conjunto de recursos que lhe são atribuídos, e faz apartilha mínima. Ganha em mais isolamento, mas é muito mais pesado (requer muito mais recursos).

Com LXC pode ter menos isolamento, mas como os containers são mais leves e exigem menos recursos, pode-sefacilmente executar 1000 recipientes /contentores num único host, e num piscar de olhos, como veremos aseguir. Tente fazer isso com Xen, para não falar no Hyper-V?!! Se não tiver ao seu dispor um servidor altamentepotente e caro, tal não irá ser possível.

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

1

www.princexml.com
Prince - Personal Edition
This document was created with Prince, a great way of getting web content onto paper.
Page 2: O docker vai mudar tudo na sua infra estrutura-ti

Um sistema virtualizado completo geralmente leva alguns minutos para começar, enquanto os recipientes LXClevam apenas alguns segundos, e às vezes até menos deum segundo.

Há prós e contras de cada tipo de sistema virtualizado.Se quer isolamento total com recursos garantidos, emseguida, uma VM integral é a escolha perfeita. Mas sequiser apenas para isolar processos entre si e desejaexecutar uma tonelada deles e num único host, físico ouvirtual, com um tamanho razoável, então os LinuxContainers ( LXC ) pode ser o caminho certo e algo queestá a ser adoptado a uma velocidade enorme pelaGoogle, Amazon AWS, PayPal, FaceBook, Azure, e por aífora.. (do original). Ou assista a uma apresentação aqui.

(Para mais informações sobre o Docker consultar aqui.

Passando à parte mais prática !

Vamos construir um contentor com o Docker, que armazenará um servidor web e aplicação OwnCloud (soluçãoopen-source para a cloud privada, similar ao Dropbox) e com suporte de base de dados MySql. E pronto aexecutar! Tudo num único contentor portátil e criado automáticamente através da execução de um script ouDockerfile. Vamos a isso !!?

Partindo do pressuposto de que dispõe de um host, fisico ou virtual em Linux / Unix, o primeiro passo será ainstalação do executivo Docker.io.

As instruções para esta instalação podem ser encontradas na home page do Docker.

Aqui vamos assumir que dispomos de um host virtual de base Debian ou Ubuntu, para facilitar o exemplo.

1. Instalação do Docker (Ubuntu 13.04) - Para outras versões de Ubuntu consultar em Docker!

# install the backported kernel

sudo apt-get update

sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring# reboot

sudo reboot

Preparar repositório do docker e instalar :

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

2

Page 3: O docker vai mudar tudo na sua infra estrutura-ti

# sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\> /etc/apt/sources.list.d/docker.list"

# sudo apt-get update

# sudo apt-get install lxc-docker

(instalação completa - fácil não!? )

2. Criação de um container com o owncloud e respectiva configuração

# mkdir OwnCloud

# cd OwnCloud

# mkdir resources

# mkdir mysqldata

# vi Dockerfile

FROM ubuntu:quantal

#

MAINTAINER Francisco Goncalves@SofteLabs,inc "[email protected]"

#

#RUN echo "deb http://archive.ubuntu.com/ubuntu raring main universe" >> /etc/apt/sources.list

RUN echo 'deb http://download.opensuse.org/reposit...xUbuntu_13.04/ /' >> /etc/apt/sources.list.d/owncloud.list

#

RUN sudo apt-get install -y wget

RUN wget http://download.opensuse.org/reposit...04/Release.key

RUN apt-key add - < Release.key

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

3

Page 4: O docker vai mudar tudo na sua infra estrutura-ti

RUN apt-get -y update

#

RUN dpkg-divert --local --rename --add /sbin/initctl

RUN ln -s /bin/true /sbin/initctl

RUN locale-gen pt_PT pt_PT.UTF-8

RUN dpkg-reconfigure locales

#

RUN apt-get install -y owncloud owncloud-client smbclient curl libcurl3 php5-mysql php5-curlbzip2 wget vim openssl ssl-cert openssh-server openssh-client

RUN echo "mysql-server-5.5 mysql-server/root_password password donuts" |debconf-set-selections

RUN echo "mysql-server-5.5 mysql-server/root_password_again password donuts" |debconf-set-selections

RUN echo "mysql-server-5.5 mysql-server/root_password seen true" | debconf-set-selections

RUN echo "mysql-server-5.5 mysql-server/root_password_again seen true" |debconf-set-selections

RUN apt-get -y install mysql-server

#

RUN wget http://ftp.us.debian.org/debian/pool....1-1_amd64.deb

RUN dpkg -i sharutils_4.11.1-1_amd64.deb

ADD resources/cfgmysql.sh /tmp/cfgmysql.sh

RUN chmod +x /tmp/cfgmysql.sh

RUN /tmp/cfgmysql.sh

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

4

Page 5: O docker vai mudar tudo na sua infra estrutura-ti

#ADD resources/sshd_config1 /etc/ssh/sshd_config

#ADD resources/authorized_keys /root/.ssh/authorized_keys

#

ADD resources/001-owncloud.conf /etc/apache2/sites-available/

ADD resources/start.sh /start.sh

RUN chmod +x /start.sh

RUN /start.sh

#

ADD resources/passuser.txt /opt/passuser.txt

#RUN useradd demo

#RUN passwd demo < /opt/passuser.txt

RUN passwd root < /opt/passuser.txt

#

ADD resources/startup.sh /opt/startup.sh

RUN chmod +x /opt/startup.sh

EXPOSE 3306

EXPOSE 22

EXPOSE 443

#CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

CMD ["/bin/bash", "/opt/startup.sh"]

#

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

5

Page 6: O docker vai mudar tudo na sua infra estrutura-ti

Criar os seguintes scripts invocados pelo Dockerfile acima :

# cd resources

#

# vi start.sh

#!/bin/bash

#

# Prepare ssh server

#

#mkdir -p /var/run/sshd ; chmod -rx /var/run/sshd

# http://stackoverflow.com/questions/2...g-kexinit-sent

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

# Bad security, add a user and sudo instead!

sed -ri 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config

# http://stackoverflow.com/questions/1...sshd-on-docker

sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config

#sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config

service ssh restart

#

# Set apoache2 with SSL KEY

#

mkdir /etc/apache2/ssl

#

chown -R www-data:www-data /var/www/owncloud

ln -s /etc/apache2/sites-available/001-owncloud.conf /etc/apache2/sites-enabled/

a2ensite 001-owncloud.conf

a2enmod rewrite ssl

2enmod ssl

#

#

ulimit -n 826214 826214

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

6

Page 7: O docker vai mudar tudo na sua infra estrutura-ti

#

if [ ! -f /etc/apache2/ssl/server.key ]; then

mkdir -p /etc/apache2/ssl

KEY=/etc/apache2/ssl/server.key

DOMAIN=$(hostname)

export PASSPHRASE=$(head -c 128 /dev/urandom | uuencode - | grep -v "^end" | tr "\n""d")

SUBJ="

C=PT

ST=Portugal

O=eLabs

localityName=Lisbon

commonName=$DOMAIN

organizationalUnitName=

[email protected]

"

openssl genrsa -des3 -out /etc/apache2/ssl/server.key -passout env:PASSPHRASE 2048

openssl req -new -batch -subj "$(echo -n "$SUBJ" | tr "\n" "/")" -key $KEY -out /tmp/$DOMAIN.csr -passin env:PASSPHRASE

cp $KEY $KEY.orig

openssl rsa -in $KEY.orig -out $KEY -passin env:PASSPHRASE

openssl x509 -req -days 365 -in /tmp/$DOMAIN.csr -signkey $KEY -out /etc/apache2/ssl/server.crt

fi

HOSTLINE=$(echo $(ip -f inet addr show eth0 | grep 'inet' | awk '{ print $2 }' | cut -d/ -f1)$(hostname) $(hostname -s))

#echo $HOSTLINE >> /etc/hosts

#

# vi startup.sh

#

#!/bin/bash

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

7

Page 8: O docker vai mudar tudo na sua infra estrutura-ti

#

if [ ! -f /var/lib/mysql/ibdata1 ]; then

mysql_install_db

/usr/bin/mysqld_safe &

sleep 10s

# echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('owncloud');" | mysql -uroot-pdonuts

echo "create database owncloud;" | mysql

sleep 5s

echo "CREATE USER 'admin'@'localhost' IDENTIFIED BY 'donuts';" | mysql

sleep 5s

echo "GRANT ALL ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;" | mysql

sleep 5s

echo "GRANT ALL ON *.* TO 'admin'@'%' IDENTIFIED BY 'donuts' WITH GRANT OPTION;" |mysql

sleep 5s

echo "CREATE USER 'owncloud'@'localhost' IDENTIFIED BY 'owncloud'" | mysql

sleep 5s

echo "SET PASSWORD FOR 'owncloud'@'localhost' = PASSWORD('owncloud');" | mysql

sleep 5s

echo "GRANT ALL ON *.* TO 'owncloud'@'localhost' WITH GRANT OPTION; FLUSHPRIVILEGES;" | mysql

killall mysqld

sleep 5s

echo "Initial MySql (OutSide the Container) Setup & OwnCloud Db creation Sucessfull"

fi

/usr/bin/mysqld_safe &

echo "MySql is up and running "

#

service ssh restart

#

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

8

Page 9: O docker vai mudar tudo na sua infra estrutura-ti

#/usr/sbin/sshd -D

#

echo "ssh started ok.."

#

ping -c5 localhost

#

ulimit -n 826214 826214

#

/usr/sbin/apache2ctl -D FOREGROUND

#

echo "Apache2 Up and running "

echo " "

#

echo "Linux Docker Container is up and running "

#

# vi 001-owncloud.conf

ServerName localhost

ServerAdmin webmaster@localhost

<Directory /var/www/owncloud>

Options Indexes FollowSymLinks MultiViews

AllowOverride All

Order allow,deny

allow from all

</Directory>

<VirtualHost *:443>

DocumentRoot /var/www/owncloud

<Directory /var/www/owncloud/>

Options Indexes FollowSymLinks MultiViews

AllowOverride All

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

9

Page 10: O docker vai mudar tudo na sua infra estrutura-ti

Order allow,deny

allow from all

</Directory>

SSLEngine on

SSLCertificateFile /etc/apache2/ssl/server.crt

SSLCertificateKeyFile /etc/apache2/ssl/server.key

</VirtualHost>

# vi cfgmysql.sh

#!/bin/bash

sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf

#

/usr/bin/mysqld_safe &

sleep 5s

#mysqadmin shutdown -u root -pdonuts

#

# vi passuser.txt

( modificar a password da root para este container )

password

password

Agora a criação do Container que irá albergar o OwnCloud…

# cd OwnCloud

# docker build -t Demo/OwnCloud6s .

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

10

Page 11: O docker vai mudar tudo na sua infra estrutura-ti

Após terminar a execução deste script contido no Dockerfile que acima editou deverá ter sido criado umcontainer.

Para visualizar a imagem do container agora criado use o comando:

# docker images

Para “correr” o container e disponibilizar o Woncloud, usar o comando que se descreve e (talvez!) criando umscript conforme se segue :

dockid=$(docker run -d -p 446:443 -p 3400:3306 -p 100:22 -privileged -v /Docker/owncloud6r-mysql-docker/mysqldata:/var/lib/mysql -h "owncloud6r.softelabs.com" Demo/OwnCloud6s /opt/startup.sh)

#

echo "Instance id = $dockid "

sleep 60

#

docker logs $dockid

#

docker ps

Pode ver todos os containers em execução através do comando:

# docker ps

Pode remover parar ou iniciar um container:

# docker start id-container

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

11

Page 12: O docker vai mudar tudo na sua infra estrutura-ti

#docker stop id_container

Ou remover um container:

# docker rmi id-container

Após instalado e “running” o container do Owncloud, bastará que no seu Browser use o url no formato que sesegue:

https://your-ipaddress:446

Agora é só criar um novo utilizador com mysql e não esqueça que o user da base de dados é owncloud tal como apassword.

E boa sorte !

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

12

Page 13: O docker vai mudar tudo na sua infra estrutura-ti

Francisco Gonçalves

IT Architect & Open-Source Solutions Advisor

LXC Linux Containers - O Docker vai mesmo mudar tudo na sua infra-estrutura de TI !

13