Olá pessoal,

Anteriormente vimos o que era uma imagem e o que era um Dockerfile, agora vamos descobrir como criar uma imagem a partir da interação com um container. Vamos trabalhar da seguinte maneira:

Vamos criar uma imagem com apache com interação com o container.

Vamos começar criando o container com docker run -it centos /bin/bash agora que estamos dentro dele, vamos executar os seguintes comandos:

yum install wget -y
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -ivh epel-release-7-5.noarch.rpm

yum install httpd -y,

Instalamos o apache dentro do container, mas quando iniciarmos o container novamente, o serviço do apache não irá iniciar, pois o container não possui os serviços de inicialização então vamos usar um serviço chamado Supervisord que faz com que sempre que eu reiniciar o container eu possa já iniciar alguns serviços.

sudo yum install python-setuptools
sudo easy_install pip
sudo pip install supervisor
echo_supervisord_conf > supervisord.conf
sudo cp supervisord.conf /etc/supervisord.conf
sudo mkdir /etc/supervisord.d/
sudo vi /etc/supervisord.conf

Com o arquivo de configurações do supervisord aberto vamos alterar e adicionar algumas linhas:

Altere a linha que tenha

[include]
files =
[include]
files = /etc/supervisord.d/*.conf

Agora vamos criar o arquivo: vi /etc/rc.d/init.d/supervisord

Coloque esse código dentro do arquivo:

#!/bin/sh
#
# /etc/rc.d/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord

# Source init functions
. /etc/rc.d/init.d/functions

prog="supervisord"

prefix="/usr/"
exec_prefix="${prefix}"
prog_bin="${exec_prefix}/bin/supervisord"
PIDFILE="/var/run/$prog.pid"

start()
{
       echo -n $"Starting $prog: "
       daemon $prog_bin --pidfile $PIDFILE
       [ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup"
       echo
}

stop()
{
       echo -n $"Shutting down $prog: "
       [ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"
       echo
}

case "$1" in

 start)
   start
 ;;

 stop)
   stop
 ;;

 status)
       status $prog
 ;;

 restart)
   stop
   start
 ;;

 *)
   echo "Usage: $0 {start|stop|restart|status}"
 ;;

esac
sudo chmod +x /etc/rc.d/init.d/supervisord
sudo chkconfig --add supervisord
sudo chkconfig supervisord on
supervisord

Agora já podemos adicionar nosso serviço até o supervisord. Abra novamente o arquivo: /etc/supervisord.conf
Adicione ao final do arquivo as seguintes linhas.

[program:httpd]
command=/usr/sbin/httpd -D FOREGROUND -k start
environment=APACHE_LOG_DIR=/var/log/httpd
redirect_stderr=true

Após isso vamos executar supervisorctl update e supervisorctl você poderá ver que foi adicionado o serviço httpd ao supervisord.
Vamos criar o arquivo vi /run.sh e dentro dele colocar as linhas seguintes:

#!/bin/bash
supervisord &
sleep 2

/bin/bash

chmod +x /run.sh

Agora vamos criar a imagem, pressione CTRL + P + Q . Agora estamos no console do Host, para criar a imagem vamos executar docker commit id_container nome_imagem. Agora é só colocar docker run -it nome_imagem /run.sh e você estará iniciando seu Servidor Web.

Obrigado pessoal, por hoje é isso.

Trabalha em uma Startup com foco em Plataforma como Serviço (PaaS), é especialista em Cloud Computing e Conteinerização, desenvolve todo dia uma nova maneira de resolver problemas e criar coisas novas.
  • Laercio

    Olá Pessoal!

    Queria primeiramente parabenizar vocês pelo site.

    Eu estou usando windows 10 vagrant, virtualbox, ubuntu, php, mysql e apache. No entanto, quero trocar vagrant para docker que tenho ouvido muito e lido suas vantagens.

    Como faço para criar uma imagem ubuntu,php,mysql e apache?
    Quando tento usar comando docker pull ubuntu recebo isso :

    Using default tag: latest

    Post http://127.0.0.1:2375/v1.20/images/create?fromImage=ubuntu%3Alatest: dial tcp 127.0.0.1:2375: ConnectEx tcp: Nenhuma conexão pôde ser feita porque a máquina de destino as recusou ativamente..

    * Are you trying to connect to a TLS-enabled daemon without TLS?

    * Is your docker daemon up and running?

    Pode me dar alguma sugestão?

  • Oi Laercio, vamos fazer alguns testes, primeiro: docker está executando em sua máquina? service docker status. Segundo: qual S.O você está utilizando no host? Se quiser, nos mande um e-mail com os prints, fica mais fácil pra agente simular e te ajudar. O Docker é relativamente simples, basta instalar ele e ele consumirá por padrão do docker hub, ou seja, você fará download das images de lá, pode estar faltando alguma configuração ou talvez desabilitar a checagem e tls do daemon. Mas vamos conversando, se quiser pode enviar e-mail para: [email protected] com prints, e informações que achar relevante, vamos resolver isso!
    Grande abraço, até mais!

  • Odemar Dal Pizzol

    Buenas pessoal, segue algumas considerações, eu utilizei o SO Centos 7:
    A versão do Epel está na 7.6 > wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-6.noarch.rpm && rpm -ivh epel-release-7-6.noarch.rpm

    Pode ser que o comando “echo” não esteja registrado: utilize direto /usr/bin/echo_supervisord_conf > /etc/supervisord.conf

  • Lucas Gabriel

    Quando tentei criar minha primeira imagem usando Ubuntu foi numa conta onde eu não era root, ou seja, não tinha privilégios de admin, mas o Docker não me avisava isso dessa forma, perguntava se o Docker Daemon estava em execução, apenas usei o sudo e funcionou. Observe se você tem permissão de admin e tente de novo.

  • Fábio Jânio

    Como poderíamos adicionar o nodejs a essa mesma instalação?