컨테이너 내부에서 명령어를 실행하는 방법 역시 Docker Desktop을 이용하는 방법과 command line을 이용하는 방법 2가지가 있다.
우선 Docker Desktop을 이용한 방법을 알아보겠다.
Docker Desktop에서 왼쪽 메뉴에서 Containers를 클릭한 뒤 명령을 실행하려는 컨테이너를 선택한다. 그리고 해당 컨테이너에서 Terminal 탭을 누르면 명령어를 입력할 수 있는 창이 뜬다.
pwd, ls 등 명령어를 입력하면 컨테이너(여기서는 ws2)에서 명령이 실행된다.
컨테이너에서 명령어를 실행하는 명령어(?)는 docker exec이다.
"docker exec 컨테이너이름 실행할명령어"를 적어주면 된다.
아래와 같이 실행해보면 Docker Desktop의 Terminal에서 실행한 것과 동일하게 출력되는 것을 확인할 수 있다.
그런데 컨테이너에서 명령어를 실행할 때마다 계속 "docker exec 컨테이너이름..." 명령어를 붙여주어야 하면 굉장히 번거로우므로 컨테이너와 지속적으로 연결하여 명령어를 실행할 수 있는 방법을 알아보자.
바로 "docker exec -it ws3 /bin/sh" 명령어를 통해 컨테이너의 쉘을 실행하여 연결을 유지하는 것이다.
위 명령어에서 '-it'가 연결을 지속적으로 유지하는 옵션이고(-i와 -t가 무슨 의미인지 docs를 읽어도 구글에서 여러 질답을 찾아봐도 이해가 안갔는데 chatGPT에 질문했더니 명료하게 답변을 해줬다! 정말 신기하다... i는 컨테이너의 입력을 받아 상호작용할 수 있도록 해주는 옵션이고, t는 컨테이너 내부의 쉘을 터미널과 같이 사용할 수 있도록 해주는 옵션이라고 한다.)
'/bin/sh'은 쉘을 실행하는 명령어이다.
해당 명령어를 실행한 후 쉘에서 pwd, ls 등 명령어를 입력하면 잘 실행되는 것을 확인할 수 있다.
그리고 쉘에서 빠져나올 때는 exit 명령어를 입력해주면 된다.
또 기본 쉘이 아니라 bash를 이용하기 위해서는 아래와 같이 입력하면 된다.
"docker exec -it ws3 /bin/bash"