ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker] 도커기초
    코딩/🔫 PROJECT MANAGEMENT 2022. 1. 31. 20:20

    도커를 쓰는 이유 

    하나의 컴퓨터에 가상으로 컴퓨터를 만들고 그 위에 운영체계를 만들고 그 위에 웹서버, 데이터베이스를 각각 만들 수 있음

     

    한대의 컴퓨터 안에서 각각의 앱을 실행시키는 것이다. 

    즉, 격리된 환경에서 각각의 앱이 실행되는데, 격리된 실행환경을 컨테이너라고 정의함. 

     

    이러한 격리된 환경을 제공하는 도커가 편의성이 높다고 하는데 왜그런걸까? 

    우선 도커를 사용하기 위한 기본적인 이해를 살펴보자. 

     

    도커를 사용하기 위한 이해들 

    appstore  =  docker hub
    program   =  image
    process    =  container

    프로그램이 여러가지 프로세스를 가지듯,

    이미지가 여러가지 컨테이너를 가질 수 있다. 

     

    docker docs

    • CLI
      • Reference - Docker CLI (Command Line Interface) - docker pull
      • docker pull httpd
      • httpd 이미지 다운로드 완료
      • docker images
      • 도커 잘 다운 확인
    • Docker DESKTOP
      • images에 들어가서 확인 가능

    docker pull 과 run 

    docker hub
    ⬇️ pull
    image
    ⬇️ run 
    container

    docker pull 이란? 

    도커 허브에서 이미지를 다운로드 받는 것. 

     

    docker run 이란? 

    다운받은 이미지에서 프로세스를 만드는 작업 

     

    • Docker DESKTOP
      • 쉽게 실행, 중단, 삭제 가능
    • CLI
      • 프로세스 만듦
        • docker run httpd
      • 프로세스 이름 붙임
        • docker run —name ws2 httpd
      • 프로세스 중지
        • docker stop
      • 프로세스 실행
        • docker start 컨테이너네임
      • 로그 추적
        • docker logs ws2 → 도커가 꺼짐
        • docker logs -f ws2
      • 프로세스 삭제
        • docker rm ws2 → 도커실행중이면 에러뜸
        • docker stop ws2
        • docker rm ws2
        • docker rm —force ws2
      • 도커 이미지 삭제
        • docker rmi httpd

     

    도커로 웹서버를 이용하는 방법 

    컴퓨터에 웹서버를 직접 설치했지만 도커를 이용하면 웹서버가 도커 안에 설치가 됨. 

    나중에 docker compose 파일을 작성할때 따로 network 설정을 안해도 된다.

     

    하나의 도커 호스트에는 여러개의 컨테이너가 만들 수 있음

    그러나 앞에서 말했듯이 독립적인 컨테이너이기에 호스트와 컨테이너는 각각의 포트를 가짐

    그리고 밑에 있는 호스트와 컨테이너의 파일 시스템은 나중에 살펴보자. 

     

    이때 도커호스트란 모든 컨테이너를 감싸고 있는 것으로 포트를 가짐

     

     

    WEB Browser 

    ⬇️

    HOST
    Container   File system
    web server File system  

     

    docker run httpd

    웹브라우저와 연결되지않음. 

    Web Browser <----⛔️----> Docker Host(80) --⛔️--  Container(80) --- Webserver --- File sysyem

     

    도커호스트와 컨테이너 사이의 연결이 필요 

    즉, 연결안된 곳 (웹브라우저와 도커 호스트), (도커호스트와 컨테이너) 를 연결해야함 

     

    docker run -p 80:80 httpd

    앞 포트(웹브라우저와 도커호스트)는 도커 호스트 포트번호를 알려주는 것

    뒤 포트(도커호스트와 컨테이너)는 컨테이너 포트 번호를 알려주는 것

    이런걸 port forwoarding (포트 포워딩) 이라고함. 

     

    만약에 웹브라우저에서 80번이 아닌 8000번으로 연결되어있다면 어떻게 할까?

    docker run -p 8000:80 httpd

     

    이제 Index.html을 수정하고 싶을땐? 컨테이너 안으로 들어가자.

    컨테이너 안으로 들어가서 수정할 수 있음

    • Docker DESKTOP

    • Docker CLI
    • docker exec -it ws3 /bin/sh
    • -it 옵션을 주어야 계속해서 실행됨CLI (다 다큐먼트에 있음)

     

    그렇다면 웹서버의 index.html 위치는?

    프로그램을 다운받았으면 index.html 위치는 어디에 있을까?

     

    appache 메뉴얼 페이지에 가보면

    Httpd - Official Image | Docker Hub

     

    Httpd - Official Image | Docker Hub

    We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

    hub.docker.com

    index.html 이 어디에 있는지 알 수 있음

    /user/local/apache2/htdocs/

     

    컨테이너 안으로 접속 후 index.html 찾았지만

    에러!

     

    컨테이너의 목적은 용량이 작은 것 이런것까지 포함시키려면 용량이 늘어나서 의미가 없어지게 됨

    따라서 cd로 htdocs 까지 들어가서 html파일 수정할 수 있는 에디터를 설치하자

     

    apt update

    nano 에디터 설치

    apt install nano

    nano index.html

    Hello, Docker로 수정

     

    그러나, 위험한 일들이 일어남

    html을 수정하다가 컨테이너가 사라지면 작업내용이 날라가는 문제가 생김!!

    컨테이너의 존재 이유가 필요할때 언제든지 생성했다가 필요없으면 언제든지 없애는 것.

    HOST File System과 컨테이너 안 File System 를 연결함으로써 이러한 문제점을 해결할 수 있음!

    호스트와 컨테이너의 파일시스템 연결 -v

    HOST File System에서 수정하고 컨테이너 안에 있는 File System에 연결할 수 있다면!

    실행환경은 컨테이너에게 맡기고,

    수정은 도커 HOST에서 안전하게 파일을 수정할 수 있음

     

    로컬호스트 파일시스템과 컨테이너 파일시스템 연결

    Visual Studio 안 command 명령어

     

    docker run -p 8888:80 -v ~/Desktop/htdocs:/usr/local/apache2/htdocs/ httpd

     

    -p 포트 도커 호스트8888번 포트와 컨테이너 80번 포트 연결

    -v 도커 호스트 폴더와 컨테이너 안 폴더 연결

    마지막 / 붙일 것!

     

     

    호스트 환경안에서 수정이 너무 쉬워졌음!

     

     

    더보기

    참고자료

    생활코딩 Docker 입문수업을 바탕으로 쓴 TIL입니다.
    https://youtu.be/Ps8HDIAyPD0?list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf

     

    '코딩 > 🔫 PROJECT MANAGEMENT' 카테고리의 다른 글

    [git] gitignore을 했는데 왜 안지워질까  (0) 2022.01.05
    🧼 클린코드란?  (0) 2021.12.03
Designed by Tistory.