Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
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
1453
 ## 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
MLOps with Joinc - Kubeflow 설치
Vertex Gemini 기반 AI 에이전트 개발 05. 첫 번째 LLM 애플리케이션 개발
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Vertex Gemini 기반 AI 에이전트 개발-소개
생성 AI 모델 Flux.1 설치 및 사용
GPT를 이용한 Reranker 테스트
Archive Posts
Tags
docker
golang
msa
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags