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.