Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
Books*
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
Golang Application docker 빌드
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2023-09-30
2023-09-30
500
 ## GoLang Dockerizing Go 애플리케이션을 Dockerizing 해보자. 기본적인 도커 환경은 설정되어 있는 것으로 가정한다. 현재 개발 환경은 아래와 같다. * Ubuntu 리눅스 23.04 * Docker Version 24.0.6 * Go version 1.21.1 ## 예제 Go 애플리케이션 go mod init 명령을 이용해서 모듈 관리를 시작한다. ```shell $ go mod init joinc.co.kr/example/hello go: creating new go.mod: module joinc.co.kr/example/hello ``` Go 코드는 아래와 같다. 간단한 http 애플리케이션이다. ```go package main import ( "fmt" "net/http" "github.com/gorilla/mux" ) func main() { r := mux.NewRouter() fmt.Println(">> Server start!!") r.HandleFunc("/", handlerHello) http.ListenAndServe(":8000", r) } func handlerHello(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello World\n") } ``` ## Docker 이미지 빌드 Dockerfile을 만들고 이미지를 만들어보자. ```dockerfile FROM golang:1.21 WORKDIR /user/src/app COPY go.mod go.sum ./ COPY . . RUN go build -v -o /usr/local/bin/app ./... CMD ["app"] ``` 로컬 개발 환경과 동일한 빌드환경을 만들기 위해서 **golang:1.21** 이미지를 사용했다. 빌드와 실행을 모두 docker 컨테이너에서 실행하기 때문에 로컬 환경과 맞출 필요는 없지만, 로컬 PC에 설치된 데이터베이스와의 연동을 위해서 로컬에서 직접 실행해야 하는 경우도 있어서 맞춰두면 편하다. 이미지를 빌드 해보자. ```text $ docker build -t joinc/hello:0.1 -t joinc/hello:latest . ``` ### 테스트 Docker 이미지가 빌드됐는지 확인해보자. ``` $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE joinc/hello 0.1 432d5bab26ff 14 hours ago 887MB joinc/hello latest 432d5bab26ff 14 hours ago 887MB ``` 컨테이너를 실행하고 테스트해보자. ``` $ docker run -d --name joinc-hello joinc/hello 0fab85f565c6ee732bd0fc08d2bc5b4646bfe48fab8b7f415850f147d31cf451 ``` 컨테이너의 IP를 확인해보자. ``` $ docker inspect joinc-hello | grep IP "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, ``` curl로 테스트한다. ``` $ curl 172.17.0.2:8000 Hello World ``` ## 정리 GoLang 애플리케이션을 Dockerizing 하는 방법을 살펴봤다. Go 빌드환경을 docker 이미지로 제공하기 때문에, 누가 개발하든지 동일한 환경에서 빌드와 실행을 할 수 있다. 이 문서로 쉽게 개념을 잡았겠지만, 대부분의 go 애플리케이션이 데이터베이스와 함께 작동하거나 내부의 다른 애플리케이션을 호출해야 하기 때문에 실무에서 사용하기 위해서는 추가적인 학습이 필요하다. 다음번에는 **docker-compose**를 이용해서 go application을 개발 테스트하는 방법을 살펴보도록 하겠다.
Recent Posts
DevOps의 과거, 현재 미래에 대한 Q and A
SNS, Lambda로 Slack에 메시지 보내기
우분투 리눅스 인스턴스를 재부팅하지 않고 AWS EBS 볼륨을 늘리기
ECR에 docker 이미지 push
pulumi로 S3 정적 웹사이트 구성하기
S3를 이용해서 정적 웹 사이트 서비스 하기
초보자를 위한 AWS 네트워크 - 2. VPC 소개
Golang Application을 docker compose로 개발하기
Ubuntu Linux에 docker compose 설치하기
Golang Application docker 빌드
Archive Posts
2023 (64)
1Q (34)
2Q (14)
3Q (7)
4Q (9)
2022 (56)
1Q (1)
2Q (1)
3Q (33)
4Q (21)
2021 (39)
1Q (4)
2Q (14)
3Q (16)
4Q (5)
2020 (71)
1Q (19)
2Q (19)
3Q (19)
4Q (14)
2019 (97)
1Q (10)
2Q (30)
3Q (42)
4Q (15)
2018 (93)
1Q (16)
2Q (28)
3Q (38)
4Q (11)
2017 (136)
1Q (44)
2Q (31)
3Q (30)
4Q (31)
2016 (2237)
1Q (2189)
2Q (21)
3Q (12)
4Q (15)
2015 (21)
1Q (21)
Tags
docker
golang
msa
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags