O Docker é um plataforma (aberta) que permite que você crie, rode e faça deploy de containers. De maneira simples, um container é o empacotamento da sua aplicação mais as dependências dela.
Por exemplo, se você quiser utilizar um Container que possua todas as dependências do Ruby On Rails já instalados sem que você instale essas dependências diretamente na sua máquina, você pode fazer isso com poucos comandos de maneira completamente isolada do seu sistema. Você também pode criar suas próprias imagens personalizadas para gerar seus containers e depois distribuí-las para os outros programadores da sua equipe poderem trabalhar em um ambiente idêntico ao seu, ou seja, em poucos minutos a máquina de qualquer desenvolvedor novo da sua equipe vai estar preparada pra ele começar a trabalhar.
A primeira resposta que vem a minha mente é simples, porque você merece ser feliz. Seu tempo é valioso e você não vai querer gastar ainda mais horas do que já gastou na vida configurando máquinas iguais sempre que muda de ambiente de desenvolvimento ou servidor. O Docker vai te ajudar a automatizar e ainda mais, a melhorar todo esse processo e evitar o velho e bom “Na minha máquina estava funcionando, não sei o que houve”.
Docker é uma ferramenta que serve para você criar rodar e fazer deploy de containers. Containers são conjuntos onde você empacota a sua aplicação e as suas dependências.
Arquivo responsável por subir todos os containers e eles vão conversar entre si.
Nesta parte do Screencast nós criamos um container com o Ubuntu dentro onde nós tivemos acesso ao terminal dele, é um bom exemplo para você começar a entender como os ambientes são isolados.
docker run -t -i ubuntu /bin/bash
docker ps
docker ps -a
docker stop id_do_seu_container
docker start id_do_seu_container
docker exec -it id_do_seu_container bash
docker stop id_do_seu_container
docker rm id_do_seu_container
Aqui vimos no Screencast como criar um projeto Rails sem ter o rails instalado na nossa máquina (usando um container que possui o Rails), como criar um Dockerfile para gerar uma imagem personalizada e como subir nosso serviço Rails via Container.
docker run -it --rm --user "$(id -u):$(id -g)" -v "$PWD":/usr/src/app -w /usr/src/app rails rails new --skip-bundle my_awesome_app
FROM ruby:2.5
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y sqlite3 --no-install-recommends && rm -rf /var/lib/apt/lists/*
COPY Gemfile /usr/src/app/
RUN bundle install
COPY . /usr/src/app
EXPOSE 3000
CMD puma -C config/puma.rb