일전에 작성한 Docker 작동원리 및 과정을 토대로 Docker를 실행하는 과정에 대해 이해한 내용을 정리해본다.
Docker Run, 도커를 실행하는 과정은 정확하게 말하면 "특정 환경을 구성할 이미지파일을 컨테이너로 실행한다"라는 의미와 동일하다.
Docker Desktop을 설치하여 UI형태로 Docker image 파일을 실행할 수 있겠지만, 실제 커맨드 라인을 이해하면 동작 과정을 더 면밀하게 살펴볼 수 있다.
docker run --name kuke-board-mysql -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:8.0.38
Docker run은 기본적으로 실행한 터미널이 해당 컨테이너에 "붙어" 그 프로세스를 조작할 수 있도록 해주는데, 백그라운드에 실행하여 계속 동작할 수 있도록 해줄 수 있다.
옵션 | 의미 | 특징 |
---|---|---|
(기본) | 포그라운드 실행 | docker run IMAGE → 컨테이너가 실행되며 터미널이 그 프로세스에 붙음. 컨테이너 종료 시 터미널도 종료. |
-d | Detached 모드 | 백그라운드 실행. 터미널은 즉시 반환되고 컨테이너는 계속 동작. |
-it | Interactive + TTY | 대화형 모드. 컨테이너 내부 쉘에 들어가 상호작용 가능. 예: docker run -it ubuntu bash |
-i | Interactive | 표준 입력(STDIN)을 열어둠. 단독으로는 화면 출력이 깨끗하지 않고, 보통 -t 와 함께 사용. |
-t | TTY | 가상 터미널을 할당. 단독으로는 표준 입력 없음. 보통 -i 와 같이 -it 형태로 사용. |
--rm | 일회성 실행 | 컨테이너가 종료되면 자동 삭제. 테스트/실험용에 유용. |
--name | 이름 지정 | 기본은 랜덤 이름. 지정하면 관리가 편해짐. |
참고로 실행중인 컨테이너 터미널로 접속하기 위해선 Docker exec 명령어를 사용하면 된다.
-p 3306:3306
첫 번째(호스트 포트: 3306) → 내 PC(호스트)의 포트 번호를 의미하고,
두 번째(컨테이너 포트: 3306) → 컨테이너 내부에서 실행되는 MySQL 서버의 포트 번호를 의미한다.
이때 중요한 점은 두번째 컨테이너 포트는 MySql 서버가 지정한 것으로, 우리가 지정할 수 없다. 우리가 지정할 수 있는 포트는 호스트 포트 뿐이다.
상기 예시의 경우, MySQL 서비스 포트를 사용하고 있으므로 3306 포트를 사용하였으며 호스트 포트인 3306으로 매핑해주어 사용할 수 있도록 해주었다.
Docker Run을 하게되면 위와 같이 일련번호가 나타나면서 이미지 파일을 Container가 실행하는데, 이때 발생하는 일련번호가 바로 컨테이너ID이다.
Desktop에서 보면 더 직관적으로 이해할 수 있겠다.
본인이 지정한 namespace와 발생한 일련번호 그대로 구성된 Container ID가 나타나있고, 어떤 이미지를 어떤 포트로 실행하였는지 모두 확인할 수 있다.
Docker ps(Process Status)를 통해 현재 실행중인 컨테이너 목록들을 확인할 수 있다.
위에서 잠깐 서술하였지만, Docker exec를 통해 해당 컨테이너로 접속하여 mySql(이미지 파일로 실행한 실제 서버 환경) "서버"로 최종 접속할 수 있다.
위에서 "it"는 interaction으로 실제 컨테이너와 상호작용할 수 있는 터미널로 접속할 수 있다고 하였는데, 이를 활용하여 bash 환경에 접속 할 수 있다.
위와 같이 실제 mysql 서버 환경으로 접속까지 할 수 있는 것을 "Docker exec" 커맨드 라인을 통해 확인할 수 있다.
실행한 컨테이너를 종료하고 싶다면 아래와 같은 Docker Stop 커맨드 라인을 활용하면 된다.
이 명령어를 실행한 후 Docker Desktop을 살펴본다면
Docker mysql Image를 실행한 Container의 동작이 멈춘 것을 확인할 수 있다.
최초 이미지파일을 실행할 경우 Docker Run, 해당 실행정보 그대로 이후에 다시 실행한다면 Docker Start를 활용하면 되겠다.
참고로 위 옵션들은 Docker Desktop(GUI)에서 기본적으로 나타나있는 옵션들이다.
Docker Run이 어떤 옵션으로 작동하고, 어떤 동작과정을 가지는지 이해한 이후에 Desktop을 바라보아야 이해가 더 편할 수 있겠다.
특히 Desktop의 경우 편의상의 목적으로 제작되어 더 깊게 사용하는 옵션들이 보이지 않거나, 생략되어 있는 항목들이 존재할 수 있으므로 커맨드 라인을 먼저 이해하는 것을 권장한다.