Há diversas maneiras de resolver este problema. Eu resolvi criar este tutorial com a técnica que eu utilizo para disponibilizar o acesso remoto dentro de um ambiente dockerizado via SSH.
Para uma manutenção rápida ou até mesma para liberar o acesso para um cliente dentro do seu ambiente o OpenSSH é a melhor opção.
Estou considerando que você já tenha o Docker instalado e configurado em seu ambiente. Vou exemplificar o cenário que eu tive que resolver por aqui e acredito que isto irá ajudar outros devs com a mesma dúvida.
Cenário
- Vamos imaginar que temos um ambiente Wordpress e o cliente precisa do acesso shell na máquina para fazer as devidas manutenções e até mesmo configurar um cronjob na máquina.
Instalação
Primeiramente você deve baixar a imagem do Docker com o OpenSSH. Eu deixei uma imagem pronta para você utilizar é só fazer o pull
docker pull jaccon/openssh:latest
Com o comando acima você irá baixar a imagem Docker do OpenSSH para seu ambiente, vamos partir para configurar o nosso Docker Compose.
Perceba que no exemplo abaixo nós já temos um ambiente com um Wordpress/PHP, MySQL, phpMyAdmin e agora vamos iniciar o OpenSSH dentro do container.
version: '2'
services:
app_db:
image: mysql:5.7
container_name: app_db
ports:
- "8010:3306"
volumes:
- ./database/data:/var/lib/mysql
- ./database/initdb.d:/docker-entrypoint-initdb.d
- ./etc/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
restart: always
environment:
MYSQL_ROOT_PASSWORD: [email protected]@12345678 # any random string will do
MYSQL_DATABASE: wordpress # the name of your mysql database
MYSQL_USER: wordpress # the name of the database user
MYSQL_PASSWORD: tvFJHsQ2yhQDyrTp # the password of the mysql user
app_website:
depends_on:
- app_db
image: wordpress:latest # we're using the image with php7.1
container_name: app_website
ports:
- "8011:80"
restart: always
links:
- app_db:mysql
volumes:
- ./src:/var/www/html
- ./logs:/var/log/apache2/
- ./scripts/:/scripts/
- ./etc/php/php.ini:/usr/local/etc/php/php.ini
app_ssh:
image: jaccon/openssh
container_name: app_ssh
ports:
- "8012:22"
restart: always
links:
- app_db:mysql
volumes:
- ./src:/var/www/html
- ./logs:/var/log/apache2/
- ./scripts/:/scripts/
- ./etc/php/php.ini:/usr/local/etc/php/php.ini
- ./etc/passwd:/etc/passwd
- ./etc/ssh:/etc/ssh
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: app_phpmyadmin
volumes:
- ./phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
links:
- app_db
ports:
- "8013:80"
environment:
- PMA_ARBITRARY=1
- PMA_HOST=app_db
Veja que nós temos uma entrada app_ssh. É ai que iremos configurar dentro do ambiente op OpenSSH que dará acesso ao conteúdo Dockerizado do servidor Apache onde está rodando o Wordpress.
Em resumo nós teremos a entrada no nosso docker-compose.yml que seria:
app_ssh:
image: jaccon/openssh
container_name: app_ssh
ports:
- "8012:22"
restart: always
volumes:
- ./src:/var/www/html
- ./logs:/var/log/apache2/
- ./scripts/:/scripts/
- ./etc/php/php.ini:/usr/local/etc/php/php.ini
- ./etc/passwd:/etc/passwd
- ./etc/ssh:/etc/ssh
Depois de iniciar o container pode ser que você tenha que iniciar o openssh e setar a senha do seu usuário. Isto é simples basta executar os comandos abaixo
docker exec -it app_ssh /bin/bash
echo root:[email protected] |chpasswd
/etc/init.d/ssh start
Feito isto o seu servidor SSH já estará configurado. Para acessar basta digitar o endereço ip do seu ambiente e depois adicionar a porta 8012 que foi a porta que foi mapeada para o OpenSSH
ssh [email protected] -p 8012
O comando acima é um exemplo de conexão no qual no exemplo o endereço do ambiente é 192.168.0.1
Se você tiver alguma dúvida utilize os comentários para entrar em contato
Obrigado!