Image에서 container를 만들 수 있고, 이는 Class와 Instance 관계와 유사하다.
그렇다면 Image를 어디에서 가져오는가?
GUI(Graphic User Interface)
그래픽적으로 작업하는 환경
마우스로 조작하면서 작업한다.
CLI로 작업하기 어려운 초심자들에게 좋다!
CLI(Command Line Interface)
Docker Hub 접속 (https://hub.docker.com/)
Portainer 검색
portainer-ce 사용(https://hub.docker.com/r/portainer/portainer-ce)
Deploy Portainer 선택(https://docs.portainer.io/v/ce-2.9/start/install)
Docs에 요구되는 내용 넣어주기
docker volume create portainer_data
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
첫 설치라면 해당 문구가 발견됨
Unable to find image 'portainer/portainer-ce:latest' locally
latest: Pulling from portainer/portainer-ce
설치 확인
root@vultr:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9be01d36478 portainer/portainer-ce "/portainer" About a minute ago Up About a minute 8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer
빌린 IP에 port를 추가해서 접속
Username과 Password 설정 후 CreateUser 설정
만약 timeout이 나온다면
docker restart portainer
Docker 사용 선택
가상서버 내 Docker 시스템에 어떤 일이 벌어지는지 GUI로 확인 가능
Portainer Image가 실행되고 있는 것을 확인할 수 있음
우리는 VULTR라는 가상 서버를 대여해서 이 안에 Docker라는 시스템을 구축해놓은 상태이다. VULTR라는 곳에서 빌린 서버 자체도 PORT가 존재하는 컴퓨터이지만, 이 안에 있는 Container 하나도 시스템이라고 볼 수 있다.
Portainer의 Containers로 접속
Create container
가상 서버의 port와 container port 연결
Manual network port publishing 클릭
Nginx는 웹 서버의 port로 기본적으로 사용하는 port가 80
80-80으로 테스트
Deployment in Progress 선택
설치 완료
IP로 접속 확인
Docker에 Django Container를 만드는 것은, 이미 Docker hub에 있는게 아닌 직접 만든 소스이므로, 배포가 다소 까다로울 수 있다.
이러한 Docker Image를 만드는 일종의 설계서가 Dockerfile이다.
How to make an image
Image를 가져와서 실제 컨테이너를 만들기 위해 필요한 과정들을 Dockerfile을 통해서 만들어준다.
Select Base Image
Run Command
cd ...
와 유사하다 cd ...
는 상대경로가 적용되지만 WORKDIR는 절대 경로 기반으로 명령해야한다! 가상환경에서 설치한 package들을 requirements.txt에 담는다.
pip freeze >> requiremetns.txt
ignore에 없는 파일들을 git에 업로드한다.
IDE에 Dockerfile을 생성해준다.
BaseImage를 설정해준다.
FROM python:3.9.13
WORKDIR를 설정해준다.
WORKDIR /home/
Github를 클론한다.
RUN git clone [repository]
HOME에서 git clone을 사용했기 때문에, HOME에 레포 폴더가 생성된다.
WORKDIR /home/Pinterest
라이러리를 설치한다.
RUN pip install -r requirements.txt
migrate를 진행한다.
RUN python manage.py migrate
Port를 노출시킨다.
EXPOSE 8000
Runserver를 list 형태로 진행한다.
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
git ignore에 적어둔 secretkey 및 보안 정보를 입력해준다. (일단 임시적으로, 나중에 해결 방법을 강의에서 다룬다고 한다.)
RUN echo "SECRET_KEY=[yoursecretkey]" > .env
Portainer.io에 접속 > Images > Buiild a New Image
이름 설정
Dockerfile 업로드
Build the Image 클릭!
Container추가
Containers > add container
이름은 django_container, Image는 이전에 생성한 이미지로 적용
publising port를 host: 8000, container:8000으로 설정
deploy
console에 python manage.py createsuperuser 입력
id, email 등 입력
생성 완료 !