1
resposta

Docker + WSL2 + VPN - Servidor Local Extremamente Lento

Pessoal, boa tarde!

Tenho um ambiente conteinerizado utilizando o Docker + WSL2 em uma rede com VPN.

docker-compose.yml

version: "3.5"
services:

    ec2-linux:
      build: 
        context: ${SERVER_DOCKERFILE:-./docker/ec2-linux}
        args:
          PHP_MEMORY_LIMIT: ${PHP_MEMORY_LIMIT:-128M}
      container_name: teste-ec2-linux
      stdin_open: true # docker run -i
      tty: true        # docker run -t
      working_dir: /var/www/html/
      volumes:
        - .:/var/www/html/
      ports:
       - "8001:80"
      networks:
        - teste

    mysql:
      image: mysql:5.7.33
      environment:
        MYSQL_ROOT_PASSWORD: root
      ports:
        - 3316:3306
      volumes:
        - mysql-db-data:/var/lib/mysql
      networks:
        - teste

    postgres:
      image: postgres:9.6-alpine
      environment:
        POSTGRES_USER: root
        POSTGRES_PASSWORD: root
        POSTGRES_DB: teste
      ports:
        - 5442:5432
      volumes:
        - postgres-db-data:/var/lib/postgres
      networks:
        - teste

networks:
  teste:
    name: teste
    driver: bridge

volumes:
  mysql-db-data:
  postgres-db-data:

Dockerfile

FROM amazonlinux
RUN yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
    yum clean all && yum makecache fast && yum -y update \
    && yum -y install https://mirror.webtatic.com/yum/el7/webtatic-release.rpm && yum -y update \
    && yum -y install git composer php56w php56w-cli php-56w-common php56w-opcache php56w-mysql php56w-pgsql php56w-mbstring php56w-xml php56w-gd php56w-pear php56w-intl php56w-pecl-xdebug.x86_64 \
    && yum -y install php-drush-drush postfix tcping which && yum clean all \
    && echo "xdebug.remote_enable=on" >> /etc/php.d/xdebug.ini \
    && echo "xdebug.remote_handler=dbgp" >> /etc/php.d/xdebug.ini \
    && echo "xdebug.remote_port=9000" >> /etc/php.d/xdebug.ini \
    && echo "xdebug.remote_autostart=on" >> /etc/php.d/xdebug.ini \
    && echo "xdebug.remote_connect_back=1" >> /etc/php.d/xdebug.ini \
    && echo "xdebug.idekey=docker" >> /etc/php.d/xdebug.ini

# Setup php.ini
COPY config/php.ini /etc/php.ini

EXPOSE 80
ENTRYPOINT ["/usr/sbin/httpd"]
CMD ["-DFOREGROUND"]

Tudo está funcionando bem na parte do build e de levantar o container:

docker-compose up -d

O problema está na hora de acessar o local server: http://localhost:8001/login.html

  • Para fazer login é cerca de 1 minuto ou mais.
  • Em cada menu da aplicação que se clica, leva mais de 1 minuto para carregar.

Ainda não faço muito ideia do que pode estar causando essa lentidão (para todos da empresa, cada um levanta o container na sua própria máquina), mas suspeito que, por estar na VPN, acabe atrasando um pouco a rota, embora a "rede docker" criada pareça bem normal:

NETWORK ID     NAME                DRIVER    SCOPE
50968ee877eb   bridge               bridge    local
6de6340c966e   web_default     bridge    local
fde3d7823817   host                    host      local
6e6cc3c7c538   none                   null      local

Utilizamos a VPN para acessar as bases de dados.

Em um dos testes que fiz, olhando em tempo real as requisições chegando no httpd: "tail -f access_log", cada requisição era uma eternidade.

E, por aqui, aparentemente, não há nada de anormal com CPU/Memória:

CONTAINER ID        NAME                   CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
b4a8e5d79686        ec2-linux              0.37%               28.64MiB / 7.673GiB   0.36%               746B / 0B           0B / 0B             47
87805e873edd        mysql_1                 0.08%               183.9MiB / 7.673GiB   2.34%               836B / 0B           0B / 0B             27
d26355b7c7ef          postgres_1          0.05%               7.23MiB / 7.673GiB    0.09%               746B / 0B           0B / 0B             6

Alguém tem alguma sugestão de como posso melhorar esse carregamento de página?

"docker-compose version 1.29.2"
"Docker version 20.10.8"
1 resposta

Oi Vanderson, tudo bem?

Pelo que entendi, você está enfrentando problemas de lentidão ao acessar o servidor local através do Docker + WSL2 em uma rede com VPN. Essa lentidão pode estar relacionada ao fato de estar utilizando a VPN, o que pode causar atrasos na rota.

Uma sugestão para melhorar o carregamento das páginas é utilizar o recurso de cache do Docker. O cache permite que as imagens e os containers sejam armazenados localmente, o que pode acelerar o tempo de resposta das requisições.

Você pode adicionar a seguinte linha ao seu arquivo docker-compose.yml, dentro de cada serviço:

build:
  context: ${SERVER_DOCKERFILE:-./docker/ec2-linux}
  args:
    PHP_MEMORY_LIMIT: ${PHP_MEMORY_LIMIT:-128M}
  cache_from:
    - ${DOCKER_REGISTRY}/ec2-linux:latest

Essa configuração irá utilizar o cache da imagem ec2-linux para acelerar o processo de build. Certifique-se de substituir ${DOCKER_REGISTRY} pelo seu registro do Docker, caso esteja utilizando um.

Além disso, você pode tentar otimizar o desempenho do seu servidor Apache. Verifique se as configurações do arquivo httpd.conf estão adequadas para o ambiente de desenvolvimento. Por exemplo, você pode ajustar o número máximo de conexões simultâneas (MaxClients) e o número máximo de processos do Apache (MaxRequestWorkers) para otimizar o uso de recursos.

Outra sugestão é verificar se há algum gargalo na rede. Você pode utilizar ferramentas como o ping ou o traceroute para identificar possíveis problemas de latência ou roteamento.

Por fim, é importante mencionar que a lentidão pode estar relacionada a outros fatores, como o desempenho do hardware da sua máquina ou a configuração da rede da sua empresa. Nesses casos, pode ser necessário avaliar outros aspectos para encontrar uma solução definitiva.

Espero que essas sugestões possam te ajudar a melhorar o carregamento das páginas no seu ambiente Docker + WSL2.

Um abraço e bons estudos.