====== Criando imagem com Dockerfile ====== Acesse o diretório webserver e visualize o conteúdo do arquivo Dockerfile: $ cd webserver $ ls $ cat Dockerfile FROM debian:9 COPY sources.list /etc/apt/sources.list RUN apt update && apt install apache2 php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php-cli -y COPY wordpress.conf /etc/apache2/sites-available/wordpress.conf RUN a2enmod rewrite COPY wordpress /var/www/html/wordpress RUN chown -R www-data:www-data /var/www/html/wordpress RUN find /var/www/html/wordpress/ -type d -exec chmod 750 {} \; RUN find /var/www/html/wordpress/ -type f -exec chmod 640 {} \; EXPOSE 80 CMD ["apachectl", "-D", "FOREGROUND"] Construa a imagem dexter-intranet, através do subcomando build: $ docker image build -t wordpress. * **FROM**: Define o nome da imagem base com uma tag, utilizada para criação de uma nova imagem no Docker; * **ENV**: Define uma variável de ambiente, utilizada durante a construção da nova imagem; * **COPY**: Define a cópia de novos arquivos ou diretórios da máquina local para o sistema de arquivos da nova imagem; * **RUN**: Define a execução de comandos em uma nova camada em cima da imagem atual. * **EXPOSE**: Informa ao Docker, que o container escuta em uma determinada porta de rede em tempo de execução; * **CMD**: Define um comando que será executado no momento da execução do container; * **docker image build**: Permite construir uma imagem do Docker, a partir de um arquivo Dockerfile. Verifique se a nova imagem consta na lista: $ docker image ls A partir da nova imagem, execute o container wordpress na porta 80: $ docker container run -d --name=wordpress -p 0.0.0.0:80:80 wordpress Verifique se o container está em execução na porta, e ao final, remova o container. $ docker container ls $ docker port wordpress $ docker container rm -f wordpress * **docker container run -p**: Permite mapear uma porta do container no host hospedeiro; * **docker container port**: Lista mapeamentos de portas de um container. Execute o container para o servidor de banco de dados MySQL: $ docker container run -d -e 'MYSQL_ROOT_PASSWORD=senha' \ -v "$PWD/banco":/var/lib/mysql --name=dbserver -p \ 0.0.0.0:3306:3306 mysql:5.7.22 Acesse o container dbserver, através do comando docker container exec: $ docker container exec -it dbserver /bin/bash $ mysql -u root -psenha * **docker run -v /volume:/volume**: Permite criar e mapear um novo volume, no momento da execução de um container; * **docker container exec**: Permite executar um comando diretamente em um container. Crie o banco de dados wordpress, através do seguinte comando: > CREATE DATABASE wordpress; Defina as permissões de acesso ao banco wordpress e ao usuário wordpressuser: > GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'%' IDENTIFIED BY 'senha'; Atualize os privilégios e abandone o prompt do MySQL: > FLUSH PRIVILEGES; > EXIT Desconecte do container e verifique se o diretório banco possui os arquivos do MySQL: CTRL + D $ ls banco Salve as alterações do container dbserver em uma nova imagem: $ docker commit dbserver dexter-dbserver $ docker image ls Para terminar, remova a execução do container dbserver: $ docker container rm -f dbserver Execute o container para o servidor de banco de dados MySQL, usando a imagem criada: $ docker container run -d -e MYSQL_ROOT_PASSWORD=senha\ -v "$PWD/banco":/var/lib/mysql --name=dbserver -p \ 0.0.0.0:3306:3306 dbserver Execute o container para o servidor de Web na porta 80: $ docker container run -d --name=wordpress --link dbserver:dbserver \ -p 0.0.0.0:80:80 dexter-wordpress Verifique se os containers estão em execução: $ docker container ls