본문 바로가기

Cloud/Doker

[docker] docker -it 와 -d 옵션의 차이점

-it(-i + -t)옵션은 컨테이너 내부로 진입하도록 attach 가능한 상태로 설정한다면 -d는 detached 모드로 컨테이너를 실행한다.

detached 모드는 컨테이너를 백그라운드에서 동작하는 애플리케이션으로써 실행하도록 설정한다.

 

앞 글에서 우분투, centos 컨테이너를 생성한 것처럼 -it 옵션으로 run을 실행하면 표준 입출력이 활성화된, 상호작용이 가능한 셸 환경을 사용할 수 있다.

 

우분투나 centos 같은 이미지는 컨테이너가 실행될 때 /bin/bash가 실행되게 설정있다.

docker ps로 COMMAND에 표시되는 /bin/bash가 여기에 해당된다.

# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED              STATUS          PORTS     NAMES
3f56aa6d58cc   centos:7   "/bin/bash"   About a minute ago   Up 10 seconds             great_moser

 

하지만 -d 옵션으로 컨테이너를 실행시키면 입출력이 없는 상태로 컨테이너를 실행한다.

컨테이너 내부에서 프로그램이 터미널을 차치하는 포그라운드로 실행돼 사용자의 입력을 받지 않는다.

Detached모드인 컨테이너는 반드시 컨테이너에서 프로그램이 실행돼야 하며, 포그라운드 프로그램이 실행되지 않으면 컨테이너는 종료된다.

# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                        PORTS     NAMES
c956367a62d7   ubuntu:14.04   "/bin/bash"              14 seconds ago   Exited (0) 8 seconds ago                competent_engelbart

 

컨테이너가 생성 되었지만 docker ps로 보면 실행된 컨테이너가 없기 때문에 docker ps -a로 보면 정지된 컨테이너를 확인할 수 있다.

docker start로 다시 실행시켜도 포그라운드로써 동작하는 프로그램이 없기때문에 컨테이너는 다시 정지된다.

 

그러면 반대로 mysql 컨테이너를 -it옵션을 생성하면 아래와 같이 mysqld 가 포그라운드로 실행되는것을 눈으로만 볼 수 있는 상태이다.

# docker run -it \
> --name mysql_attach_test \
> -e MYSQL_ROOT_PASSWORD=1234 \
> -e MYSQL_DATABASE=wordpress \
> mysql:5.7
2021-06-23 10:48:10+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
2021-06-23 10:48:12+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-06-23 10:48:13+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
2021-06-23 10:48:13+00:00 [Note] [Entrypoint]: Initializing database files
‥‥‥
‥‥‥

이 같은 이유로 -d옵션을 사용해 컨테이너가 백그라운드로 동작하게 해야한다.

 


 

그러면 mysql컨테이너로 접속해서 DB관리는 어떻게 하나?

방법은 docker exec를 사용하는 방법이 있다.

# docker exec -it wordpressdb /bin/bash
root@1c111b61d7b5:/# echo $MYSQL_ROOT_PASSWORD
password
root@1c111b61d7b5:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.34 MySQL Community Server (GPL)
‥‥‥
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 

추가로 docker exec로 접속하면 mysqld 컨테이너 처럼 mysqld 프로세스가 컨테이너안에서 여전히 포그라운드 모드로 동작할 때는 exit나 Ctrl+D를 입력해도 컨테이너가 중지 하지 않는다. /bin/bash만 중지한다.

 

'Cloud > Doker' 카테고리의 다른 글

[docker] docker 볼륨 사용법 3가지  (0) 2021.07.12
[docker] docker 어플리케이션 구동  (0) 2021.06.22
[docker] Docker 시작  (0) 2021.06.21