[Docker] #6 container run 옵션 살펴보기

다채로운·2022년 6월 12일
0

Docker

목록 보기
6/6
post-custom-banner

Docker container run 옵션 살펴보기

Dockerfile이용해 webserver 구동하기

Dockerfile을 이용하여 웹서버를 실행하는 컨테이너를 예시로 활용하겠습니다.
아래 파일을 참고하여 파일을 생성해주시기 바랍니다.

Dockerfile 소스코드

#Dockerfile
FROM   golang:1.9
RUN    mkdir /echo
COPY   main.go /echo
CMD    [ "go", "run", "/echo/main.go" ]

main.go 소스코드

#main.go 파일
package main
import (
	"fmt"
	"log"
	"net/http"
)
func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		log.Println("received request")
		fmt.Fprintf(w, "Hello Docker 2 !!")
	})
	log.Println("start server")
	server := &http.Server{Addr: ":8080"}
	if err := server.ListenAndServe(); err != nil {
		log.Println(err)
	}
}

Dockerfile로 이미지를 빌드합니다.
docker image build -t web:1.0 .

container를 run하게 되면 실행상태가 되는데, 실행모드는 attach detach 두 가지가 있습니다. 각 모드에 대해서 간단히 설명하자면 아래 내용과 같습니다. 설명으로는 이해하기 어려울 수 있으니 실습을 함께 진행해보겠습니다.

docker container attach, detach 실행모드

docker container 실행모드
attach 모드: 실행되고 있는 container에 연결되어 콘솔에서 다른 작업이 불가능함, attach모드로 실행 후 빠져나올 시 container가 종료됨
detach모드: container를 background로 실행, exec 명령어를 통해 컨테이너에 연결 가능함

먼저 attach모드로 container를 실행해보겠습니다.
docker container run -p 8888:8080 web:1.0

웹서버가 실행되고, container를 실행한 콘솔(cmd.exe)에 main.go에서 지정해놓은 문구가 출력됩니다.
그러나 사용자가 입력을 할 수는 없고 출력만 볼 수 있으며 컨테이너가 종료되기 전까지는 콘솔 제어권을 가질 수 없습니다.
그러므로 다른 콘솔창을 열어 container를 중지해야만 콘솔 제어권을 다시 부여받을 수 있습니다.

docker container stop [container id]

그렇다면! attach 모드에서도 사용자 입출력을 연결할 수 있는 방법은 없을까요?
바로 -it옵션을 통해 가능합니다.

-it옵션

-it옵션이 무엇인지는 docker container run --help 명령어를 통해 출력되는 설명을 통해 알아보겠습니다.

-i, --interactive Keep STDIN open even if not attached,
표준 입력이 활성화되어 입력이 가능함

-t, --tty Allocate a pseudo-TTY
tty 모드가 활성화 되어 container에 연결이 가능함

첫번째로 실행했던 container와는 다르게 ctrl+c를 입력하여 container를 중지할 수 있습니다.

attach모드로 실행한 뒤, ctrl+p+q를 입력하여 detach모드로 변경도 가능합니다.

콘솔 제어권이 다시 부여되었지만 여전히 container는 up 즉, 실행되는 상태입니다.

-d 옵션(detach모드)

container를 background로 실행할 수 있는 -d 옵션을 사용하여 detach모드로 실행해보겠습니다.

background로 container가 계속 실행중이며, 웹서버도 잘 작동하는 것을 볼 수 있습니다.
웹서버 같은 경우 지속적으로 구동되는 서비스이여야 하므로, 실무에서는 주로 -d 옵션을 사용합니다.

profile
네트워크,보안 운영하는 일개미의 velog
post-custom-banner

0개의 댓글