본문 바로가기

도커

도커의 attach mode와 detach mode

만약 도커 명령어나 플래그들이 잘 기억이 안나면 --help옵션을 주어 명령어들을 확인하는 것이 가능하다.

ex) docker --help

docker ps -a로 모든 CONTAINER를 확인할 수 있다

dong@ubuntu:~/docker-complete$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS                      PORTS     NAMES
04b943f22fbf   b2da75518bad   "docker-entrypoint.s…"   23 hours ago   Exited (137) 23 hours ago             zealous_ganguly
731b1d47f91a   b2da75518bad   "docker-entrypoint.s…"   23 hours ago   Exited (137) 23 hours ago             trusting_mahavira
03f8545cbaf0   b2da75518bad   "docker-entrypoint.s…"   23 hours ago   Exited (137) 23 hours ago             nervous_tesla
aa7190ac1421   b2da75518bad   "docker-entrypoint.s…"   46 hours ago   Exited (137) 46 hours ago             happy_cohen
c5abc953ba85   31bc868478b8   "docker-entrypoint.s…"   46 hours ago   Exited (137) 46 hours ago             nifty_maxwell
d0801952859f   31bc868478b8   "docker-entrypoint.s…"   46 hours ago   Exited (137) 46 hours ago             dazzling_keldysh
0e74f3d74044   31bc868478b8   "docker-entrypoint.s…"   46 hours ago   Exited (137) 46 hours ago             jovial_kapitsa
f636acf4aea9   node           "docker-entrypoint.s…"   47 hours ago   Exited (0) 47 hours ago               focused_williamson
5c7cea748b17   node           "docker-entrypoint.s…"   47 hours ago   Exited (0) 47 hours ago               vigilant_bartik
09f67efccfea   989df459e007   "docker-entrypoint.s…"   3 days ago     Exited (137) 3 days ago               interesting_snyder

실행하기 원하는 컨테이름의 이름을 이용하여 컨테이너를 실행할 수 있다.

dong@ubuntu:~/docker-complete$ docker start zealous_ganguly
zealous_ganguly

docker ps 명령어로 해당 컨테이너가 실제로 작동 중인 걸 확인할 수 있다.

dong@ubuntu:~/docker-complete$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS         PORTS                                   NAMES
04b943f22fbf   b2da75518bad   "docker-entrypoint.s…"   23 hours ago   Up 2 minutes   0.0.0.0:3000->80/tcp, :::3000->80/tcp   zealous_ganguly

localhost 3000번 포트로 접속하면 전에 이미지로 만들어둔 node.js 서버가 작동하는 것을 확인할 수 있다.

여기서 주목해봐야 할 점은 docker start {{컨테이너명}}으로 실행하면 백그라운드 프로세스로 실행이 된다는 점이다. 이 점이 전에 실행한 이미지로 새로운 컨테이너를 만들어 실행해주는 docker run 명령어와 차이를 보여준다. 아래와 같이 docker run 명령어로 이미지를 실행하면 백그라운드로 실행이 되지 않아 더이상의 명령어를 입력할 수 없다. 다른 터미널을 열어 docker ps 명령어로 실행중인 컨테이너를 확인하면 컨테이너는 제대로 실행되고 있는 것을 확인할 수 있다.

dong@ubuntu:~/docker-complete$ sudo docker run -p 8000:80 b2da75518bad
dong@ubuntu:~/docker-complete$ sudo docker ps
[sudo] password for dong: 
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS          PORTS                                   NAMES
3eb80d93afee   b2da75518bad   "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes    0.0.0.0:8000->80/tcp, :::8000->80/tcp   condescending_perlman
04b943f22fbf   b2da75518bad   "docker-entrypoint.s…"   23 hours ago    Up 14 minutes   0.0.0.0:3000->80/tcp, :::3000->80/tcp   zealous_ganguly

이러한 차이는 docker start는 detached mode가 디폴트이고 docker run attached mode가 디폴트인 부분 때문에 생긴다. 이 detached mode와 attached mode는 플래그를 주어 설정해 줄 수 있다. 만약 컨테이너의 출력값을 콘솔에서 확인하고 싶다면 attached mode가 알맞을 것이고, 백그라운드 프로세스로 돌리고 싶다면 detached mode가 알맞을 것이다.

run 명령어를 사용하여 이미지로 컨테이너를 생성하여 실행할 때 이미지 앞에 -d를 붙여 detached mode로 실행할 수 있다. 이렇게 실행하면 출력값으로 새로 생성한 컨테이너의 ID를 출력하고 백그라운드 프로세스로 실행된다.

dong@ubuntu:~/docker-complete$ sudo docker run -p 8000:80 -d b2da75518bad
716aed400a61a30d704edd9d1d5eaad1d90d412457ec279e8d9e6754b965acb2

dong@ubuntu:~/docker-complete$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS          PORTS                                   NAMES
716aed400a61   b2da75518bad   "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes    0.0.0.0:8000->80/tcp, :::8000->80/tcp   great_ritchie
04b943f22fbf   b2da75518bad   "docker-entrypoint.s…"   23 hours ago    Up 25 minutes   0.0.0.0:3000->80/tcp, :::3000->80/tcp  zealous_ganguly

만약 실행중인 컨테이너의 출력값을 보고싶다면 2가지 방법이 있다.

첫번째 방법으로는 docker의 attach 명령어를 사용하는 방법이다. docker attach {{컨테이너명}}으로 간단하게 실행이 가능하다.

dong@ubuntu:~/docker-complete$ sudo docker attach great_ritchie
출력값입니다

두번째 방법으로는 docker의 log 명령어를 사용해 해당 컨테이너의 과거 출력값을들 전부 확인하는 방법이 있다. 이 또한 docker log {{컨테이너명}}으로 간단하게 실행이 가능하다.

dong@ubuntu:~/docker-complete$ sudo docker logs great_ritchie
출력값입니다
두번째 출력값입니다

만약 과거 로그 뿐만이 아니라 앞으로의 출력도 계속해서 보고싶다면 -f 플래그를 주어 앞으로의 출력 또한 모니터링하는것이 가능하다.

dong@ubuntu:~/docker-complete$ sudo docker logs -f great_ritchie
출력값입니다
두번 째 출력값입니다
제대로 모니터링 중인지 확인하는 출력입니다.

'도커' 카테고리의 다른 글

Docker(도커)의 Interactive mode  (0) 2022.02.03