Dockerfiles lindamente curtos

Fico feliz que tenha havido um movimento na engenharia de software para escrever pequenas coisas. Já vi isso nas linguagens que codifico: ruby, angularJS e agora docker.

Eu comparo o Docker ao LEGOS® da Internet, porque posso escrever pequenos blocos de construção com Dockerfiles; ser capaz de sobrepor essas imagens uma em cima da outra abre muitas possibilidades!

Imagens de linguagem

Posso escrever imagens de linguagem simples para fornecer uma base para a execução de processos nessas linguagens.

Meu Dockerfile rubi (com o Docker, nunca mais preciso me preocupar com conjuntos de joias!)

FROM debian:jessie
MAINTAINER
Nicholas Shook, nicholas.shook@gmail.com

# install ruby dependencies
RUN apt
-get update && apt-get install -y
build
-essential
zlib1g
-dev
libssl
-dev
libreadline6
-dev
libyaml
-dev

# install ruby from source and cleanup afterward (from murielsalvan/ruby)
ADD http
://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.1.tar.gz /tmp/
RUN cd
/tmp &&
tar
-xzf ruby-2.1.1.tar.gz &&
cd ruby
-2.1.1 &&
./configure &&
make
&&
make install
&&
cd
.. &&
rm
-rf ruby-2.1.1 &&
rm
-f ruby-2.1.1.tar.gz

Agora posso executar um comando como

docker run shicholas/ruby ruby -v
# ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]

Da mesma forma, a instalação de go é bastante simples

FROM debian:jessie
MAINTAINER
Nicholas Shook, nicholas.shook@gmail.com

RUN apt
-get update && apt-get install -y
golang

git


ENV GOPATH
/usr/lib/go/bin
RUN mkdir
-p "$GOPATH"
ENV PATH $GOPATH
:$PATH

Posso usar essa imagem como base para outra imagem que executa comandos go.

Imagens de banco de dados

Bancos de dados também são algo que posso usar em camadas para escrever pequenos Dockerfiles. Tomemos, por exemplo, redis, aqui está minha imagem base:

FROM debian:jessie
MAINTAINER
Nicholas Shook, nicholas.shook@gmail.com

RUN apt
-get update && apt-get install -y
wget

build
-essential

RUN wget http
://download.redis.io/redis-stable.tar.gz
RUN tar xvzf redis
-stable.tar.gz

E agora posso construir duas imagens em cima disso, uma para o servidor e outra para o cliente.

FROM shicholas/redis
MAINTAINER
Nicholas Shook, nicholas.shook@gmail.com

EXPOSE
6379
CMD cd redis
-stable && src/redis-server

e

FROM shicholas/redis
MAINTAINER
Nicholas Shook, nicholas.shook@gmail.com

EXPOSE
6380
CMD cd redis
-stable && src/redis-cli -h $REDIS_PORT_6379_TCP_ADDR

Agora posso executar esses comandos para configurar um redis-cli conversando com um redis-server

docker run -d --name=redis shicholas/redis-server  
docker run
--name=redis-cli --link=redis:redis -i -t shicholas/redis-cli

Eu nunca entrei em dev-ops até conhecer Docker. Ser capaz de escrever pequenos componentes, que posso rastrear no controle de origem, para lidar com todos os meus processos de servidor é realmente muito excitante.