Esse artigo são anotações sobre meu aprendizado e utilização de docker como dev, espero que seja útil para outras pessoas.
🚧 Post em constante desenvolvimento 🚧
Docker
Comandos
Utilizando Docker Compose, dentro do projeto com o arquivo docker-compose.yml criado:
-
docker-compose up -dCria os containers sem travar o terminal-
docker-compose up -d --buildCria os containers mas rebuildando as imagens. Útil quando oDockerfilefoi modificado e deve ser relido.
-
-
docker-compose downPara e apaga todos containers criados -
docker-compose exec <service-name> <comando> <param1> <param2>...Executa um comando dentro do container, usos mais comuns:-
docker-compose exec app composer installInstala as dependências do composer -
docker-compose exec app composer testExecuta scripttestdo composer -
docker-compose exec app bashAcessa "terminal" do container do serviceapp
-
docker-compose.yml
É uma "receita" para criar containers (especificando ordem e dependência) configurando instruções adicionais antes das criações das imagens
Glossário
-
versionCompatibilidade do Docker Compose -
servicesServiços (containers) que serão criados- Evite usar
container_name, pois com o Docker Compose, dentro do projeto, podemos executar comandos pelo nome do serviço como:docker-compose exec <service-name> <command>
- Evite usar
-
buildUsado ao invés deimage, especifica local onde está oDockerfileexistente. Se estiver na mesma pasta que odocker-compose.ymlutilize. -
imageUsado ao invés debuild, especifica imagem, igual aoFROMdoDockerfile -
volumesLista de volumes que serão espelhados da sua "máquina" (HOST) para o container- Exemplo: para
.:/var/www/htmlsignifica que o projeto da pasta dodocker-compose.ymlé refletido em/var/www/html, onde que cada arquivo adicional criado/modificado em um é replicado em outro
- Exemplo: para
-
portsLista de espelhamentos de portas de um container em outro- Exemplo: para
8081:80requisições na porta8081da máquina local (HOST) são direcionadas para a porta80de dentro do container
- Exemplo: para
-
commandComando que será executado ao iniciar o container. Normalmente usado para iniciar o servidor -
environmentVariáveis de ambiente para serem utilizadas na imagem e/ou container. Sua utilização varia muito de imagem para imagem -
working_dirDiretório padrão do container. Quando for acessado é nessa pasta que iremos, o comum é deixar no espelhamento do volume
Exemplos
version: "3.3"
services:
app:
build: docker/centos
volumes:
- .:/var/www/html
working_dir: /var/www/html
ports:
- '8081:80'
command: /usr/sbin/httpd -DFOREGROUND
version: "3.3"
services:
db:
restart: always
image: postgres
environment:
POSTGRES_DB: dbname
POSTGRES_USER: dbuser
POSTGRES_PASSWORD: dbpwd
ports:
- "5432:5432"
volumes:
- ./docker/psql/init.sql:/docker-entrypoint-initdb.d/init.sql
app:
build: docker/php
volumes:
- .:/var/www/html
working_dir: /var/www/html
links:
- db:db
ports:
- '8080:80'
depends_on:
- db
Dockerfile
É uma "receita" para criar uma imagem e, a partir da dessa, criar um container. Deve iniciar de uma imagem existente (FROM) e depois customizá-la.
Glossário
-
FROMImagem que vai ser usada como ponto de partida -
ENVVariável de ambiente que pode ser utilizada em scripts, instruções ou configurações de ambiente -
RUNComando que vai ser executado no "terminal". Novas linhas devem utilizar\e comandos diferentes devem ser usados com&¶ serem executados na mesma instrução deRUN- Evite utilizar mútiplos
RUN, o ideal é aglutinar em uma mesma instrução o máximo possível - Lembre de atualizar os pacotes na primeira instrução
RUN
- Evite utilizar mútiplos
-
ADDCopia arquivos, diretórios ou remotos para um local
Exemplos
FROM centos:centos7
ENV PHALCON_VERSION phalcon-v1.3.4
ENV PATH="/opt/remi/php54/root/bin:${PATH}"
RUN yum -y update && \
yum -y install \
gcc \
make \
epel-release \
httpd \
unzip
ADD https://packages.microsoft.com/config/rhel/7/prod.repo /etc/yum.repos.d/mssql-release.repo
RUN yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm && \
yum-config-manager --enable remi-php54 && \
ACCEPT_EULA=Y yum -y install \
php54-php \
php54-php-common \
php54-php-devel \
php54-php-mysqlnd \
php54-php-mbstring \
php54-php-soap \
php54-php-gd \
php54-php-ldap \
php54-php-pdo \
php54-php-intl \
php54-php-xml \
php54-php-sqlsrv \
php54-php-pear && \
yum clean all;
ADD https://github.com/phalcon/cphalcon/archive/$PHALCON_VERSION.tar.gz ./phalcon.tar.gz
RUN rm -rf /var/cache/yum && \
tar -xzf {PWD}/phalcon.tar.gz && \
cd cphalcon-$PHALCON_VERSION/build && \
./install && \
rm -rf /phalcon && \
echo 'extension=phalcon.so' \
| tee /opt/remi/php54/root/etc/php.d/30-phalcon.ini;
RUN curl -sS https://getcomposer.org/installer \
| php -- --install-dir=/usr/local/bin --filename=composer;
FROM php:7.4-apache
RUN a2enmod rewrite
RUN cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini
# THANKS: https://github.com/docker-library/php/issues/221#issuecomment-601129850
RUN apt-get update; \
apt-get install -y libpq5 libpq-dev libzip-dev zip; \
docker-php-ext-install pdo pdo_pgsql zip; \
apt-get autoremove --purge -y libpq-dev; \
apt-get clean; \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
RUN curl -sS https://getcomposer.org/installer \
| php -- --install-dir=/usr/local/bin --filename=composer;



Discussion (0)