요약!
•
출처
•
소스코드
package main
import (
"fmt"
"github.com/julienschmidt/httprouter"
"net/http"
"log"
"os"
)
func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
hostname, err := os.Hostname()
if err == nil {
fmt.Fprint(w, "Welcome! " + hostname +"\n")
} else {
fmt.Fprint(w, "Welcome! ERROR\n")
}
}
func main() {
router := httprouter.New()
router.GET("/", Index)
log.Fatal(http.ListenAndServe(":8080", router))
}
Go
복사
•
빌드방법 요약
•
apt install golnag : 고 랭기지를 설치
•
go get : 외부 라이브러리 임포트
•
go build : main go 를 빌드하여 main 파일 생성
•
main : 명령 실행 후 정상 동작하는 지 테스트
•
dockerfile 패키징
•
FROM golang 1 11 버전의 컨테이너 이미지를 사용
•
로컬 디렉터리의 main 파일을 이미지의 usr src /app 디렉터리에 동일한 이름으로 추가
•
이미지를 실행할 때 usr src /app/main 실행
FROM golang:1.11
WORKDIR /usr/src/app
COPY main /usr/src/app
CMD ["/usr/src/app/main"]
Go
복사
시작!
•
아래의 명령어 검색
vim main.go
Go
복사
•
vim이 없을 경우 설치
apt install vim
Go
복사
•
그리고 아래의 소스코드를 복사하고 붙여넣기
package main
import (
"fmt"
"github.com/julienschmidt/httprouter"
"net/http"
"log"
"os"
)
func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
hostname, err := os.Hostname()
if err == nil {
fmt.Fprint(w, "Welcome! " + hostname +"\n")
} else {
fmt.Fprint(w, "Welcome! ERROR\n")
}
}
func main() {
router := httprouter.New()
router.GET("/", Index)
log.Fatal(http.ListenAndServe(":7080", router))
}
Go
복사
•
esc 키 눌러서 모드를 변경 후 그리고 shift 누르고 : 버튼 누른다음 wq 작성한다.
•
예시
•
그리고 ENTER 키 누르기
•
go를 실행시키기 위해서 go lang 설치 진행(오래 걸릴수 있음)
sudo apt-get install golang
Go
복사
•
github에서 레포지토리 다운을 받기위한 작업 수행
go get github.com/julienschmidt/httprouter
Go
복사
•
그다음에 빌드하기
go build main.go
Go
복사
•
main이라는 이름을 가진 go 파일을 실행시키기
./main
Go
복사
•
firefox 브라우저를 열어서 주소창에 아래처럼 검색
http://127.0.0.1:7080/
Go
복사
•
예시화면
•
아래서 부터는 도커를 빌드하기 위한 작업이다.
mkdir http_go
mv main ./http_go/
cd http_go
vim dockerfile
Go
복사
•
도커 파일 내용은 아래와 같다.
FROM golang:1.11
WORKDIR /usr/src/app
COPY main /usr/src/app
CMD ["/usr/src/app/main"]
Docker
복사
•
저장하고 나서 docker를 실행해준다.
docker build -t htttp-go .
Docker
복사
•
실행 콘솔화면
root@master:~/http_go# docker build -t htttp-go .
Sending build context to Docker daemon 6.693MB
Step 1/4 : FROM golang:1.11
1.11: Pulling from library/golang
4ae16bd47783: Pull complete
bbab4ec87ac4: Pull complete
2ea1f7804402: Pull complete
96465440c208: Pull complete
16a3d8aca6cd: Pull complete
3a62db25bdbe: Pull complete
8c47c6b16c60: Pull complete
Digest: sha256:e972c78795b22d5cfab02ac410aa2305fcc036319a7af51065d1af583cd3ec04
Status: Downloaded newer image for golang:1.11
---> 43a154fee764
Step 2/4 : WORKDIR /usr/src/app
---> Running in 05b6278c0a8c
Removing intermediate container 05b6278c0a8c
---> fc354985a27f
Step 3/4 : COPY main /usr/src/app
---> 08d2c642fb61
Step 4/4 : CMD ["/usr/src/app/main"]
---> Running in 579117bcec05
Removing intermediate container 579117bcec05
---> dd490d72f14f
Successfully built dd490d72f14f
Successfully tagged htttp-go:latest
root@master:~/http_go#
Docker
복사
•
도커 실행
docker run -d -p 7080:7080 --rm htttp-go
Docker
복사
•
firefox 브라우저를 열어서 주소창에 아래처럼 검색
http://127.0.0.1:7080/
Go
복사
•
실행화면 (밑줄 부분은 도커 호스트 네임)
•
호스트 네임 보는법
root@master:~/http_go# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d23da2855b7d htttp-go "/usr/src/app/main" About a minute ago Up About a minute 0.0.0.0:7080->7080/tcp elated_wilson
Docker
복사
도커로 배포까지 하기(예시 도커아이디는 yklovejesus)
docker tag htttp-go yklovejesus/htttp-go
docker login
Docker
복사
•
로그인까지 완료 했으면 push 작업 수행
docker push yklovejesus/htttp-go
Docker
복사
Go로 만든 컨테이너를 쿠버네티스에 올리기
•
실행터미널 환경 : master노드에서 일반 화면
•
명령어
kubectl create deployment htttp-go --image=yklovejesus/htttp-go
Docker
복사
•
정상적으로 실행 되었으면 아래의 명령어를 쳐서 하위의 pod을 확인한다.
kubectl get deploy
kubectl get rs
kubectl get pod
Go
복사
•
실행화면
server1@master:~$ kubectl create deployment htttp-go --image=yklovejesus/htttp-go
deployment.apps/htttp-go created
server1@master:~$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
htttp-go 0/1 1 0 29s
server1@master:~$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
htttp-go 1/1 1 1 2m11s
server1@master:~$ kubectl get rs
NAME DESIRED CURRENT READY AGE
htttp-go-797d679bb8 1 1 1 2m11s
server1@master:~$ kubectl get pod
NAME READY STATUS RESTARTS AGE
htttp-go-797d679bb8-l7pzm 1/1 Running 0 2m19s
nginx 1/1 Running 0 15h
server1@master:~$
Go
복사
•
htttp-go를 노출시킬수 있도록 한다.
kubectl expose deployment htttp-go --port=7080 --target-port=7080 --type=LoadBalancer
Go
복사
•
kubectl get svc를 통해 확인해보자
server1@master:~$ kubectl expose deployment htttp-go --port=7080 --target-port=7080 --type=LoadBalancer
service/htttp-go exposed
server1@master:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
htttp-go LoadBalancer 10.100.116.253 <pending> 7080:31637/TCP 13s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16h
server1@master:~$
Go
복사
•
(작성하면 안됨) 혹시라도 잘못 만들었으면 아래의 명령어로 해결하자
kubectl delete deploy htttp-go
Go
복사
•
htttp-go가 pending이 되다가 external-ip를 뿌려줄텐데 실시간으로 확인하려면 아래의 명령어로 확인하자
server1@master:~$ kubectl get svc -w
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
htttp-go LoadBalancer 10.100.116.253 <pending> 7080:31637/TCP 13s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16h
Go
복사
•
그러다가 EXTERNAL-IP 부분에 숫자가 나오면 그걸 복사해서 붙여넣고 :7080포트로 접속을 수행한다.
•
CLUSTER-IP에 적힌 주소로 접속해도 똑같이 go web을 사용할 수 있다.
•
URL 명
10.100.116.253:7080
Go
복사