Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
Documentação de DevOps do C3SL
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Root
Documentação de DevOps do C3SL
Commits
3c219cf5
Commit
3c219cf5
authored
1 year ago
by
MarcusVRP
Browse files
Options
Downloads
Patches
Plain Diff
feat(docker-fundamentals): almost finishing the first half
Signed-off-by:
Marcus V.
<
mvrp21@inf.ufpr.br
>
parent
fb9ff3d6
Branches
Branches containing commit
No related tags found
Loading
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
source/pages/guides/docker-fundamentals.md
+120
-15
120 additions, 15 deletions
source/pages/guides/docker-fundamentals.md
with
120 additions
and
15 deletions
source/pages/guides/docker-fundamentals.md
+
120
−
15
View file @
3c219cf5
...
@@ -3,6 +3,9 @@
...
@@ -3,6 +3,9 @@
TODO: rever tudo com calma, acho que usei um monte de terminologias que não são
TODO: rever tudo com calma, acho que usei um monte de terminologias que não são
as 'oficiais' e que tirei da cabeça.
as 'oficiais' e que tirei da cabeça.
TODO: em algum lugar (idealmente lá pro final kkkkkkkk) colocar sobre pesquisar
*samples*
de Dockerfile e docker-compose.yml.
Assume-se que quem ler essa documentação é familiarizado com os conceitos
Assume-se que quem ler essa documentação é familiarizado com os conceitos
básicos de Docker[^cite_docker_concepts].
básicos de Docker[^cite_docker_concepts].
...
@@ -10,12 +13,17 @@ Antes de começar a executar comandos é preciso ter Docker instalado no sistema
...
@@ -10,12 +13,17 @@ Antes de começar a executar comandos é preciso ter Docker instalado no sistema
Há documentação oficial[^cite_docker_install] sobre instalação.
Há documentação oficial[^cite_docker_install] sobre instalação.
## Trabalhando com **contêineres**
## Trabalhando com **contêineres**
TODO: rootless-docker e sobre como ele é executado
TODO: rootless-docker e sobre como ele é executado (tem a ver com instalação,
que não foi comentado ainda)
### Utilizando imagens pré-construídas
### Utilizando imagens pré-construídas
Vamos iniciar com prática: pegar uma imagem que já foi construída por alguém e
Vamos iniciar com prática: pegar uma imagem que já foi construída por alguém e
executar um contêiner baseado nela. Para este guia foi escolhida a imagem do
executar um contêiner baseado nela. Para este guia foi escolhida a imagem do
NodeJS[^cite_nodejs].
NodeJS[^cite_nodejs].
TODO:
`docker stop`
e
`docker run`
ficariam melhores na seção 'Trabalhando com
contêineres'
Execute o comando
`docker run node`
. A saída deve ser similar à seguinte:
Execute o comando
`docker run node`
. A saída deve ser similar à seguinte:
```
```
...
@@ -341,7 +349,7 @@ root@devops:~/node-test#
...
@@ -341,7 +349,7 @@ root@devops:~/node-test#
O terminal acima é o que chamamos de 'cliente'.
O terminal acima é o que chamamos de 'cliente'.
:::{note}
:::{note}
Você pode acessar essas URLs no navegador ao invés de usar curl no terminal.
Você pode acessar essas URLs no navegador ao invés de usar
`
curl
`
no terminal.
Mas não tem tanta graça ;)
Mas não tem tanta graça ;)
:::
:::
...
@@ -381,14 +389,14 @@ FROM node:lts
...
@@ -381,14 +389,14 @@ FROM node:lts
WORKDIR
/app/
WORKDIR
/app/
EXPOSE
3000
COPY
package.json /app/package.json
COPY
package.json /app/package.json
RUN
npm
install
EXPOSE
3000
COPY
. /app/
COPY
. /app/
RUN
npm
install
CMD
[ "npm", "start" ]
CMD
[ "npm", "start" ]
```
```
...
@@ -601,10 +609,6 @@ Entretanto, antes de vermos como melhorar a interação com os contêineres
...
@@ -601,10 +609,6 @@ Entretanto, antes de vermos como melhorar a interação com os contêineres
vamos dar uma olhada em alguns detalhes que deixamos passar.
vamos dar uma olhada em alguns detalhes que deixamos passar.
##### Ordenando as camadas
##### Ordenando as camadas
TODO: MUCHO TEXTO. Tem que ter um subway surfers e mostrar 4 palavras por
vez pras pessoas acompanharem.
Talvez você já tenha criado o mesmo contêiner mais de uma vez e percebeu no
Talvez você já tenha criado o mesmo contêiner mais de uma vez e percebeu no
output que o Docker é 'inteligente'. Ele não perderá tempo refazendo passos,
output que o Docker é 'inteligente'. Ele não perderá tempo refazendo passos,
afinal isso não é eficiente.
afinal isso não é eficiente.
...
@@ -622,10 +626,97 @@ as camadas **após** a camada que foi alterada (ou teve dependências alteradas)
...
@@ -622,10 +626,97 @@ as camadas **após** a camada que foi alterada (ou teve dependências alteradas)
Assim não é necessário ficar buscando dependências entre camadas, e a ordenação
Assim não é necessário ficar buscando dependências entre camadas, e a ordenação
ideal delas fica a encargo do usuário.
ideal delas fica a encargo do usuário.
###### O Dockerfile fornecido
Para que saber isso? Simples. O Dockerfile fornecido logo acima não necessariamente
Para que saber isso? Simples. O Dockerfile fornecido logo acima não necessariamente
o ideal. Por quê? Pois a instrução `EXPOSE`
o ideal. Por quê? Pois a instrução `COPY . /app/` vem antes da `RUN npm install`.
Isso implica em sempre que o código for modificado e a imagem for reconstruída o
Docker vai re-executar o `npm install`, que no geral é bem demorado.
Faça um teste: modifique a seguinte linha de código do arquivo `app.js`:
```
javascript
const text =
`O contador eh ${counter}`
;
```
Para algo como:
```
javascript
const text =
`Contador = ${counter}`
;
```
Depois disso execute `docker build . -t <nome-para-imagem>` de novo. O output deve
ser similar ao seguinte:
```
root@devops:~/node-test# docker build . -t teste-node
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
Install the buildx component to build images with BuildKit:
https://docs.docker.com/go/buildx/
Sending build context to Docker daemon 2.651MB
Step 1/7 : FROM node:lts
---> 2e805f601f2b
Step 2/7 : WORKDIR /app/
---> Running in 5aa80a980286
---> Removed intermediate container 5aa80a980286
---> aa3ebb863e52
Step 3/7 : EXPOSE 3000
---> Running in f67d61f55aec
---> Removed intermediate container f67d61f55aec
---> dcec86fcce1a
Step 4/7 : COPY package.json /app/package.json
---> 9967b38a43c7
Step 5/7 : RUN npm install
---> Running in 88bad8fe183f
added 64 packages, and audited 65 packages in 2s
12 packages are looking for funding
run
`npm fund`
for details
........................................................ to achando q o exemplo do expose n é dos melhores
found 0 vulnerabilities
npm notice
npm notice New minor version of npm available! 10.2.4 -> 10.5.0
npm notice Changelog:
<https://github.com/npm/cli/releases/tag/v10.5.0>
npm notice Run
`npm install -g npm@10.5.0`
to update!
npm notice
---> Removed intermediate container 88bad8fe183f
---> ee748f133f4b
Step 6/7 : COPY . /app/
---> bc09849bf32c
Step 7/7 : CMD [ "npm", "start" ]
---> Running in ba583883c65f
---> Removed intermediate container ba583883c65f
---> 86f79ca5082a
Successfully built 86f79ca5082a
Successfully tagged teste-node:latest
root@devops:~/node-test#
```
Perceba que ...........................
Vamos agora mudar a ordem das camadas no Dockerfile:
```
Dockerfile
FROM node:lts
WORKDIR /app/
COPY package.json /app/package.json
EXPOSE 3000
COPY . /app/
RUN npm install
CMD [ "npm", "start" ]
```
Faremos o primeiro `build`. Ele servirá para termos a base. No output você deve
perceber que tudo desde ls ..........................
TODO: o resto
:::{admonition} No fim das contas o resultado é o mesmo.
:::{admonition} No fim das contas o resultado é o mesmo.
Mudar isso não altera o contêiner final, apenas pode acelerar o `build` em casos
Mudar isso não altera o contêiner final, apenas pode acelerar o `build` em casos
...
@@ -642,6 +733,20 @@ Vai achar o que fazer, vai.
...
@@ -642,6 +733,20 @@ Vai achar o que fazer, vai.
#### COPY e RUN
#### COPY e RUN
TODO: eventualmente comentar do .dockerignore
TODO: eventualmente comentar do .dockerignore
:::{tip}
Vamos supor que você só precisa de um pequeno conjunto de seus arquivos
para executar o contêiner corretamente. Por exemplo, em um programa em C
isso poderia ser o `Makefile` e alguns dos `*.c`.
Não é necessário (nem recomendado) copiar mais arquivos do que o necessário,
afinal isso não é eficiente. Uma solução para isso é explicitar com o `COPY`
cada um dos arquivos necessários, ou diretórios se tudo neles for necessário.
Se você já tem familiaridade com o Git provavelmente conhece o arquivo
`.gitignore`. Com docker existe o arquivo `.dockerignore` para arquivos
não serem copiados com a instrução `COPY`.
:::
#### CMD vs ENTRYPOINT
#### CMD vs ENTRYPOINT
:::{seealso}
:::{seealso}
...
@@ -705,7 +810,7 @@ não há por que mexer ninguém irá mexer.
...
@@ -705,7 +810,7 @@ não há por que mexer ninguém irá mexer.
:::
:::
### O arquivo `docker-compose.yml`
### O arquivo `docker-compose.yml`
Aqui vamos longe
;
Aqui vamos longe
.
### Por que agora?
### Por que agora?
Por que ver toda a parte difícil antes de `compose`?
Por que ver toda a parte difícil antes de `compose`?
...
@@ -739,7 +844,7 @@ ferramentas como GitLabCI[^cite_gitlab_ci] para realizar esse deploy com
...
@@ -739,7 +844,7 @@ ferramentas como GitLabCI[^cite_gitlab_ci] para realizar esse deploy com
qualquer *merge* na branch `main`, por exemplo.
qualquer *merge* na branch `main`, por exemplo.
:::
:::
###
Produçã
o e
D
esenvolvimento
###
Cicl
o
d
e
d
esenvolvimento
## TODO: Fernando comentou sobre docker debian12 em host debian9 -> estudar
## TODO: Fernando comentou sobre docker debian12 em host debian9 -> estudar
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment