도커, Docker(발표 자료)

Jake_Young·2020년 8월 10일
1

도커, Docker

목록 보기
9/9
post-thumbnail

🐋 "Docker" is coming...

글로 배운 도커 🐥


😴 도커가 필요한 순간?! 3가지


🙄 그래서 언제 필요한데? - 1

"아.. Windows에서 Linux로 개발하고 싶다.."


😎 Virtual Machine 저리 가!

  • Centos <=> Ubuntu
  • Ubuntu:20.04 <=> Ubuntu:16.04

Windows <= ... ... => Linux


🙄 그래서 언제 필요한데? - 2

"이거 안 돌아가잖아.. 너 방금 새로 푸쉬 한 거 맞아?!"

...


🙄 그래서 언제 필요한데? - 2

...

"그게 왜 안 돌아가? 이거 봐! 내 노트북에서는 잘 돌아가잖아!"


😎 운영체제 레벨에서 전체를 백업!

  1. 나도 모르는 리눅스 명령어를 너무 많이 실행해버린 경우

  2. 이 프로그램은 관리자 권한으로 XX 명령어를 먼저 수행해야 할 경우

넌 그냥 도커만 해.. 실행은 걔가 보장하니까!!


🙄 그래서 언제 필요한데? - 3

"클라우드 시대.. 내 서버는 얼마나 크게 만들어야 되는거야?!"


😎 서버 자동화는 쿠버네티스로!

Auto Scaling, Load balancing, Parellel operation, Health Check !!

프로세스를 켜고 끄고, 이 노드에서 저 노드로!!


😛 잠깐 숨 한번 돌리고 갈게요!


🙃 도커가 뭔데??

  1. 호스트 OS'의 커널을 공유하는 게스트 OS

  2. 컨테이너를 관리해주는 플랫폼


😜 underlying technology, Linux

  1. Namespaces

    • isolation => pid, net, ipc, mnt, uts
  2. Control groups(cgroups)

    • sharing hardware resources and enforing limits
  3. Union file systems

    • storage driver

=> Container format


😗 중간 정리

도커를 쓰면 뭐가 어떻게 되는데?

  • 필요한 OS(종류와 버젼)를 실행하여 작업할 수 있다.
  • 시스템 설정 파일까지 저장할 수 있다.
  • 다양한 버전의 언어로 동시에 개발할 수 있다.
  • Vitual Machine은 GB 단위에 수 십 분의 설치 시간 필요
  • Docker는 MB 단위로 거의 즉시 실행
  • 호스트 OS와 성능 차이 거의 없음 (5% 미만)

😗 중간 정리

그럼 Virtual Machine보다 좋은 기술이네?

  • 둘은 역할이 다르다.
  • 정확히 말하면 도커로는 OS 계열을 바꿀 수 없다.
  • 도커는 windows용과 Linux용이 나누어져 있다.
  • Hyper-V 덕분에 Virtual Machine이 없는 것처럼 느끼는 것.
  • Isolation도 VM보다 도커는 완전하지 않다.

😗 중간 정리

Kubernetes는 뭔데?

  • Docker 덕분에 Application은 죽어도 되는 것이 되었다.
  • 하지만 Host OS가 죽어버리면 어떻게 할까?
  • Container를 Docker가, Docker는 Kubernetes로 자동화하여 관리할 수 있다.
  • 공식 문서를 읽어보면, Kubernetes는 강력한만큼 어렵다고 함

😗 중간 정리

--help

  • docker --help
  • docker image --help
  • docker container --help
  • docker volume --help
  • (ctl+p) + (ctl+q) : 백그라운드에 켜놓은 상태로 나가기

😋 도커 아키텍쳐

  • 클라이언트-서버 아키텍쳐
  • 유닉스 소켓 통신 기반의 REST API

🤣 도커 엔진(데몬, 런타임)

  • API 요청에 따라 도커 객체(컨테이너, 이미지, 네트워크, 볼륨)을 관리.

😇 도커 클라이언트

  • "docker" 명령어를 쓰면 클라이언트가 데몬에 이를 API로 전달.

😆 도커 레지스트리s

  • 도커 이미지를 저장하고 있는 곳으로 대표적인 곳은 도커 허브 (사설 가능)

😁 도커 오브젝트

  1. 이미지 (객체)

    • 도커 컨테이너를 생성할 때 필요한 지시사항이 포함된 읽기 전용 파일
  2. 컨테이너 (인스턴스)

    • 컨테이너는 실행할 준비가 끝난 이미지 파일

😭 실습 예제는 빠르게 넘어갈게요!!


😩 도커 설치 및 실행

  • curl -sSL http://get.docker.com | sh

  • systemctl start docker

  • usermod -aG docker user1

  • 윈도우에 설치할 땐 hyper-V 필수

  • 인스톨러를 다운받고 실행하면 끝 (powershell)


😇 컨테이너 생성 및 실행

  • docker run -it --name con1 ubuntu /bin/bash

  • 옵션 it는 interactive와 pseudo-TTY의 약자로 터미널 켤 때 필수

  • 컨테이너 이름은 con1이며 ubuntu 이미지를 상속받아서 /bin/bash를 실행하라

  • docker run -d --name myweb -p 80:80 httpd

  • 옵션 d는 detach의 약자로 백그라운드 실행하라

  • 옵션 p는 publish의 약자로 컨테이너와 호스트의 포트를 지정

  • 오른쪽 container의 port는 docker history httpd를 하면 알 수 있다


😊 Dockerfile로 image 생성

  • FROM: 원본 이미지 이름 사용(<이미지 이름>:<태그>)
  • MAINTAINER: 작성자 이름
  • RUN: 이미지를 만드는 과정에서 실행할 Shell Script 명령어
  • VOLUME: 컨테이너와 호스트가 공유할 디렉토리
  • CMD: Container가 실행되자마자 실행할 실행 파일 혹은 Shell Script
  • WORKDIR: CMD에서 설정한 실행 파일이 실행될 Default Directory
  • EXPOSE: 호스트와 연결할 포트 번호

🤣 Dockerfile 예제

  • FROM ubuntu
  • MAINTAINER Sunman Kim
  • RUN apt-get install nginx -y
  • RUN echo "daemon off;" >> /etc/nginx/nginx.conf
  • RUN chown -R www-data:www-data /var/lib/nginx
  • WORKDIR /etc/nginx
  • CMD ["nginx"]
  • EXPOSE 80

😝 docker 이미지 만들고 업로드

DockerFile로 만들 때

  • docker build -t sunman/myImage .

사용 중인 Container로 만들 때

  • docker commit "현재 이미지" "내 아이디/희망 이름"

작업 후

docker login -u "아이디"
docker push "내 아이디"/"희망 이름"

😛 Data Volume 설정하기

  • 데이터 볼륨은 컨테이너의 데이터를 호스트 OS에 저장하기 위한 것

  • 데이터 볼륨은 컨테이너 간의 데이터를 공유할 때 활용

docker volume create convol
docker volume ls
find / -name "convol"
docker run -it --name con1 -v convol:/data alpine
"cd /data"
"touch secret.file"
docker run -it --name con2 -v convol:/data alpine
"/cd data/"
"/ls"

🤗 docker network/port 설정하기

  • docker network create --driver bridge --subnet 10.10.10.0/24 mynet

  • docker run -d --name myweb -p 8080:80 --net mynet httpd

  • 기본은 docker0의 virtual bridge


🤫 의문사항

  • Docker로 운영체제를 켜면 지원되지 않는 기능이 있는게 맞나?
profile
자바스크립트와 파이썬 그리고 컴퓨터와 네트워크

0개의 댓글