컨테이너를 개조하려면

Pak Heonjun·2023년 5월 28일
0

컨테이너의 개조란?

컨테이너 안에 패키지를 설치하거나 파일을 생성해야하는 경우가 종종 발생한다. 컨테이너 내부를 변경하는 작업을 컨테이너 개조 라 한다.

직접 개발하거나 혹은 공식 배포되는 소프트웨어도 수정이 필요한 경우가 종종 발생한다. 컨테이너 개조컨테이너 내부를 변경 하는 작업이다.

컨테이너 개조 에는 ① (앞에서 다루어본) 파일 복사 또는 마운트를 이용하는 방법 ② 컨테이너에서 리눅스 명령어를 실행하는 방법 이 있다.

② 컨테이너에서 리눅스 명령어를 실행하는 방법에 대해 자세히 알아보자.

컨테이너에서 리눅스 명령을 실행하려면

컨테이너에서 리눅스 명령어를 실행하려면 shell(셸) 이 필요하다. 사용자의 명령을 해석하여 커널을 작동시키는 프로그램 이다.

컨테이너에서 리눅스 명령어를 실행 하려면 사용자와 커널 간 인터페이스인 shell(셸) 프로그램 이 필요하다. 셸 중에서 대부분 컨테이너에서 설치되어있는 bash 셸 을 기준으로 실습해보자.

컨테이너를 실행하면 기본적으로 bash가 동작하지 않는 상태로 실행 된다. 따라서 bash 프로그램을 따로 실행해야한다. bash 프로그램은 컨테이너 내부의 /bin/bash 경로 에 존재한다.

[컨테이너와 호스트 간 파일 복사] 에서 다룬 docker exec 명령어로 컨테이너 내부에서 리눅스 명령어의 실행이 가능하다.

root@LAPTOP-3H85AI8N:/# docker exec apa00ex1 pwd
/usr/local/apache2

다만 셸 없이 명령 전달하는 방식은 제한적인 명령만 실행 가능하므로, 기본적으로는 셸 프로그램을 실행하여 리눅스 명령을 받을 수 있는 상태를 만들어야한다.

root@LAPTOP-3H85AI8N:/# docker exec -it apa00ex1 /bin/bash
root@7f1be84b1a12:/usr/local/apache2#

위의 커맨드로 apa00ex1 컨테이너 내부로 /bin/bash 명령을 전달하게 된다. 즉, 컨테이너 내부에서 bash 프로그램을 실행하게 된다.

여기서 -it 옵션은 필수적으로 포함 되어야한다. 만약 옵션을 넣지 않는 경우 어떤 문제가 발생하는지 확인해보자.

위처럼 -t 옵션을 제외하는 경우, 명령어 입력과 출력은 가능하지만 우리가 보던 터미널과는 차이가 있다. -ttty(터미널) 환경을 조성해주는 옵션 이다.

위에서는 -i 옵션을 제외한 경우로 터미널 환경은 맞지만 입력한 명령에 대한 출력이 나오지 않는다. -iinteractive한 입/출력의 흐름을 만들어주는 옵션 이다.

마지막으로 컨테이너 내부에서 빠져나오려면 exit 명령을 사용 하면 된다.

root@LAPTOP-3H85AI8N:/# docker exec -it apa00ex1 /bin/bash
root@7f1be84b1a12:/usr/local/apache2# pwd
/usr/local/apache2
root@7f1be84b1a12:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  modules
root@7f1be84b1a12:/usr/local/apache2# exit
exit
root@LAPTOP-3H85AI8N:/#

컨테이너 내부 명령어 문법은?

컨테이너 내부에는 운영체제 비슷한 것 이 들어있다. 이 운영체제는 리눅스 기반의 다양한 배포판(데비안, 레드햇, 알파인 계열)이 될 수 있다. 컨테이너 내부에서 명령은 어떤 배포판이냐에 따라 조금씩 달라진다.

다만 대부분의 컨테이너는 데비안 계열 이며, 도커 제작사에서도 데비안 계열 컨테이너를 추천하고 있다는 점을 알고 있자.

Tip. 셸 종류
최초의 셸은 벨 연구소에서 스티븐 본이 개발한 본 셸(Bourne shell, sh)이며, 이를 개선한 본 어게인 셸(Bash) 등이 있다.

도커 엔진 vs 컨테이너 내부 명령의 차이

목적에 따라 도커 엔진을 통한 명령과 컨테이너 내부에서 실행하는 명령에는 차이가 있다.

도커 엔진을 통한 명령 에는 도커 엔진의 시작/종료, 컨테이너 시작/종료, 컨테이너 안팎의 파일을 복사 등이 있다. 컨테이너 내부에서 실행하는 명령 에는 컨테이너 내부의 소프트웨어 설치/실행/종료, 소프트웨어 설정 변경 및 파일 작업 등이 있다.

profile
more more

0개의 댓글