개발 일기

Docker - (1) 본문

컨테이너/Docker

Docker - (1)

이건욱

도커를 사용하기 위해서는 일단 간단한 웹서버를 도커 컨테이너에서 실행을 해보겠습니다.

 

다음과 같이 go lang으로 작성된 웹서버를 작성하였습니다.

package main

import (
	"fmt"
	"log"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		log.Println("receive request")
		fmt.Fprintf(w , "Hello World")
	})

	log.Println("start server")

	log.Fatal(http.ListenAndServe(":8080" , nil))
}

그런 다음 해당 파일을 도커 이미지를 만들기 위해 다음과 같이 Dockerfile을 작성합니다.

FROM golang:1.9

RUN mkdir /gunwook
COPY main.go /gunwook
CMD ["go" , "run", "/gunwook/main.go"]

FROM

이미지를 빌드 할때 베이스 이미지를 미리 지정합니다. 

여기서 받아오는 도커 이미지는 도커 허브라는 레지스트리에 공개 된 것 입니다.

 

RUN

도커 이미지를 실행할 때 실행할 명령을 적습니다. 여기서는 gunwook 이라는 폴더를 만드는데 사용하였습니다.

( 이미지를 빌드 할 때 )

 

COPY

도커가 동작 중인 호스트 머신의 파일이나 디렉터리를 도커 컨테이너 안으로 복사합니다.

 

 CMD

도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정합니다.

인자 표기 방식

동작

CMD ["실행 파일" , "인자1" , "인자2"]

실행 파일에 인자를 전달합니다.

CMD 명령 인자1 인자2

명령과 인자를 지정합니다. 셸에 정의된 변수를 참조 가능

CMD ["인자1" , "인자2"]

ENTRYPOINT에 지정된 명령에 사용할 인자를 전달합니다.

( 컨테이너를 실행 할 때 )

 

ENTRYPOINT

도커 컨테이너를 실행을 시킬때 기본 프로세스를 지정할수 있습니다.

예를 들어 CMD같은 경우에는 도커를 실행을 시킬 때 인자를 주게 되면 사라지지만 ENTRYPOINT을 주면 뒤에 인자 값을 넣어도 사라지지 않습니다.

( 컨테이너를 실행 할 때 )

 

LABEL

이미지를 만든 사람의 이름등을 적을 수 있습니다.

 

ENV

도커 컨테이너 안에서 사용할 수 있는 환경 변수를 지정합니다.

 

ARG

이미지를 빌드 할때 관련된 정보를 함께 넣을 수 있습니다. ( 이미지를 빌드 할때만 사용 할수 있습니다. )

 

이제 다음과 같이 도커 이미지를 생성합니다.

docker image build -t 이미지명[:태그명] Dockerfile의 경로

// namespace는 이미지명의 충돌을 피하기 위해서 이렇게 네임 스페이스를 붙일 수 있습니다.
// docker image build -t gunwook/namespace:latest .

 

이제 성공을 했다면 다음과 같이 입력합니다.

docker image ls

생성된 이미지의 REPOSITORY , TAG , IMAGE ID , CREATED , SIZE 을 알수가 있습니다.

이제 다음과 같이 실행을 시킬수 있습니다.

 

실행을 시킬 때에는 두가지 방법이 있습니다.

- docker container run -d -p 9000:8080 gunwook:latest (일반형)

- docker run -d -p 9000:8080 gunwook:latest (축약형)

 

기본적으로는 포어그라운드에서 동작을 하지만 백그라운드로 컨테이너를 등록하고 싶을 때에는 -d를 사용하여 컨테이너를 실행시킬수 있습니다.

 

애플리케이션에서 8080포트를 리스닝 하고 있지만 이 포트는 컨테이너 포트입니다. 그래서 접근을 했을 때 올바른 응답을 받을수가 없습니다. 따라서 외부에서 온 요청을 컨테이너안에 전달해주는 포트포워딩을 해야합니다. 이 기능이 -p 옵션 입니다.

 

'컨테이너 > Docker' 카테고리의 다른 글

도커 컨테이너의 운영 및 관리 ?  (0) 2020.05.05
Docker Container  (0) 2020.04.21
docker image (2)  (0) 2020.04.19
Docker UI?  (0) 2020.04.18
Docker 기본 개념 ?  (0) 2020.04.18
Comments