Dotnet Core em Docker


Esse nosso passo a passo nós utilizaremos dois terminais, vamos chamar de terminal A e terminal B

No terminal A com docker já instalado baise a imagem microsoft/dotnet

[root@localhost ~]# docker run -ti microsoft/dotnet
Unable to find image ‘microsoft/dotnet:latest’ locally
latest: Pulling from microsoft/dotnet
cd0a524342ef: Already exists
e39c3ffe4133: Already exists
85334a7c2001: Already exists
9627f78550cf: Already exists
81ac746939b3: Already exists
cfee4c781788: Already exists
Digest: sha256:ad02713e78f4b964eadf7432388bf8662082bf7b43be8da3af366660dcdcd6d0
Status: Downloaded newer image for microsoft/dotnet:latest
root@bc972b3958ea:/#

Ao executar o comando acima, o docker baixa a imagem base para rodarmos a aplicação .net core (no meu caso ele não baixou porque eu já tinha executado esse comando anteriormente) e “entra” dentro do docker, de uma maneira similar a entrar em uma máquina virtual. Você pode observar que passamos de

[root@localhost ~]# para root@01d634f5ccc2:/#

Dentro do nosso docker crie um diretório onde colocaremos a nossa aplicação

root@01d634f5ccc2:/# mkdir -p /opt/dotnet-core/

No terminal B vamos criar a nossa própria imagem no docker hub. Para isso crie uma conta (https://hub.docker.com)
Após criar a conta autentique a através da linha de comando.

[root@localhost dotnet-core]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don’t have a Docker ID, head over to https://hub.docker.com to create one.
Username: enamba
Password:
Login Succeeded

Enquanto o docker esta UP no terminal A vamos executar no terminal B o comando “docker ps” conseguimos listar os containers em execução. Vamos utilizar o valor do  “Container ID” para commitar todas as alterações que fizemos dentro do docker. (a criação do diretório)

[root@localhost ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc972b3958ea microsoft/dotnet “/bin/bash” 2 minutes ago Exited (130) 3 seconds ago   sleepy_bhaskara

Vamos fazer um “fork” do microsoft/dotnet para realizarmos alterações necessárias para executarmos a nossa aplicação.

[root@localhost ~]# docker commit –message=”base .net core” –pause=true bc972b3958ea enamba/dotnet_core
sha256:4dddc46bb7ab87c6f9e50b4622e0f7fc791402d25b9e89bcead2866196d11bcb

Com a conta no docker hub criada, autenticado e o container versionado vamos subir para o docker register que nesse caso é o docker hub.

[root@localhost ~]# docker push enamba/dotnet_core
The push refers to a repository [docker.io/enamba/dotnet_core]
47a4c1a61496: Pushed
b6beea1d002a: Mounted from microsoft/dotnet
5a2162f18fc7: Mounted from microsoft/dotnet
97816a563822: Mounted from microsoft/dotnet
d359ab38b013: Mounted from microsoft/dotnet
682e7cee9d37: Mounted from microsoft/dotnet
295d6a056bfd: Mounted from microsoft/dotnet
latest: digest: sha256:f6951cdc8991a43e5c91c03daa60aa452977026bd898488fce0f0621c57f5d83 size: 1800

Com a nossa imagem docker commited e salva em um docker register, agora precisamos criar uma receita/script para rodar a aplicação.
O primeiro arquivo é o Dockerfile uma boa prática é deixar o script da sua aplicação fora do Dockerfile para não gerar confusão das configurações necessária para a aplicação e as configurações necessárias para subir o docker.

O Dockerfile pode ser obtido através do link (https://raw.githubusercontent.com/enamba/dotnet-core/v0/Dockerfiles/Dockerfile)

FROM enamba/dotnet_core:latest
ENV ASPNETCORE_URLS http://*:5000
WORKDIR /tmp/
RUN curl -SL https://raw.githubusercontent.com/enamba/dotnet-core/v0/Dockerfiles/script.sh –output script.sh \ 
&& chmod 700 script.sh \
&& ./script.sh \
&& rm script.sh
WORKDIR /opt/dotnet-core/
ENV ASPNETCORE_URLS http://*:5000
EXPOSE 5000
ENTRYPOINT [“dotnet”, “api.dll”]
COPY . /opt/dotnet-core

O script tem apenas um script shell com o que é necessário para subir a aplicação: https://raw.githubusercontent.com/enamba/dotnet-core/v0/Dockerfiles/script.sh

#! /bin/bash
mkdir -p /opt/dotnet-core/
git clone -b v0 https://github.com/enamba/dotnet-core.git /opt/dotnet-core/
cd /opt/dotnet-core/
git checkout v0
dotnet restore
dotnet run

O código da aplicação esta commited em https://github.com/enamba/dotnet-core.git Logo ao criar o docker sempre vai ser feito com a última versão. Esse modelo é prático para deixar com o time de desenvolvimento, mas para um ambiente homologação e produção pode gerar problemas na governança das promoções de ambientes e para isso pode seguir a estratégia de salvar no docker register a versão final.

E por fim para executar o docker basta executar o comando abaixo:

docker build -t enamba/dotnet_core https://raw.githubusercontent.com/enamba/dotnet-core/v0/Dockerfiles/Dockerfile

Ele já utiliza o Dockerfile no github e que faz o fluxo completo.

Qualquer dúvida é só perguntar…

Você pode seguir este artigo através do RSS 2.0 feed. Você pode deixar uma resposta, ou trackback do seu próprio site.

Deixe um Comentário

Time limit is exhausted. Please reload CAPTCHA.

*