프로젝트/한이음

Docker Container 접근에 필요한 명령어 정리

명에 2021. 7. 26. 16:41

사담.
도커를 처음 써보는 입장에서 이미지의 컨테이너 속 파일이 있다는 것도 모르고 설정 파일이 어딨나,,
삽질을 6시간 정도 한 결과 해답을 찾았읍니다..

목표 : nginx 내 accesslog 설정을 위해 nginx 컨테이너 속 nginx.conf 파일 찾기  


도커 컨테이너 접근 방법 정리 - 리눅스 우분투 기준

어떤 이미지를 'docker pull 이미지명' 명령어를 이용해서 내려받은 상태를 기준으로 합니다.

1. run 명령어 잘 사용하기

처음 이미지를 pull 해왔으면 그 이미지를 사용한 컨테이너가 없을테니 run 명령어로 컨테이너 생성 및 실행을 합시다.
내 경우는 nginx를 이용하는 것이 목표였으니 nginx 이미지를 가져왔습니다.

docker run -i -t --name hello-nginx -p 80:80 nginx bin/bash

run 명령어의 기본 문법은 'docker run [option] image [command] [arg]'이며 -i -t --name -p 모두 옵션에 해당한다.

(1) -i, -t 옵션의 의미

-i 옵션은 interactive하게 만든다는 의미.
-t 옵션은 tty를 사용한다는 의미. 일반적으로 사용하는 터미널을 생각하면 된다.

 

위 두 옵션은 하나씩 빼서 실행시켜보면 어떤 역할을 하는 지 잘 알 수 있다.

 

앞에서 run 명령어를 잘 쳤으면 컨테이너(root@16진수) 내부로 이동하고 해당 경로에서 ls같은 명령어를 입력하면 결과가 잘 나온다.
-i 옵션을 제거하면 명령어를 입력했을 때 결과가 나오지 않고 -t 옵션을 제거하면 내가 입력하는 명령어가 안보인다.(입력은 된다)

 

따라서 도커 컨테이너에 접근할 일이 있다면 -i, -t 옵션은 필수이다.

(2) --name, -p 옵션의 의미

--name 옵션은 다음에 입력된 단어(위에서는 hello-nginx가 해당. 이름이 바뀌어도 상관없다)로 컨테이너 이름을 설정해준다.

-p 옵션은 호스트 pc의 포트와 컨테이너 포트를 연결시켜준다. 호스트 pc에서 localhost:80으로 접근할 수 있도록 한다.

(간혹 컨테이너 포트만 여는 경우도 있는데 그건 컨테이너 간 연결을 위해서라고 한다. 잘은 모른다.)

(3) bin/bash 의미

bash란 bash 쉘을 컨테이너에서도 사용하겠다는 의미이다. 일반적으로 리눅스에서 사용하는 쉘 이름이 bash라고 한다.

2. 생성된 컨테이너에 접근하거나 호스트로 돌아오는 법

앞에서 소스 코드로 정리한 명령어를 입력하면 컨테이너 내부 폴더에 접근한다.
이미 접근한 상태이므로 호스트로 돌아오는 법을 알아보자.

호스트로 돌아오는 방법은 다음과 같다.

  1. 컨테이너 폴더 안에서 exit 입력
  2. ctrl + P, Q 입력
  3. ctrl + C 입력

각 방법의 차이점은 간단하다.

 

(1) 컨테이너 내 exit : exit를 입력하려면 -i -t 옵션을 이용해 bash 쉘이 활성화되어야 한다. exit를 입력하면 호스트로 나가진다.
(2) ctrl + P, Q : -i -t 옵션이 없어도 단축키를 통해 컨테이너를 종료하지 않고 호스트로 이동할 수 있다.
(3) ctrl + C : 리눅스에서는 이 단축키가 프로세스 종료를 의미한다. 컨테이너를 종료하고 호스트로 이동한다는 차이가 있다.

 

호스트로 돌아왔을 때 다시 컨테이너 폴더로 접근하고 싶다면 아래 방법을 사용하자.

 

컨테이너가 실행 중인 경우 : docker exec <컨테이너 id or name> /bin/bash
컨테이너가 종료된 경우 : docker start -it <컨테이너 이름>을 이용해 컨테이너를 실행시킨 후 위 명령어로 접근하자.


위 명령어를 이용하면 컨테이너 접근을 자유자재로 할 수 있을 것이라고 생각한다. 내가 그랬듯이 여러분도 할 수 있다.
혹시 호스트, 컨테이너, 이미지 등을 잘 모르겠다면 도커 구조에 대해서 한번 찾아보자. 뭐든지 그랬지만 알면 쉽다.