Usando Dockerfile para expor portas

Using Dockerfile Expose Ports



É realmente fácil criar uma imagem Docker personalizada a partir de imagens Docker existentes usando Dockerfile . Normalmente as pessoas usam uma imagem de base mínima, como alpino ou ubuntu / debian para aquele propósito. Digamos que você queira criar uma imagem Docker personalizada de seu aplicativo da web favorito escrita em NodeJS. O aplicativo será executado na porta 8080 . Por padrão, você não conseguirá acessar o aplicativo da web na porta 8080 de sua máquina host. Você terá que dizer ao Docker que deseja expor ou abrir a porta 8080 para poder acessá-lo de sua máquina host.

Neste artigo, vou mostrar como expor portas usando Dockerfile com um exemplo do mundo real. Vamos começar.







Primeiro, temos que criar um diretório de projeto. Neste diretório, você deve manter todos os arquivos do projeto e um Dockerfile .



Execute o seguinte comando para criar um diretório de projeto myapp / no diretório HOME de seus usuários e navegue até ele:



$mkdir~/myapp&& CD~/myapp

Preparando o aplicativo da Web:

Agora crie um diretório src / dentro de ~ / myapp / diretório com o seguinte comando:

$mkdirsrc

No src / diretório, todo o código-fonte do meu aplicativo NodeJS será mantido.

Vou apenas criar um simples app.js arquivo no src / diretório e execute um servidor web simples na porta 8080 apenas para demonstração.

o src / app.js arquivo contém as seguintes linhas de códigos:

Gravando Dockerfile e expondo portas:

Agora crie um Dockerfile no ~ / myapp diretório com o seguinte comando:

$tocarDockerfile

Agora digite as seguintes linhas para o Dockerfile e salve-o. Discutirei o que essas linhas significam mais tarde.

Aqui, DE alpino: 3,8 significa, use o alpino: 3,8 A imagem do Docker como base para a nova imagem que iremos construir a partir deste Dockerfile .

RUN atualização do apk significa, execute o atualização do apk comando na imagem base do Docker alpino: 3,8 .

RUN apk add –no-cache nodejs significa, execute o adicionar apk comando para instalar a linguagem de programação NodeJS no alpino: 3,8 Imagem de base do Docker.

COPIAR ./src / app significa, copiar todos os arquivos do ~ / myapp / src diretório para o /aplicativo diretório da nova imagem do Docker que construiremos usando o Dockerfile .

CMD [/ usr / bin / node, /app/app.js] significa, execute o /app/app.js arquivo do novo contêiner usando binário localizado em / usr / bin / node .

Finalmente, para EXPOSE 8080 / tcp significa expor ou abrir a porta TCP 8080 para o computador host.

Criando uma imagem Docker personalizada usando Dockerfile:

Agora vamos fazer uma imagem Docker personalizada nó alpino: v1 usando o Dockerfile que acabamos de criar.

Primeiro, certifique-se de que você está no ~ / myapp / diretório e, em seguida, execute o seguinte comando para criar sua imagem Docker personalizada nó alpino: v1 :

$construção docker-tnó alpino: v1.

Como você pode ver, a imagem personalizada do Docker nó alpino: v1 está sendo criado. A imagem base do Docker necessária e os pacotes estão sendo extraídos da Internet.

Como você pode ver, a imagem personalizada do Docker nó alpino: v1 foi criado com sucesso.

Testando a imagem Docker personalizada:

Agora podemos testar a imagem Docker personalizada nó alpino: v1 muito facilmente. Tudo o que precisamos fazer é criar um contêiner de nó alpino: v1 imagem.

Execute o seguinte comando para criar um contêiner Docker www de nó alpino: v1 Imagem do Docker:

$docker run-d -isto --nomewww alpine-node: v1

O recipiente www é criado.

Agora vamos descobrir o endereço IP do www Contêiner do Docker com o seguinte comando:

$docker inspect www| pegadaEndereço

Como você pode ver, no meu caso, o endereço IP é 172.17.0.3 . Portanto, o aplicativo NodeJS que escrevi deve estar acessível a partir do navegador da web na porta 8080 deste endereço IP.

Voila! Eu posso acessar a porta 8080 do meu www Recipiente Docker.

É basicamente assim que você expõe certas portas em suas imagens Docker personalizadas que irá construir usando Dockerfile .

Expondo portas TCP e UDP usando Dockerfile:

Na seção anterior deste artigo, mostrei como expor uma porta TCP usando um Dockerfile .

Você pode facilmente expor uma porta TCP (digamos uma porta TCP 53 ) na tua Dockerfile com a seguinte linha:

EXPOR53/tcp

Você também pode expor uma porta UDP (digamos uma porta UDP 53 ) com a seguinte linha em seu Dockerfile :

EXPOR53/udp

Você pode expor a porta TCP e UDP ao mesmo tempo com as seguintes linhas em seu Dockerfile :

EXPOR53/tcp
EXPOR53/udp

Se você não especificar qual protocolo (TCP ou UDP) usar, o TCP será usado por padrão. Por exemplo, se você escrever a seguinte linha em seu Dockerfile :

EXPOR53

Em seguida, o Docker presumirá que você deseja usar a porta TCP 53.

Expondo várias portas usando Dockerfile:

Digamos que você queira criar uma imagem personalizada do Docker MEAN stack. Neste caso, você estará executando um servidor HTTP em alguma porta (digamos porta TCP 80 ou 8080), um servidor FTP que roda na porta TCP 21, um servidor de banco de dados SQL (digamos MySQL) que roda na porta TCP 3306, ou servidor de banco de dados NoSQL (digamos MongoDB) que roda na porta TCP 27017 ou 27018, um servidor SSH que roda na porta TCP 22. São muitas portas!

A boa notícia é; você pode expor quantas portas forem necessárias em sua imagem Docker personalizada criada usando Dockerfile .

As portas no exemplo acima podem ser expostas com as seguintes linhas em seu Dockerfile :

EXPOR80/tcp
EXPOR8080/tcp
EXPORvinte e um/tcp
EXPOR22/tcp
EXPOR3306/tcp
EXPOR27017/tcp
EXPOR27018/tcp

Se quiser, você pode deixar a especificação do protocolo, já que o Docker usa TCP por padrão e fazer o mesmo com as seguintes linhas em seu Dockerfile :

EXPOR80
EXPOR8080
EXPORvinte e um
EXPOR22
EXPOR3306
EXPOR27017
EXPOR27018

Se necessário, você pode misturar as portas TCP e UDP em seu Dockerfile . Por exemplo, se você executar o servidor DNS (que é executado na porta UDP 53), junto com o exemplo acima, você adicionaria as seguintes linhas ao seu Dockerfile .

EXPOR80
EXPOR8080
EXPORvinte e um
EXPOR22
EXPOR53/udp
EXPOR3306
EXPOR27017
EXPOR27018

Então é assim que você expõe portas usando Dockerfile . Para aprender mais sobre Dockerfile e expor portas usando Dockerfile , Leia o Dockerfile guia de referência em https://docs.docker.com/engine/reference/builder/#expose

Obrigado por ler este artigo.