Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/leoviana00/golang-minimal-image
Desafio relacionado ao pilar DevOps - Módulo Docker do Curso Full Cycle 2.0
https://github.com/leoviana00/golang-minimal-image
docker golang multistage-docker scratch
Last synced: 27 days ago
JSON representation
Desafio relacionado ao pilar DevOps - Módulo Docker do Curso Full Cycle 2.0
- Host: GitHub
- URL: https://github.com/leoviana00/golang-minimal-image
- Owner: leoviana00
- Created: 2020-11-26T16:24:37.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-12-08T14:21:07.000Z (about 3 years ago)
- Last Synced: 2023-03-08T16:33:23.334Z (almost 2 years ago)
- Topics: docker, golang, multistage-docker, scratch
- Language: Dockerfile
- Homepage:
- Size: 61.5 KB
- Stars: 2
- Watchers: 2
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Projeto prtático: Otimização de uma imagem golang
## 🌱 Descrição do projeto
Esse desafio é muito empolgante principalmente se você nunca trabalhou com a linguagem Go!
Você terá que publicar uma imagem no docker hub. Quando executarmos:- docker run /codeeducation
Temos que ter o seguinte resultado: `Code.education Rocks!`
Se você perceber, essa imagem apenas realiza um print da mensagem como resultado final, logo, vale a pena dar uma conferida no próprio site da Go Lang para aprender como fazer um "olá mundo".
Lembrando que a Go Lang possui imagens oficiais prontas, vale a pena consultar o Docker Hub.
A imagem de nosso projeto Go precisa ter menos de 2MB =)
Dica: No vídeo de introdução sobre o Docker quando falamos sobre o sistema de arquivos em camadas, apresento uma imagem "raiz", talvez seja uma boa utilizá-la.
Divirta-se
## Utilizando o multi-stage build para compilar a aplicação e otimizar a imagem
## Dockerfile.scratch
- Stage 1
```
# Iniciando uma imagem base golang:alpine
FROM golang:alpine AS builder# criando diretório de trabalho
WORKDIR /src# Copiando o app
COPY . .# Compilando o binário removendo informações de debug
RUN go build -ldflags '-s -w' main.go
```
- Stage 2
```
# Iniciando com scratch
FROM scratch# diretório de trabalho
WORKDIR /# copiando o binário
COPY --from=builder /src /# executando
CMD ["./main"]
```## Inserindo alguns parâmetros para o linker via -ldflags
- Parâmetros para o linker que vão ajudar a diminuir o tamanho do executável final ( -ldflags '-s -w' )
```
O parâmetro -s remove informações de debug do executável e o -w impede a geração do DWARF (Debugging With Attributed Record Formats).
```## Build
```
docker build -t leoviana00/codeeducation . -f Dockerfile.scratch
```## Images
```
docker images
```
![](image/go-images.png)## Run
```
docker run leoviana00/codeeducation
```
![](image/go-scratch.png)## Docker login
```
docker login
```
## Push```
docker pull leoviana00/codeeducation
```
## Pull```
docker pull leoviana00/codeeducation
```## Referências
- http://goporexemplo.golangbr.org/hello-world.html
- https://hub.docker.com/_/scratch/
- https://hub.docker.com/_/golang/
- https://imasters.com.br/desenvolvimento/compilacao-estatica-com-golang/