ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker로 Apache 웹서버 띄우기
    MSA & 쿠버네티스(Kubernetes) - k8s 2022. 8. 2. 00:01
    728x90

    Docker에 대한 기초적인 지식은 있다는 가정하에 진행하겠습니다.

    - Docker 이미지란

    - Docker 설치법

    - 가상화와 컨테이너 개념

    - 네트워크 포트개념

     

    간단하게 설명하자면 Docker Hub에 이미지들이 존재하고 이 이미지들을 실행하면 컨테이너가 됩니다.

    또한 이미지는 여러 개 실행할 수 있습니다.

     

    이때 Docker Hub은 App Store, 이미지는 프로그램, 컨테이너는 프로세스의 개념으로 이해하시면 좋을 것 같습니다.

     

    1. Docker Desktop 열기

     

    2. cmd 창 열기

     

    3. 아파치 웹서버 이미지 내려받기

    docker pull httpd

     

    4. 이미지가 정상적으로 받아졌는지 확인

    docker images

    httpd가 잘 생성된 것을 확인할 수 있습니다.

     

     

    5. 컨테이너로 실행

    docker run httpd

     

    6. 컨테이너가 실행되었는지 확인

    docker ps

    이때 이미 실행 중인 cmd창에서는 이미 컨테이너가 실행 중입니다.

    새로운 cmd창을 열어서 입력해야 합니다.

    7d053d380e72 라는 컨테이너 아이디로 httpd 이미지가 실행되고 있습니다.

     

    7. 컨테이너에 이름을 부여해서 실행

    docker run --name ws2 httpd

     

    컨테이너에 ws2라는 이름을 부여하여 httpd 이미지를 실행할 수 있습니다.

     

    docker ps 명령어로 현재 상황을 확인해보면 다음과 같습니다

     

     

    8. 컨테이너 종료하기

    docker stop ws2

    ws2라는 이름의 컨테이너를 종료합니다.

     

    이제 docker ps 명령어를 입력하면 ws2라는 컨테이너는 종료되어 더 이상 보이지 않습니다.

     

    하지만 docker ps -a 명령어를 통해 모든 컨테이너를 보게 되면 statue가 Exited 되어있으며 삭제되지는 않았습니다.

     

    즉, stop은 컨테이너의 삭제를 의미하지 않습니다.

     

    9. 컨테이너 재시작

    docker start ws2

    하지만 이렇게 되면 로그는 보이지 않기 때문에 다음과 같은 명령어를 입력하면 실시간으로 로그를 확인할 수 있습니다.

     

    docker logs -f ws2 명령어를 통해 실시간으로 로그를 확인할 수 있습니다.

     

    10. 컨테이너 삭제하기

    docker rm ws2

    하지만 현재 실행 중이라면 에러가 발생할 수 있습니다.

    만약 실행 중인 컨테이너를 삭제하고 싶다면 --force 옵션을 붙여서 삭제할 수 있습니다.

     

    docker rm ws2 --force

     

    11. 이미지 삭제하기

    docker rmi httpd

     

    httpd 이미지를 삭제할 수 있습니다.

     

     

    이제 기본적인 도커 이미지, 컨테이너에 대한 조작을 할 수 있습니다.

     

     아파치 웹서버 띄우기

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

    아파치 웹서버가 포트번호 80번에 입력되어 있고 example.com이라는 주소를 가지고 있습니다.

     

    http://examle.com:80/index.html 을 입력하면 example.com에 접속하고 80번 포트를 통해  웹서버로 요청이 전송되고 index.html을 읽어서 사용자에게 페이지를 전달합니다.

     

    도커가 적용된 아파치 웹서버

    하나의 호스트 위에 여러 개의 컨테이너를 만들 수 있으며, 해당 컨테이너에서 웹서버가 구동됩니다.

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

    여기서 중요한 점은 Host와 Container는 각각 독립적인 파일 시스템과 호스트를 가지고 있습니다.

    여기서 위와 같이 http://example.com:80/index.html 으로 요청을 보내면 사용자는 페이지를 받을 수 있을까요?

     

    컨테이너는 연결이 끊겨있기 때문에 페이지를 받을 수 없습니다.

     

    즉, Host와 Container의 포트를 연결시켜주어야 합니다.

     

    다음과 같은 명령어를 통해 해결할 수 있습니다.

    docker run -p 80:80 httpd

    Host의 80번 포트와 Container의 80번 포트를 연결하라는 의미입니다.

    이러한 작업을 포트 포워딩이라 합니다.

     

    여기서 만약 사용자가 8000번 포트로 연결하고 싶어 한다면?

    docker run -p 8000:80 httpd

    위와 같은 명령어를 통해 8000번 포트와 80번 포트를 포워딩할 수 있습니다.

     

    위와 같은 명령어를 통해 컨테이너가 실행되고 있는 환경에서 URL에 다음과 같이 입력하면 index.html에 접속할 수 있습니다.

     

    http://localhost:8000/index.html

     

    또한 cmd창에서는 다음과 같이 로그가 찍히는 것을 확인할 수 있습니다.

    로그 확인

     

     

     

    출처

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

     

    댓글

Designed by Tistory.