본문 바로가기
카테고리 없음

도커 컨테이너 접속 및 파일 수정하는 방법

2022. 6. 12.

이전 글에서 만든 컨테이너를 host의 포트와 연결하고 웹브라우저로 접근하는 방법에 대해 알아보았습니다. 이번에는 도커 컨테이너에 접속하여 컨테이너 안에 있는 index.html 파일을 수정하는 방법에 대해 알아봅시다.

 

지난 글에서 웹브라우저를 통해 localhost:8081/index.html 주소로 만든 컨테이너로 접근했습니다. 접속했을 때 컨테이너 안에 있는 웹서버가 파일 시스템 안에 저장되어 있는 index.html 파일을 불러와서 우리에게 띄워줬습니다.

 

index.html은 "It works!"라는 문구만 띄워줄 뿐 아무런 동작을 하지 않죠. 그런데 "It works"라는 문구만 띄워주면 어디 쓸 데가 없죠. 따라서 index.html을 편집하여 웹서버를 이용하는 웹/앱을 만드는 것이 중요합니다.

 

그러기 위해서는 컨테이너 안으로 들어가서 수정할 줄 알아야 합니다. 그 방법을 알아봅시다.

 

도커 컨테이너 쉘 진입하기

1. Docker Desktop에서 도커 컨테이너 명령어 실행

우선 httpd 이미지를 컨테이너로 실행시킵니다. 이 때 컨테이너의 이름은 ws2이고, host의 포트는 8080입니다. 방법을 모르겠다면 아래의 게시글에서 방법을 찾을 수 있습니다.

 

도커 네트워크 연결 방법

도커를 사용하기 위해서는 네트워크에 대해 알아야 합니다. 도커에서 동작하는 많은 소프트웨어들이 네트워크를 이용하기 때문입니다. 이전 시간까지 도커 이미지를 받아 컨테이너로 생성한

ssonny.tistory.com

ws2 컨테이너를 실행시켰다면 Docker Desktop Dashboard의 좌측에 Containers를 클릭합시다. 실행 중인 컨테이너 ws2가 보입니다. 우측에 터미널 모양의 아이콘을 클릭하세요.

컨테이너 내 명령어 실행
컨테이너 안에서 명령어를 실행

실행시키면 터미널이 실행됩니다. pwd를 입력해봅시다. 경로가 /usr/local/apache2라고 나오네요. ls -al을 입력해봅시다. 마찬가지로 컨테이너 안의 파일을 보여줍니다.

 

2. Command Line에서 도커 컨테이너 명령어 실행

커맨드 라인에서는 docker exec 명령어를 실행합니다. 명령어를 그 뒤에 명령어를 전달하고 싶은 컨테이너를 입력하고, 전달할 명령어(Command)를 입력합니다. 그리고 옵션을 넣을 수도 있죠.

 

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

 

docker ps로 현재 실행 중인 프로세스를 살펴봅시다. 아까 실행시킨 ws2가 보이네요. 예시로 httpd container ws3를 실행시켜 봅시다. host port는 8081이고요. 실행이 완료됐다면 ws3에서 pwd 명령과 ls를 실행시켜 봅시다.

 

docker exec ws3 [pwd 또는 ls]

 

컨테이너의 명령어 결과값이 출력됩니다. 그런데 컨테이너의 명령어를 출력할 때마다 docker exec를 입력하고 컨테이너 이름을 입력하면 매우 불편합니다. 따라서 컨테이너와 지속적으로 연결하여 명령어를 전달하고 싶다면 아래와 같이 입력합니다.

 

docker exec -it ws3 /bin/sh

 

그러면 기존 host의 터미널에서 container의 터미널로 전환된 것을 볼 수 있습니다. docker exec의 옵션 중 i와 t는 터미널과 지속적으로 연결을 위해 사용한다라고만 알고 계시고, 자세한 것은 docs에서 확인하시면 됩니다.

 

-it 옵션을 추가한 docker exec 명령어는 위의 docker desktop에서 터미널을 열었을 때 나오는 명령어와 동일한 것을 눈치챌 수 있죠. 연결을 끊고 다시 host로 나가고 싶다면 exit를 입력하시면 됩니다.

 

근데 본 쉘의 부족한 기능으로 요즘은 배시 쉘을 더 많이 씁니다. 컨테이너마다 배시 쉘이 없는 경우도 있지만, 있다면 /bin/sh보다 /bin/bash를 사용하시길 바랍니다.

 

여기까지 하셨다면, 컨테이너로 진입하여 여러 가지 명령어를 실행시키고 조작할 수 있는 상태가 되었습니다.

 

httpd 컨테이너 내 index.html 수정하기

httpd 이미지 설명
hub.docker.com의 httpd 이미지 설명

hub에서 httpd 이미지를 다시 검색해봅시다. 이미지에 대한 설명에서 내려가다 보면 /usr/local/apache2/htdocs에 index.html이 있다고 나옵니다. 우리가 수정하고 싶은 파일입니다.

 

다시 ws3 컨테이너 안으로 진입해봅시다.

 

docker exec -it ws3 /bin/bash

 

컨테이너로 진입해서 pwd를 입력하면 현재 위치는 /usr/local/apache2 입니다. cd 명령어를 이용하여 /usr/local/apache2/htdocs로 이동하고 ls 명령어를 입력해봅시다. index.html을 찾았습니다.

 

보통 vim이나 vi, nano를 사용하여 index.html 파일을 편집하려고 할텐데요. 안됩니다. 왜냐하면 컨테이너의 기본 컨셉은 필요한 것만 설치되어있기 때문에 vi나 vim과 같은 편집기는 설치가 되어있지 않은 것이죠.

 

apt나 yum 등으로 nano나 vim을 설치하면 됩니다. apt update를 입력하여 apt를 최신상태로 업데이트하고, nano를 설치해봅시다.

 

#apt update
설치 관련 메시지...
....
..
..
#apt install nano
설치 관련 메시지...
...
..
..
#nano index.html

nano 편집기로 index.html 실행한 화면
nano로 index.html을 열어보자.

nano로 Index.html을 켭시다. "It works!"를 "Hello, Docker!!"로 바꿔봅시다. 그리고 저장합니다. 그리고 다시 웹브라우저로 ws3를 접속해봅시다.

 

localhost:8081/index.html

웹브라우저로 컨테이너 웹서버 접속
웹서버로 접속하니 수정한 파일이 반영되었다.

"It works!"에서 우리가 방금 수정한 "Hello, Docker!!"로 바뀌었네요. 이렇게 생성한 컨테이너 안의 파일을 수정할 수 있는 단계까지 왔습니다. 고생하셨습니다.

 

반응형

댓글