====== 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