ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 도커 컨테이너 수정하기
    MSA & 쿠버네티스(Kubernetes) - k8s 2022. 8. 3. 00:01
    728x90

    이전 시간에 Docker로 Apache 웹서버를 띄워 보았습니다.

    https://junuuu.tistory.com/384

     

    하지만 index.html에 접속하면 It'works라는 메시지밖에 볼 수 없습니다.

    이전 환경에 이어서 작업을 진행하기 해보겠습니다.

    컨테이너에 접속하여 파일에 접근하는 방법을 알아보겠습니다.

    Docker 컨테이너는 시스템 관점에서 보면 하나의 프로세스입니다.

    하지만 일반 프로세스와의 차이로 각각의 컨테이너는 호스트 시스템과는 별개로 별개의 파일 시스템, 네트워크, 권한 등 다른 환경을 가지고 있습니다.

    이때 특정 컨테이너 환경에서 명령어를 실행할 수 있도록 하는 명령어가 docker exec 명령어입니다.

     

    docker exec ws3 pwd
    
    docker exec ws3 ls

    위의 명령어는 ws3 컨테이너에서 pwd, ls 명령어를 입력하는 것입니다.

    하지만 단순히 실행 결과를 출력하고 종료됩니다.

     

    이때 계속 연결을 유지하고 싶다면 다음과 같은 명령어를 입력하면 됩니다.

    docker exec -it ws3 /bin/sh
    
    docker exec -it ws3 /bin/bash

    이렇게 되면 ws3를 통해 지속적으로 명령을 내릴 수 있습니다.

    -it옵션은 컨테이너를 종료하지 않은 채로 터미널의 입력을 계속하여 컨테이너로 전달하기 위해 사용합니다.

     

    i는 interactive의 약자로 상호작용을 의미합니다, t는 tty(teletypewriter)의 약자로 리눅스의 콘솔, 터미널을 의미합니다.

     

    또한 컨테이너의 상황에 따라 /bin/bash가 존재하지 않을 수 있습니다.

     

    bash와 sh의 차이점

    sh는 bone shell이라고도 하며 가장 기본적인 쉘입니다.

    커널과 사용자를 연결해주는 하나의 매개체 역할을 합니다.

     

    csh : c 언어를 기초로 관리자 중심으로 만들어진 쉘

    ksh : 사용자 중심으로 만들어진 쉘

     

    bash는 born again shell의 의미로 csh의 관리적인 측면과 ksh의 사용자 편의성 측면을 모두 고려하여 만들어진 쉘입니다.

    크게 sh가 존재하고, 그 안에 bash가 속한다고 볼 수 있습니다.

     

    간단히 요약하는 bash와 sh의 차이점

    sh는 기본적이기 때문에 이식성에 장점이 있습니다.

    bash는 sh의 확장 버전으로 고급 기능을 가지고 있습니다.

     

    컨테이너와 연결 종료하기

     

    터미널에 exit을 입력하여 컨테이너와 연결을 종료할 수 있습니다.

     

     

    Apache 웹서버의 index.html에 접근해보기

    index.html의 파일 경로는 다음과 같습니다

    /usr/local/apache2/htdocs/

    cd htdocs 명령어를 통해 htdocs로 이동합니다.

     

    보통 vim이나 nano 같은 에디터를 사용해봤겠지만 여기서는 동작하지 않습니다.

    컨테이너는 작은 용량을 추구합니다.

    따라서 기본적으로 위와 같은 에디터를 포함하고 있지 않습니다.

     

    개인적으로 설치를 해줘야 합니다.

    apt update

     

    apt는 Advanced Package Tool의 약자로 리눅스 계열에서 소프트웨어를 설치하고 제거하는 일을 수행합니다.

     

    apt install vim

     

    저는 개인적으로 vim이 편해서 vim을 설치했는데 nano를 설치하실 분은 nano를 설치해도 됩니다.

    apt install nano

     

     

    수정하기

    vim index.html

    index.html을 Docker, Hello로 수정하고 리로드를 하면 위와 같이 정상적으로 반영된 모습을 볼 수 있습니다.

     

     

    발생할 수 있는 문제점들

    하지만 이렇게 되었을 때 컨테이너가 사라질 수 있습니다.

    컨테이너를 사용하는 이유는 필요할 때 언제든지 생성하고 언제든지 지우는 것입니다.

    https://www.youtube.com/watch?v=AmSKD4p-jhw&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf&index=7

    만약 Host의 File System과 Container의 File System을 연결하여 Host 쪽에 수정이 이루어졌을 때 Container에 반영될 수 있다면 어떨까요?

     

    이렇게 되면 Container가 삭제되어도 새로운 Container가 생성될 때 다시 파일을 연결만 해준다면 문제가 없을 것입니다.

     

     

    cmd로 이동하여 desktop 폴더에 다음과 같은 명령어를 통해 하나의 index.html을 생성해보겠습니다.

    echo "<html><body>Hello, Docker</body></html>"  >> index.html

    index.html이라는 이름으로 Hello, Docker라는 바디를 가지는 html 파일을 생성했습니다.

     

     

    이후에는 다음 명령어로 desktop 폴더와 컨테이너의 폴더를 연동시킵니다.

    docker run --name ws3 -p 8888:80 -v C:\Users\사용자마다다른UserID\Desktop\: /usr/local/apache2/htdocs/ httpd

    httpd 이미지를 ws3이름으로 컨테이너를 실행시키며 포트 포워딩은 호스트의 8888을 컨테이너의 80번 포트로 적용합니다.

     

    -v 옵션은 volume의 약자로 호스트와 컨테이너 간 경로를 마운트 해줍니다.

     

    호스트 컴퓨터의 A경로를 컨테이너의 파일 시스템의 B경로로 사용한다는 의미입니다.

     

     

    이렇게 되면 호스트 환경에서 편리하게 파일 버전 관리, 편집 등이 가능해집니다.

     

     

    출처

    https://www.daleseo.com/docker-run/

     

    docker run 커맨드 사용법

    Engineering Blog by Dale Seo

    www.daleseo.com

    https://www.youtube.com/watch?v=P0ZFyB4iQd0&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf&index=6 

    https://linuxhint.com/bin-sh-vs-bin-bash/

     

    What is the difference between #!/bin/sh and #!/bin/bash?

     

    linuxhint.com

     

    댓글

Designed by Tistory.