Developing

패스트캠퍼스 캐시백 챌린지 32일차 본문

Devops/Fastcampus 캐시백 챌린지

패스트캠퍼스 캐시백 챌린지 32일차

DEV_BLOG 2022. 5. 19. 23:46

 

 

 

수강 인증샷

 

Docker에 관련된 클립들을 수강하는식으로 챌린지를 진행하였다. 기존에 Docker는 Docker Desktop을 활용해서 Docker Command를 사용해보거나 단기인턴할때 컨테이너 오가는정도로 잠깐 다루었었는데, Dockerfile도 직접 만들 수 있어서 좋았던 것 같다. 다음 포스팅은 nginx를 Docker와 활용하는 포스팅을 올리게 될 것 같다.

 

 

Docker 개요

  • 문제점

⇒ 개발 환경을 그대로 복제해서 같은 환경에서 배포하고 싶다.

⇒ 같은 서버에서 개발 환경을 여러개로 분리하고 싶다.

  • 가상환경

⇒ 하나의 서버 내에서 프로그램별로 환경을 확실하게 구분해준다.

⇒ 그러나 비효율성이 생긴다.

⇒ 각 가상환경별로 컴퓨팅 파워를 나누어서 쓴다

  • Docker

⇒ 컨테이너 형태로 환경을 구분해준다.

⇒ 이미지를 통해 같은 환경의 가상 컴퓨터(컨테이너)를 무한히 생성할 수 있다. (auto scaling)

⇒ 컴퓨터 자원을 공유해서 쓰므로 유동적이다.

  • Docker-compose

⇒ 여러 개의 Docker Container를 한번에 배포할 수 있게 하는 툴

 

 

Docker Django Project에 적용해보기

여느때처럼 ubuntu EC2 instance를 하나 생성해주고, putty로 열어준다.

aws 프리티어 계정을 달리해보아 인스턴스를 생성해주었는데 ppk 파일을 chmod로 권한 변경이 안되는 현상은 다음과 같은 command로 해결하면된다.

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

 

git clone이 먹지 않는경우 deploy key 인증작업을 먼저해주자.

ssh-keygen -t rsa
cd .ssh
cat id_rsa.pub

 

해당 내용을 복사해 github django project의 deploy keys 항목으로 넣어준다.(이름은 docker-compose-django 정도로 해준다.)

이메일 주소로 다음과 같은 command를 실행해준다.

ssh-keygen -t rsa -C ["MY_EMAIL@Email.com"]
cat ~/.ssh/id_rsa.pub

 

해당 내용을 복사해 프로필 계정⇒ Settings⇒ SSH and GPG Keys ⇒ New SSH Keys 로 향하여 “django-docker” 정도의 title로 key를 등록해준다.

mkdir docker-django
cd docker-django
git clone ["git@github.com:MY_DJANGO_PROJECT~~~~.git"]

 

프로젝트 폴더로 위치시킨 후 requirements.txt의 내용중에서 기존것에서 하나를 추가해준다.(uwsgi)

vi requirements.txt

 

 

다음과 같은 command로 docker를 다운받아준다.

curl -fsSL <https://get.docker.com/> | sudo sh

 

컨테이너를 여러개만들때 유기적으로 활용할때 docker compose를 실행시킬때 컨테이너가 실행되지 않는 경우를 방지하기 위해 권한 설정을 해준다.

sudo usermod -aG docker $USER

 

이제 Dockerfile을 만들어주어 아래와 같은 내용들을 저장해준다..

vi Dockerfile
FROM python:3.10.4

ENV PYTHONUNBUFFERED 1

RUN apt-get -y update
RUN apt-get -y install vim

RUN mkdir /srv/docker-django
ADD . /srv/docker-django

WORKDIR /srv/docker-django

RUN pip install --upgrade pip
RUN pip install -r requirements.txt

EXPOSE 8000
CMD ["python" , "manage.py" , "runserver", "0.0.0.0:8000"]

  • FROM python:3.10.4

⇒ Image를 default로 보유할 수 있는 공장같은 것이다. python 3.10.4이 다운받아진 이미지이다.

⇒ python 3.10.4 이미지를 불러와서 수정해오자.

  • ENV PYTHONBUFFERED 1

⇒ ENV 환경변수 설정

  • RUN

⇒ Docker Container가 생성되기 시작하면서부터 실행해라

  • ADD

⇒ 지금 디렉토리를 이 디렉토리로 옮겨라

  • WORKDIR

⇒ 일할 디렉토리는 여기다

  • EXPOSE

⇒ 8000번 포트를 가지고있다.

   (여기까지오면 컨테이너를 다 만든것이다.)

  • CMD

⇒ 띄어쓰기로 구분된 명령어를 CMD창에 치는 것을 의미한다.

docker build -t docker/django .

방금 만든 Dockerfile에 해당하는 도커 컨테이너의 이미지를 생성해준다. 여기서 docker/django는 디렉토리가 아니다. 이미지의 이름에 해당한다. 그 이미지 안에 현재 디렉토리안에서 실행시키라는 의미이다.

 

 

Dockerfile의 9 line에 two argument 가 필요하다고 나오는 에러가 나온다.

 

ADD ./srv/docker-django 를 ADD . /srv/docker-django 로 수정해주어 문제를 해결해주었다.

 

 

이번엔 invalid reference format Error가 발생하였다. 구글링 해도“…??????” 하던와중 아주아주 간단한 문제였음을 발견했다.

 

 

python:3:10.4 를 python:3.10.4 로 변경해주어서 해결하였다! (잘도 숨어있네..)

 

 

이제 Docker image들의 현황을 확인해보자.

docker image list

 

 

python 3.10.4는 docker/django를 만들때 FROM 3.10.4 이미지로부터 시작을 해라! 라고 해주어서 생성된 것이다.

docker run -p 8000:8000 docker/django

p의 옵션은 port를 의미한다. 8000포트로들어오면 이 서버내의 있는 8000번 포트로 연결시키라는 의미로 보면 된다. docker/django 이미지를 사용해서 도커 컨테이너를 실행시킨다고 보면 된다.

 

 

 

 

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.