User Tools

Site Tools


wikiv1:image_dockerfile

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
wikiv1/image_dockerfile.txt · Last modified: by 127.0.0.1