익명의 개발노트

Docker 가상환경 컨테이너 본문

Cloud/Docker

Docker 가상환경 컨테이너

캡틴.JS 2019. 7. 23. 19:58
반응형

가상화는 물리적환경을 가상환경으로 구성한 것이고, 도커는 기존의 가상화보다 가벼운 가상화이다.

기존에 VM은 운영체제 + 가상컴퓨터 자체를 가상화하였기에 많이 무겁다.

 

도커는 부팅부터 시작하지 않고, 우분투 일부 환경을 사용할 수 있게 해논 것이다.

 

우분투는 커널(시스템엔진)로 부터 시작을 한다. 시스템에서 명령어를 입력하면 커널 단으로 들어가서 시스템이 움직인다.

시스템에서 system space는 시스템이 사용하는 공간이고 user space는 사용자가 사용하는 공간이다. 

기존 VM은 system space + user space 둘다 가지고 있기때문에 무겁고, 도커는 user space 만 가지고 있다.

 

그러면 실행하려면 커널이 있어야하는데, 커널은 어떻게 사용하냐?? 

중간에 번역해주는 Translator가 필요하다. 이게 Docker server 라고 부른다. 

user space 부분은 이미지라고 부르고, Docker Client라 부른다.

 

그러면 어디에 사용하냐?

배포에 사용한다. 장점으로는 가볍기 때문에 속도가 빠르다. 명령어 실행시키듯이 할 수 있다.

 

그러면 왜사용하는가?

AWS에 배포하면 코드가 같아도 설정과, 환경이 내 컴퓨터에 있는 내용과 다르기 때문에 내 컴퓨터에서 잘 작동되도, 서버에 배포해서 보면, 잘 안될 때가 많다.

 

그러면 내 컴퓨터에서는 잘 작동했으니, 내 컴퓨터의 설정과 환경을 배포하면 되겠네?

그게 바로 도커의 역할이다. 내 컴퓨터의 설정과 환경자체를 배포해버리니, 안돌아가는 상황이 없다.

 

1. 중요한 컨셉 

   1)  Docker Client : 정확히 말하자면, 이미지를 실행시켜주는 것임.

   2)  Docker 이미지 :  소스코드 repository, 즉 환경+설정+코드를 담는 통이라고 보면 된다.

   3)  Docker registries : git hub 같은 Docker hub 이다.

   4)  Docker containers :  이미지를 실행시키는 가상화 공간임.

   5)  Docker Compose and swarm

        (1) Compose 는  각자의 환경들을 배포하면 프론트, 백엔드, 디비 환경이 분리되어있는 것을 연결시켜주는 명령어.

        (2) Swarm은 서비스가 커질 경우 서버수가 증가하게 되는데, 서버를 개별 컨트롤하는 것이 아닌 전체적으로 자동화하여

              관리하는 것. 이건 잘 사용안함. 구글의 쿠버네이트에 밀림. 

          * 쿠버네이트 어렵고, 국내에 이걸 쓸만한 서비스가 많이 없고, 설정이 엄청 어렵다. 오픈소스이다.

 

2. Docker 이미지구조는 변화된 이미지만 쏴올리는 방식이다. 

3. Docker 명령어는 리눅스 명령어에 Docker를 붙여 사용하고, 사용하려면 설치를 해야한다.

 

4. work flow   

 Docker 파일을 통해 이미지 빌드 => 공유는 DockerHub에 push =>  푸쉬가 되면 실제 사용해야할 Docker 서버에서 pull한다 =>  그 이미지를 실행함으로써 배포 끝.

 

5. Docker file

FROM python:3    //알파인 리눅스에서 파이썬 3 환경을 사용해라.
 
WORKDIR /usr/src/app    //Docker 이미지 있는 곳

## Install packages
COPY requirements.txt ./      //requirements.txt를 Docker 이미지 있는 위치(./)
RUN pip install -r requirements.txt

## Copy all src files
COPY . .

## Run tests
RUN apt update; apt install default-jdk -y   //실행 
#RUN python all_tests.py STAGING 

## Run the application on the port 8080
EXPOSE 8000   //포트 8000번 열기

## Config settings
#ENV ENV='STAGING' DATABASE='trueshort_staging' DB_HOST='staging-mysql.cj5v1k6zfree.ap-northeast-2.rds.amazonaws.com'

#CMD ["python", "./setup.py", "runserver", "--host=0.0.0.0", "-p 8080"]
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "whattowear.wsgi:application"]

//CMD부터는 이미지 파일 생성후에 작동하는 코드임.

6. 빌드하는법   

docker build -t wecode/w2w:10 . //(주소/레포 : 태그, 현재위치에서 다커파일 찾는)

7. 실행

 docker run --name api -d -p 8000:8000 wecode/w2w:10

    api는 이름, -d는 데몬, -p는 포트, 앞의 8000 포트는Docker 포트, 뒤의 8000포트는 물리적 환경(내컴) 포트     

반응형

'Cloud > Docker' 카테고리의 다른 글

Docker 설치(mac)와 명령어  (0) 2020.07.04
Docker 작동원리  (0) 2020.07.04
Comments