Software Maestro 멘토특강 - Docker의 기본

김정욱·2021년 5월 16일
0

SoftwareMaestro

목록 보기
6/6
post-thumbnail

Docker

[ 개념 ]

  • 컨테이너 기반의 오픈소스 가상화 플랫폼
    (이전에는 OS 가상화 방식을 사용)
  • 컨테이너 ?
    • 격리된 공간에서 프로세스동작하는 기술

[ OS 가상화 ] - 이전 사용 방식

  • VirtualBox / VM ware는 모두 OS 가상화
  • OS 자체가상화 하기 때문에 resource가 매우 크다
  • 전가상화 / 반가상화 방식 모두 결국 OS를 가상화 하기 때문에 근본적인 한계를 벗어나지 못함
  • 해결 방안으로 등장한 것이 바로 프로세스를 격리하는 방법
    • 리눅스에서는 이 방식리눅스 컨테이너 라고 부름
    • 하나의 서버여러개의 컨테이너실행하면 서로 영향을 미치지 않고
      독립적으로 실행되어 마치 가벼운 VM Virtual Machine을 사용하는 느낌을 준다

[ 정보 ]

  • 최근 도커프로그래밍의 필수 요소 중 하나가 되었다
  • 개발 환경에서는 주로 도커와 관련된 도구들로 구성된 패키지를 사용
    • 도커 포 맥(Docker for Mac)
    • 도커 포 윈도우(Docker for Windows)
  • 도커리눅스 커널 위에서 동작하기 때문에, 이나 윈도우에서는 경량 가상머신중간에 사용되어 리눅스 커널 위에서 도커가 동작될 수 있게 됨
  • 환경 구성 : 운영되는 환경로컬환경 2개를 구성해서 이미지를 기반으로 사용하게 된다
    • 배포되어 운영되는 환경(운영)
    • 로컬 환경(개발)

Docker Network

(ref : https://jonnung.dev/docker/2020/02/16/docker_network/)

  • 도커에서 사용할 수 있는 네트워크 종류
    • 브리지(Bridge)
    • 호스트(host)
    • 논(none)
  • docker0 ( == Bridge)
    • Docker를 설치하면 최초 docker0 이라는 가상 인터페이스가 생성
      (일반적인 가상 인터페이스가 아님)
    • 도커자체적으로 제공하는 네트워크 드라이버브리지(Bridge)에 해당
    • 컨테이너가 통신하기 위해 사용
    • 도커 컨테이너를 만들면 자동으로 이 브리지를 활용하도록 설정되어 있음
  • docker container생성하면?
    • Linux Namespace 기술을 이용해 각자 격리된 네트워크 공간할당받음
    • Bridge주소서브넷을 가짐(해당 대역 안에서 IP 할당)
    • 내부 Namespace할당되는 eth0 인터페이스가 할당
    • docker0바인딩 되는 veth~ 이름 형식의 가상 인터페이스가 할당됨
      (컨테이너의 eth0호스트의 veth서로 연결되어 있다)
  • docker0은 결국 veth 가상 인터페이스호스트의 eth0 인터페이스를 이어주는 중간다리 역할
  • 컨테이너 안eth0 인터페이스veth 가상 인터페이스를 통해 외부와 통신할 수 있게 됨
  • 정리
    • 생성된 컨테이너들은 bridge서브넷포함된다 (bridge 영역에서 IP 할당)
    • 컨테이너는 결국 host의 포트번호를 통해 연결되고 구분
      --> NAPT(Network Address Port Translate)
    • NAT : 공인 IP사설IP서로 변환해주는 것 (공인 아이피는 제한적임)
    • NAPT : NAT의 기능에서 포트까지 더해서 주소를 변환해주는 것

실습 환경

(refs : https://tlo-developer.tistory.com/33)
1) VirtualBox 설치 + MacOS 네트워크 설정
2) Ubuntu 18.04 Server 다운로드
     : ubuntu-18.04.5-live-server-amd64.iso
3) Docker Hub 회원 가입
4) Docker 설치
     curl -s https://get.docker.com | sudo sh
5) 일반 USER에서 바로 사용할 수 있도록 설정
     sudo usermod -aG docker $USER

개념 정리

[ Docker에 필요한 개념 ]

  • Docker File
    • 서버 구성문서화한 것
  • Docker Image
    • 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태
  • Docker Container
    • 이미지(Image)실행한 상태
  • Dockler Compose
    • 복수 개의 컨테이너를 실행시키는 도커 애플리케이션이 정의를 하기 위한 툴
    • yml파일을 사용해서 애플리케이션의 모든 환경을 포함
      (production / staging / development / testingCI 워크플로우 등)

[ 기본 Docker Container 생성 ]

  • dockerfile 작성
  • docekrfiledocker image 생성
  • docker imagedocker container 생성

[ Docker VS Docker Compose ]

  • dockerfile VS dockerfile-dev
  • dockerFile build VS docker-compose build
  • docker run + 옵션들 VS docker-compose.yml
    : 이미지에 다양한 옵션 지정 (볼륨설정 등등)
  • docker run VS docker-compose up
    : 옵션이 붙은 이미지실제로 수행해서 컨테이너로 생성

[ Docker Hub ]

  • Docker Image들이 관리되고 공유되는 공간
  • 내가만든 이미지push / pull 해서 관리할 수 있음

[ Docker VS Kubernetes ]

  • Docker(도커) VS Kubernetes(쿠버네티스)
    • Docker : 컨테이너 기반의 가상화 플랫폼
    • Kubernetes : 컨테이너화 된 애플레이션관리하는 툴 (컨테이너 관리)

명령어

[ 여러 명령어 ]

  • docker ps : 현재 수행중인 모든 컨테이너 목록
  • docker ps -a : 정지된 컨테이너를 포함해 모든 컨테이너 목록
  • docker stop [아이디 or 이름]
  • docker version
  • docker pull [image] : image 받아오기
  • docker image ls : Docker image 리스트 목록
  • docker inspect [image name] : docker 이미지 정보를 json형태로 보여줌
  • docker logs -f [container name] : 컨테이너의 로그 보기

[ Docker Hub에 올리기 ]

  • docker login : Docker Hub 로그인
  • docker image tag [old_tag name]/[old_image name] [new_tag name]/[new_image name]
    : 이미지명 혹은 태그명 변경
  • docker push [tag name]/[image name] : Docker Hub에 push

[ Docker Container 시작 ]

  • docker run -name [container name] -d -p 80:80 [image name]
    • -d : 데몬으로 실행 (백그라운드 실행)
    • -p : 포트포워딩 옵션 (host의 80번포트container의 80번 포트와 연결)

[ Container에 들어가기 ]

  • docker exec -it [container name] /bin/bash
    : exec명령어는 원래 명령어를 대신 수행하는 것인데 shell을 실행시켜 접속할 수 있음
profile
Developer & PhotoGrapher

0개의 댓글