TIL - Docker

Heechul Yoon·2020년 3월 18일
0

LOG

목록 보기
33/62

컨테이너라는 개념가지고 경량화된 가상화된 기술.
이 기술이 흥하기 전에는 vm ware같은 흔한 가상화 기술. 이 영역에서 확고한 위치를 가지고 있음. 최근에는 클라우드 세상에 오면서 가벼운거 찾는 추세. -> 이거랑 대비되게 컨테이너개념이 생김. 가상의 os설치환경을 컨테이너라 부르고 이걸 여기저기 가져다 놓고 돌리면 돌아가게 되는 구조.

이게 속도차이가 나는 이유?

기존의 VM(virtual muchine) 예전에는 회사에서 많이 썻음. 좋은데 느리다. 이건 그냥 자동화를 할 수는 있지만 상대적으로 귀찮은게 많다. hypervizer 운영체제가 있으면 vm웨어 프로그램 깔고, 하이퍼바이저로 동작하는거. 내가 쓰고있는 ㅅ시스템상에 격리된 일정량 디스크 공간 메모리자원을 내가 쓰겟다고 할당받고 예를 사용하는 순간부터는 시스템이 자원할당해서 거기에 메여서 사용하는것. 디스크를 사용할 때 로드가 가장 많다. os하나를 새로 설치해야함. 윈도우 처럼 usb파일 로드시켜서 우분투설치하듯이 설치하는 작업이 있어야함. 시간잡아먹고, 컴퓨터를 부팅새로하는등 체감시간이 길다. 컴터를 하나 새로 설치한느낌으로 이것저것 손이 많이간다. 이거를 운영하는 컴터 스팩이 좋아야함. 리소스를 엄청 잡아먹음. 컴터한대에 서버올렸다해서 서버스팩다쓰지는 않음. 회사에서는 이것도 하고 다른곳도 하고싶음 . 그리고 전통적으로 윈도우에 서 돌아가는 갛=상화. 전부 윈도우기반.

리눅스에서도 가상화 vm같은거 따로있음. 잘 쓰진않음.

이런번거로운거 쓰다가 도커등장

컨테이너방식의 가상화 기술. 도커는 컨테이너가상화기술 사용하는 회사 이름. 워낙 유명해지다보니깐 컨테이너 하면 도커. 하지만 컨테이너방식 쓰는 오픈소스 많음. 이

그럼이게왜 편하냐?

내가하나 가상시스템 등로록할때 마다 오에스 다시설치 물리적공간 맣ㄴ이차지

하지만 도커는 도커허브(아마존처럼)라는 곳에 다양한 이미지들이 제공되고있음. 관리되는 이미지들이 있음 ,내가이런이미지 쓰고싶다고 호출만하면 내가만들고싶은 컨테이너에 그 이미지 올려줌. 내가직접 컨테이너를 만들었을때 os설치하고 하는 과정없음 걍 땡겨오면됨. 컨테이너는 내컴터에서 돌리는 EC2같은거. os가있으면 돌릴수있는게 컨테이너.

도커머신이 있어야지 컨테이너화하는 작업가는 도커머신은 있어야함. 동작하는방식은 전부다 설치하는게아니라 이미지만 가져다 땡겨오면 얼마ㅈ든지 그걸로 복제해서 몇개든 만들수 있다는점. 컨테이너에 프로그램 설치하면 이미지 배이스로 내가 설치한것들이 추갖거으로 생성됨, 내가 한 작업들이 그 이미지를 베이스로 계속 쌓임.. 그럼 그걸 다시 사용자 전용 이미지로 만들 수 있음..

클라이언트 서버 이미지 레지스트리 로 이루어짐. 클라이언트 서버는 도커 프로그램.

도커이미지 - 공용화 된 이미지를 가져다 기반으로 해서 프로젝트 올려서 그작업에대한것 까지 이미지에 포함해서 새로운 사용자된 이미지를 빌드할수있음. 사용자된 이미지 만들어 나만의 저장소에 올릴수있음. 도커허브에 올리는것. 깃허브 처럼. 저장소에 바로 올리고 리모트환경에 올림. 그리고 전세계어디서든 리모트 땡겨서 실행도 할수있음. 이런 성질 때문에 배포가 빨라진다.

