💧🐳Dockerizando Aplicações Phoenix/Elixir
Phoenix
em contêineres e a gerenciar vários deles utilizando Docker Compose
.Para começar, vamos criar uma aplicação sem banco de dados para entender bem como funciona, e depois sim, vamos criar uma aplicação com banco de dados e usando
docker-compose
.⚙️ Criando o Projeto sem Ecto
⚙️ Criando o Projeto com Ecto
⚙️ Criando o Projeto sem Ecto (sem Banco de Dados)
- Versões usadas neste projeto:
- elixir 1.13.3-otp-24
- erlang 24.1.5
Crie uma aplicação Phoenix com o comando:
$ mix phx.new dockerizando_sem_ecto --app blog --no-ecto
link do projeto no github: https://github.com/maiquitome/dockerizando_sem_ecto
🐳 Criando a Imagem Docker sem Ecto
Vamos configurar o contêiner da nossa aplicação Phoenix, criando um arquivo com o nome Dockerfile na raiz do projeto com o seguinte conteúdo:
# imagem base
# Alpine é uma imagem mínima do Docker baseada no Alpine Linux com um índice de pacotes completo e apenas 5 MB de tamanho!
FROM elixir:1.13.3-alpine
# instalando o gerenciar de pacotes do elixir
RUN mix local.hex --force && \
mix local.rebar --force
# também funciona essa sintaxe:
# RUN mix do local.hex --force, local.rebar --force
# copiar tudo da raiz do projeto para o contêiner docker
COPY . .
# instalar as dependencias
RUN mix do deps.get, deps.compile
# executar o servidor
CMD ["mix", "phx.server"]
.dockerignore
Agora podemos criar um arquivo também na raiz do projeto chamado .dockerignore
para colocarmos os arquivos que devem ser ignorados pelo Docker, ou seja, não vão ir para dentro do contêiner.
Vamos colocar alguns arquivos que podemos querer ignorar, mesmo que alguns deles não estejam no nosso projeto, vamos colocar para exemplo, pois algum dia você pode querer colocar um arquivo semelhante:
_build/
deps/
.elixir_ls/
.git
.github
.gitignore
.editorconfig
.circleci
helm/*
terragrunt.hcl
README.md
docker-compose*
이미지 구성
$ docker build -t app/blog .
Executando o comando docker images
no terminal, podemos constatar que a nossa imagem foi criada:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
app/blog latest eae5a6582cdd 3 minutes ago 105MB
Docker 데스크톱이 없습니다.
크리안도 움 콘테이너
$ docker run app/blog
Executando o comando docker container ls
ou o comando antigo docker ps
no terminal, podemos constatar que o nosso contêiner foi criado:
도커 데스크톱 없음:
4000 포르타 로드단도에 적용할 수 있는 포데모스 콘스타타:
Então, vamos tentar acessar aplicação:
E recebemos a mensagem que este site não pode ser acessado. Isso acontece, pois, a nossa aplicação está na porta 4000 dentro do contêiner. Para acessar precisamos executar o comando abaixo passando uma porta, neste caso a porta 8000:
$ docker run -p 8000:4000 app/blog
E agora conseguimos acessar a nossa aplicação dentro do contêiner:
Caso você receba a mensagem This page ins't working
:
Altere o arquivo config/dev.exs
trocando {127, 0, 0, 1}
para {0, 0, 0, 0}
Adicionando um diretório de trabalho (WORKDIR)
Se execuarmos o comando docker run -it app/blog sh
e depois um ls
podemos notar que os arquivos do contêiner estão misturados com os arquivos da aplicação:
Vamos adicionar no aquivo Dockerfile
또는 comando WORKDIR
:
FROM elixir:1.13.3-alpine
WORKDIR /app
...
Vamos verificar que agora ficou mais organizado:
⚙️ Criando o Projeto com Ecto (com Banco de Dados)
Agora vamos criar uma aplicação Phoenix com banco de dados:
$ mix phx.new dockerizando_com_ecto --app blog
Link do projeto no github: https://github.com/maiquitome/dockerizando_com_ecto
🐳 Criando a Imagem Docker com Ecto
Vamos usar o mesmo Dockerfile
do projeto anterior, criar a nossa imagem e subir um contêiner da nossa aplicação:
Após isso, recebemos um erro, informando que a conexão com o banco de dados falhou. Para resolvermos isso vamos aprender a usar o docker-compose
.
🐳 Criando o Arquivo docker-compose
O Docker Compose serve para iniciar vários conteiners.
Crie um arquivo na raiz do projeto chamado docker-compose.yml
.
version: "3" # versão do docker-compose
services: # serviços que precisamos colocar em conteiner
# e um desses serviços é a nossa aplicação.
app: # nome da nossa aplicação, pode ser qualquer nome, nesse caso vamos dar o nome de app
build:
context: . # context é o diretório onde a gente está
ports: # pra executar o docker run precisamos passar a porta
- "8080:4000" # o `-` no yml significa que é um array
Este código do arquivo docker-compose.yml
irá executar o Dockerfile e, para isso, vamos executar no terminal o comando docker-compose up
:
$ docker-compose up
Mesmo com o erro do banco de dados, acesse a porta 8080:
No momento, o docker-compose
está servindo apenas para fazer o build da imagem do nosso projeto.
📜 Criando o arquivo SH
Remova o comando CMD ["mix", "phx.server"]
do arquivo Dockerfile
.
Crie um arquivo na raiz do projeto chamado docker_dev_start.sh
.
mix ecto.drop # destrói o banco de dados
mix ecto.setup # cria o banco de dados e executa o arquivo seeds
exec mix phx.server # sobe o servidor
Agora vamos fazer executar este script dentro do docker-compose.yml
. Como estamos em uma máquina Alpine, adicione o seguinte comando command: /bin/sh docker_dev_start.sh
. Se a máquina fosse um Windows, por exemplo, o comando seria diferente.
version: "3" # versão do docker-compose
services: # serviços que precisamos colocar em conteiner
# e um desses serviços é a nossa aplicação.
app: # nome da nossa aplicação, pode ser qualquer nome, nesse caso vamos dar o nome de app
build:
context: . # context é o diretório onde a gente está
command: /bin/sh docker_dev_start.sh # executa o script do arquivo docker_dev_start.sh
ports: # pra executar o docker run precisamos passar a porta
- "8080:4000" # o `-` no yml significa que é um array
Ao executarmos docker-compose up
recebemos um erro:
Para funcionar, precisamos construir novamente a imagem e, para isso, pode usar o comando:
$ docker-compose up --build
🗃 docker-compose가 아닌 banco de dados 구성
Mas ainda temos o erro de conexão com o banco de dados, por isso, precisamos incluir o contêiner do postgres e configurar ele:
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione a configuração abaixo
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
Altere de localhost
para db
no arquivo config/dev.exs
:
E, como alteramos os arquivos, precisamos fazer o build novamente:
$ docker-compose up --build
Agora funciona, mas ainda temos um problema:
Precisamos fazer com o db 실행 totalmente primeiro e, pra isso, vamos colocar uns comandos:
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione o depends_on e o links
depends_on:
- db # nosso app depende do db para funcionar
links:
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
E, como alteramos os arquivos, precisamos fazer o build novamente:
$ docker-compose up --build
E, agora sim, o db executoou primeiro:
DICA: 포데모스 집행관은 다음과 같은 배경을 가지고 있습니다:
$ docker-compose up -d
Reference
이 문제에 관하여(💧🐳Dockerizando Aplicações Phoenix/Elixir), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/maiquitome/elixir-dockerizando-aplicacoes-phoenix-19gg
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- elixir 1.13.3-otp-24
- erlang 24.1.5
$ mix phx.new dockerizando_sem_ecto --app blog --no-ecto
Vamos configurar o contêiner da nossa aplicação Phoenix, criando um arquivo com o nome Dockerfile na raiz do projeto com o seguinte conteúdo:
# imagem base
# Alpine é uma imagem mínima do Docker baseada no Alpine Linux com um índice de pacotes completo e apenas 5 MB de tamanho!
FROM elixir:1.13.3-alpine
# instalando o gerenciar de pacotes do elixir
RUN mix local.hex --force && \
mix local.rebar --force
# também funciona essa sintaxe:
# RUN mix do local.hex --force, local.rebar --force
# copiar tudo da raiz do projeto para o contêiner docker
COPY . .
# instalar as dependencias
RUN mix do deps.get, deps.compile
# executar o servidor
CMD ["mix", "phx.server"]
.dockerignore
Agora podemos criar um arquivo também na raiz do projeto chamado
.dockerignore
para colocarmos os arquivos que devem ser ignorados pelo Docker, ou seja, não vão ir para dentro do contêiner.Vamos colocar alguns arquivos que podemos querer ignorar, mesmo que alguns deles não estejam no nosso projeto, vamos colocar para exemplo, pois algum dia você pode querer colocar um arquivo semelhante:
_build/
deps/
.elixir_ls/
.git
.github
.gitignore
.editorconfig
.circleci
helm/*
terragrunt.hcl
README.md
docker-compose*
이미지 구성
$ docker build -t app/blog .
Executando o comando
docker images
no terminal, podemos constatar que a nossa imagem foi criada:$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
app/blog latest eae5a6582cdd 3 minutes ago 105MB
Docker 데스크톱이 없습니다.
크리안도 움 콘테이너
$ docker run app/blog
Executando o comando
docker container ls
ou o comando antigo docker ps
no terminal, podemos constatar que o nosso contêiner foi criado:도커 데스크톱 없음:
4000 포르타 로드단도에 적용할 수 있는 포데모스 콘스타타:
Então, vamos tentar acessar aplicação:
E recebemos a mensagem que este site não pode ser acessado. Isso acontece, pois, a nossa aplicação está na porta 4000 dentro do contêiner. Para acessar precisamos executar o comando abaixo passando uma porta, neste caso a porta 8000:
$ docker run -p 8000:4000 app/blog
E agora conseguimos acessar a nossa aplicação dentro do contêiner:
Caso você receba a mensagem
This page ins't working
:Altere o arquivo
config/dev.exs
trocando {127, 0, 0, 1}
para {0, 0, 0, 0}
Adicionando um diretório de trabalho (WORKDIR)
Se execuarmos o comando
docker run -it app/blog sh
e depois um ls
podemos notar que os arquivos do contêiner estão misturados com os arquivos da aplicação:Vamos adicionar no aquivo
Dockerfile
또는 comando WORKDIR
:FROM elixir:1.13.3-alpine
WORKDIR /app
...
Vamos verificar que agora ficou mais organizado:
⚙️ Criando o Projeto com Ecto (com Banco de Dados)
Agora vamos criar uma aplicação Phoenix com banco de dados:
$ mix phx.new dockerizando_com_ecto --app blog
Link do projeto no github: https://github.com/maiquitome/dockerizando_com_ecto
🐳 Criando a Imagem Docker com Ecto
Vamos usar o mesmo Dockerfile
do projeto anterior, criar a nossa imagem e subir um contêiner da nossa aplicação:
Após isso, recebemos um erro, informando que a conexão com o banco de dados falhou. Para resolvermos isso vamos aprender a usar o docker-compose
.
🐳 Criando o Arquivo docker-compose
O Docker Compose serve para iniciar vários conteiners.
Crie um arquivo na raiz do projeto chamado docker-compose.yml
.
version: "3" # versão do docker-compose
services: # serviços que precisamos colocar em conteiner
# e um desses serviços é a nossa aplicação.
app: # nome da nossa aplicação, pode ser qualquer nome, nesse caso vamos dar o nome de app
build:
context: . # context é o diretório onde a gente está
ports: # pra executar o docker run precisamos passar a porta
- "8080:4000" # o `-` no yml significa que é um array
Este código do arquivo docker-compose.yml
irá executar o Dockerfile e, para isso, vamos executar no terminal o comando docker-compose up
:
$ docker-compose up
Mesmo com o erro do banco de dados, acesse a porta 8080:
No momento, o docker-compose
está servindo apenas para fazer o build da imagem do nosso projeto.
📜 Criando o arquivo SH
Remova o comando CMD ["mix", "phx.server"]
do arquivo Dockerfile
.
Crie um arquivo na raiz do projeto chamado docker_dev_start.sh
.
mix ecto.drop # destrói o banco de dados
mix ecto.setup # cria o banco de dados e executa o arquivo seeds
exec mix phx.server # sobe o servidor
Agora vamos fazer executar este script dentro do docker-compose.yml
. Como estamos em uma máquina Alpine, adicione o seguinte comando command: /bin/sh docker_dev_start.sh
. Se a máquina fosse um Windows, por exemplo, o comando seria diferente.
version: "3" # versão do docker-compose
services: # serviços que precisamos colocar em conteiner
# e um desses serviços é a nossa aplicação.
app: # nome da nossa aplicação, pode ser qualquer nome, nesse caso vamos dar o nome de app
build:
context: . # context é o diretório onde a gente está
command: /bin/sh docker_dev_start.sh # executa o script do arquivo docker_dev_start.sh
ports: # pra executar o docker run precisamos passar a porta
- "8080:4000" # o `-` no yml significa que é um array
Ao executarmos docker-compose up
recebemos um erro:
Para funcionar, precisamos construir novamente a imagem e, para isso, pode usar o comando:
$ docker-compose up --build
🗃 docker-compose가 아닌 banco de dados 구성
Mas ainda temos o erro de conexão com o banco de dados, por isso, precisamos incluir o contêiner do postgres e configurar ele:
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione a configuração abaixo
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
Altere de localhost
para db
no arquivo config/dev.exs
:
E, como alteramos os arquivos, precisamos fazer o build novamente:
$ docker-compose up --build
Agora funciona, mas ainda temos um problema:
Precisamos fazer com o db 실행 totalmente primeiro e, pra isso, vamos colocar uns comandos:
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione o depends_on e o links
depends_on:
- db # nosso app depende do db para funcionar
links:
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
E, como alteramos os arquivos, precisamos fazer o build novamente:
$ docker-compose up --build
E, agora sim, o db executoou primeiro:
DICA: 포데모스 집행관은 다음과 같은 배경을 가지고 있습니다:
$ docker-compose up -d
Reference
이 문제에 관하여(💧🐳Dockerizando Aplicações Phoenix/Elixir), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/maiquitome/elixir-dockerizando-aplicacoes-phoenix-19gg
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ mix phx.new dockerizando_com_ecto --app blog
Dockerfile
do projeto anterior, criar a nossa imagem e subir um contêiner da nossa aplicação:Após isso, recebemos um erro, informando que a conexão com o banco de dados falhou. Para resolvermos isso vamos aprender a usar o
docker-compose
.🐳 Criando o Arquivo docker-compose
O Docker Compose serve para iniciar vários conteiners.
Crie um arquivo na raiz do projeto chamado docker-compose.yml
.
version: "3" # versão do docker-compose
services: # serviços que precisamos colocar em conteiner
# e um desses serviços é a nossa aplicação.
app: # nome da nossa aplicação, pode ser qualquer nome, nesse caso vamos dar o nome de app
build:
context: . # context é o diretório onde a gente está
ports: # pra executar o docker run precisamos passar a porta
- "8080:4000" # o `-` no yml significa que é um array
Este código do arquivo docker-compose.yml
irá executar o Dockerfile e, para isso, vamos executar no terminal o comando docker-compose up
:
$ docker-compose up
Mesmo com o erro do banco de dados, acesse a porta 8080:
No momento, o docker-compose
está servindo apenas para fazer o build da imagem do nosso projeto.
📜 Criando o arquivo SH
Remova o comando CMD ["mix", "phx.server"]
do arquivo Dockerfile
.
Crie um arquivo na raiz do projeto chamado docker_dev_start.sh
.
mix ecto.drop # destrói o banco de dados
mix ecto.setup # cria o banco de dados e executa o arquivo seeds
exec mix phx.server # sobe o servidor
Agora vamos fazer executar este script dentro do docker-compose.yml
. Como estamos em uma máquina Alpine, adicione o seguinte comando command: /bin/sh docker_dev_start.sh
. Se a máquina fosse um Windows, por exemplo, o comando seria diferente.
version: "3" # versão do docker-compose
services: # serviços que precisamos colocar em conteiner
# e um desses serviços é a nossa aplicação.
app: # nome da nossa aplicação, pode ser qualquer nome, nesse caso vamos dar o nome de app
build:
context: . # context é o diretório onde a gente está
command: /bin/sh docker_dev_start.sh # executa o script do arquivo docker_dev_start.sh
ports: # pra executar o docker run precisamos passar a porta
- "8080:4000" # o `-` no yml significa que é um array
Ao executarmos docker-compose up
recebemos um erro:
Para funcionar, precisamos construir novamente a imagem e, para isso, pode usar o comando:
$ docker-compose up --build
🗃 docker-compose가 아닌 banco de dados 구성
Mas ainda temos o erro de conexão com o banco de dados, por isso, precisamos incluir o contêiner do postgres e configurar ele:
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione a configuração abaixo
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
Altere de localhost
para db
no arquivo config/dev.exs
:
E, como alteramos os arquivos, precisamos fazer o build novamente:
$ docker-compose up --build
Agora funciona, mas ainda temos um problema:
Precisamos fazer com o db 실행 totalmente primeiro e, pra isso, vamos colocar uns comandos:
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione o depends_on e o links
depends_on:
- db # nosso app depende do db para funcionar
links:
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
E, como alteramos os arquivos, precisamos fazer o build novamente:
$ docker-compose up --build
E, agora sim, o db executoou primeiro:
DICA: 포데모스 집행관은 다음과 같은 배경을 가지고 있습니다:
$ docker-compose up -d
Reference
이 문제에 관하여(💧🐳Dockerizando Aplicações Phoenix/Elixir), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/maiquitome/elixir-dockerizando-aplicacoes-phoenix-19gg
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
docker-compose.yml
.version: "3" # versão do docker-compose
services: # serviços que precisamos colocar em conteiner
# e um desses serviços é a nossa aplicação.
app: # nome da nossa aplicação, pode ser qualquer nome, nesse caso vamos dar o nome de app
build:
context: . # context é o diretório onde a gente está
ports: # pra executar o docker run precisamos passar a porta
- "8080:4000" # o `-` no yml significa que é um array
docker-compose.yml
irá executar o Dockerfile e, para isso, vamos executar no terminal o comando docker-compose up
:$ docker-compose up
Remova o comando CMD ["mix", "phx.server"]
do arquivo Dockerfile
.
Crie um arquivo na raiz do projeto chamado docker_dev_start.sh
.
mix ecto.drop # destrói o banco de dados
mix ecto.setup # cria o banco de dados e executa o arquivo seeds
exec mix phx.server # sobe o servidor
Agora vamos fazer executar este script dentro do docker-compose.yml
. Como estamos em uma máquina Alpine, adicione o seguinte comando command: /bin/sh docker_dev_start.sh
. Se a máquina fosse um Windows, por exemplo, o comando seria diferente.
version: "3" # versão do docker-compose
services: # serviços que precisamos colocar em conteiner
# e um desses serviços é a nossa aplicação.
app: # nome da nossa aplicação, pode ser qualquer nome, nesse caso vamos dar o nome de app
build:
context: . # context é o diretório onde a gente está
command: /bin/sh docker_dev_start.sh # executa o script do arquivo docker_dev_start.sh
ports: # pra executar o docker run precisamos passar a porta
- "8080:4000" # o `-` no yml significa que é um array
docker-compose up
recebemos um erro:Para funcionar, precisamos construir novamente a imagem e, para isso, pode usar o comando:
$ docker-compose up --build
🗃 docker-compose가 아닌 banco de dados 구성
Mas ainda temos o erro de conexão com o banco de dados, por isso, precisamos incluir o contêiner do postgres e configurar ele:
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione a configuração abaixo
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
Altere de localhost
para db
no arquivo config/dev.exs
:
E, como alteramos os arquivos, precisamos fazer o build novamente:
$ docker-compose up --build
Agora funciona, mas ainda temos um problema:
Precisamos fazer com o db 실행 totalmente primeiro e, pra isso, vamos colocar uns comandos:
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione o depends_on e o links
depends_on:
- db # nosso app depende do db para funcionar
links:
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
E, como alteramos os arquivos, precisamos fazer o build novamente:
$ docker-compose up --build
E, agora sim, o db executoou primeiro:
DICA: 포데모스 집행관은 다음과 같은 배경을 가지고 있습니다:
$ docker-compose up -d
Reference
이 문제에 관하여(💧🐳Dockerizando Aplicações Phoenix/Elixir), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/maiquitome/elixir-dockerizando-aplicacoes-phoenix-19gg
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione a configuração abaixo
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
$ docker-compose up --build
version: "3"
services:
app:
build:
context: .
command: /bin/sh docker_dev_start.sh
ports:
- "8080:4000"
# adicione o depends_on e o links
depends_on:
- db # nosso app depende do db para funcionar
links:
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
ports:
- "5432:5432"
$ docker-compose up --build
$ docker-compose up -d
Reference
이 문제에 관하여(💧🐳Dockerizando Aplicações Phoenix/Elixir), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/maiquitome/elixir-dockerizando-aplicacoes-phoenix-19gg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)