예쩐에는 설치환경 물리적인것 사람이 해결해야하고, 쉽게 복제되지않는것들도 많음 . 가상화 복제하는게 정말 힘들엇음. 복제가 느리고 배포가 느려지는거. 이미지 성공적으로 빌드해서 공유만 시켜놓음 몇개가 되었든 그 이미지가 문제가 도되지않으는이상 늘릴수 있음. 처음에는 한대로 시작해서 100만명이 몰려와서 서버가 필요하면 도커 써서 이미지 땡겨서 실행하면 서버 돌아가니깐 그작업을 통해서 몇천대 가상환경 공유가능.

도커에 마치 배포된 환경처럼 이미지만들고, 이제 플젝을 ec2에 올려서 ㄱㄱㄱㄱ

도커 - 컨테이너 가상화기술.
컨테이너 가상화기술 ? os를 격리해서 자원획득이 아니라 하이퍼바이저를 통한게 아닌 오에스 자체에서 서버ㄱㅏ 바로 os커널에 컴파일 되듯이 바로바로 자원을 가져다 쓸수있는 상태로 만들어주는것. 내가 사용하고있ㄴ,ㄴ os의 커널을 호출해서 바로바로 자원으로 쓸수 있게 하는것. 부팅과정이 없고 바로 쓸수 있다는것이 엄청난 장점. 속도의 차이를 보여줌.

어느정도는 기초지식 있어야함.

도커파일이 왜존재하냐?. 지금하는 실습에서는 체감안됨, 도커에서 정해준 규칙,. 파이썬3가

도커실습

1차프로젝트 환경 이미지만들기.

빌드하기
-d 지속적프로세스로 돌ㅇㅏ가게 하기위해 데몬옵션으로 실행
-p 8000으로 쓰면 안쓴다는 가정하에 포트 8000으로 사용하는거. 포스트포트는 8001으로 해도되고 도커는 8000으로 함. 이거랑 연결된 무언가의 몇천번.
내가 쓸이미지명 지정

실행하고 상태.

컨테이너에 이름안넣으면 그냥 자동으로 이름 매칭해준다. status를 칠때마다 시간는다 -> 정상적으로 실ㅈ행이 된다는 뜻.

테스트하기

http -v localhost:8000/

rds에접속해서 도커에 명령날리면 결과나와야함.

!!!!!!!!!!!!!!!!!이미지 빌드까지 성공하고 이미지 실행해보고나서 로컬호스트로 런서버 하고 httpie로 값 잘들어오는지 확인할것.

도커 푸시하기

도커설치

도커로그인

docker login

로그인하고나면 푸시가능

docker push 자기가 만든 이미지 이름:포트

도커 회우너가입하면 하나의 레포지토리는 공짜로준다. 이 레포지토리 안에 이미지 여러개 올리기 가능함.

이미지가 중요하고 컨테이너는 중요하지않음 언제든지 지워도됨. 컨테이너는 이미지를 실행시킨 결과물. 이미지를 바탕으로한 실행상태가 컨테이너.

푸시하고 도커허브에 repo에 가서 확인할 수 있음.

이제 남은건 도커 pull해서 run하는거 밖에 안남음

도커설치하고 pull하고 run하면됨

ec2안에서 도커 ㄱㄱ

이제 아마존으로 들어가자.

기존 ec2에서 돌고있는 guniconrn끄고 도커설치하고 ㄱㄱㄱㄱ

ec2로들어가서

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce

sudo apt install docker-ce

이거 전부 실행해준다.

이제 ec2에서 도커 로그인, 도커 풀한다

sudo docker login

sudo docker pull ulfrid/sirenorder:0.1

ec2는 우분투니깐 sudo 붙혀줘야함.

ec2에서 이제

sudo docker images
풀되어 들어온 이미지를 확인한다.

netstat -lntp

sudo docker run -d -p 8000(내 로컬에 포트, 내가몇번줘도 상관없음.):8000(Dockerfile에 expose로 들어가있는 포트, 컨테이너 실행되어 개방된포트) ulfrid(도커에 등록된 사용자명)/sirenorder:0.1(이미지 이름)

이제 도커 런하고

profile
Quit talking, Begin doing

0개의 댓글