본문 바로가기
프로그래밍/Docker

[Docker] 윈도우에서 django 컨테이너 mysql 컨테이너 연동시키기

by 우주를놀라게하자 2022. 5. 15.
반응형
SMALL

시작하기


도커를 사용해서 각각의 컨테이너를 만들고, 따로따로 컨테이너를 띄워서 연동하려고 한다.
compose를 사용하기전, 연동이 되는지 안되는지를 테스트하는 작업에서 필요한 사항들을 적으려고 한다.

1. MySQL 이미지  설치! (mysql버전은 따로 지정안하면 무조건 최신으로 받기때문에 따로 지정은 안해줬다.)

$ docker pull mysql
$ docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=<password> -d -p 3366:3306 mysql

포트는 3306포트를 기존에 쓰고 있는 프로젝트가 존재하여, 3366(외부포트)로 지정해주었다. 

3366포트로 외부에서 접속이 가능한지 확인해본다! 자아알 붙는다!😀

2. 내 프로젝트 이미지를 만들어준다!


FROM python:3.10
ENV PYTHONUNBUFFERED 1

# RUN - 커멘드 명령어와 같은 명령어
RUN apt update 
RUN apt-get install inetutils-ping

# 복사?의 의미라고 생각하면된다. . -> 현재폴더를 도커 내부에 /DRF 라는 폴더로 옮겨준다.
ADD . /DRF
# WORKDIR - cd와 같은 명령어
WORKDIR /DRF

RUN pip install -r requirements.txt && pip install django-filter &&  pip install drf-yasg

크게 특별한건 없고, apt-get install inetuils-ping의 설치 이유는 django 프로젝트를 컨테이너로 띄운 후, mysql 이미지와 잘 연동이 되는지 확인하려 설치하였다.

이제 내 도커 이미지를 만들어 주자. 도커파일이 있는 프로젝트 내부로 들어가서 하위의 명령어를 입력한다.

$ docker build -t <이미지 이름> .

내 경우에는 docker build -t django . 으로 사용하였다. 마지막의 . 의 의미는 디렉토리 위치를 의미한다.

$ docker run -it  -d -v `pwd`:/DRF -p 8000:8000 --link mysql-container django

이제 내 프로젝트를 컨테이너로 띄우면 된다.

-d : 데몬옵션
-v : 마운트 옵션
`pwd`: (윈도우 WSL 사용) 나는 윈도우 cmd가 아니라 WSL를 사용하였기 때문에 `pwd`옵션이 가능한데, cmd를 사용한다면 이 옵션은 안될것이다. 하튼 pwd는 현재 경로이다.  그리고 :/DRF 도커 내부의 DRF라는 폴더와 마운트를 걸어주었다.
-p : 포트 외부에서 8000번으로 도커 내부 8000으로 접속할 수 있도록 연결해주었다.
--link : 컨테이너와 컨테이너를 연결하려면 링크 옵션을 사용해줘야한다. 
mysql 이미지를 생성하고 run을 하면서 --name 옵션을 줬는데, 그때 생성한 컨테이너 이름이다. 따로 설정을 안해줬으면, docker ps -a 옵션으로 mysql 컨테이너 이름을 확인해서 링크를 걸어주면 된다.

이렇게 두개의 컨테이너가 완성되었다면 우리의 프로젝트가 mysql 컨테이너와 잘 연동이 되었는지 확인할 필요가 있다.

$ docker exec -t <프로젝트 컨테이너 이름> ping <mysql 컨테이너 이름>

위의 명령어로 우리가 만든 mysql 컨테이너와 연동이 잘 되는지 확인해본다. 내 경우에는 django는 컨테이너 이름을 따로 설정을 안했기 때문에, tender_wu로 입력하였고, mysql 컨테이너 이름은 mysql-contianer로 설정했기 때문에 아래 명령어로 입력하였다

$ docker exec -t tender_wu ping mysql-container

만약 서로 연동이 된다면 아래와 같은 결과가 나온다.

Django 설정 수정


이제 연동이 잘 된것도 확인 했으니 django를 실행하여, migrate해주고 서버를 돌려보자. 그전에 setting.py를 살짝 바꿔준다.

  "DATABASES": {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "boards",
        "USER": "root", //도커 mysql 컨테이너 생성시 따로 user명을 안지정했으면 기본값은 root이다
        "PASSWORD": "django", // 도커 mysql 컨테이너 설정시 입력했던 비밀번호
        "HOST": "mysql-container", // 도커 내부에서 서로 연동하기 때문에 도커 컨테이너 이름을 적어주면 된다.
        "PORT": "3306"// 도커 내부에서 내부로 붙기 때문에 mysql 컨테이너의 외부포트가 아니라 내부 포트를 적어준다.
    	}
    }

이제 django 컨테이너 내부로 들어와서 migrate를 진행해준다.

이제 마지막으로 컨테이너 내부에서 django를 시작해준다.

Django mange runserver


$ python manage.py runserver 0:8000

외부에서 접속을 해야하므로, 꼭 맨 마지막에 포트를 적어주는 것은 잊지말자

완성!

결론


docker compose를 만들기전 셋팅을 하는 방법에 대해서 적었다. 기존에 여러차례 했던 과정이라면 생략하고 진행 할 수 있겠지만, 도커로 개발환경을 사용하는 사람들에겐 도움이 될 것 같아서 적는다

물론 compose 한번에 개발환경을 만들 수 있겠지만, 아직 도커에 대해서 자세하게 알지 못하는 사람이라면 따로 따로 컨테이너를 만들면서 실습할 것이기에 도움이 됬음 한다.

* 참고로 볼륨 옵션은 따로 주지 않았기 때문에, mysql컨테이너가 종료가 된다면 데이터가 모두 사라진다. 그렇기 때문에 볼륨 옵션을 따로 지정해주어야지 데이터가 삭제되는 불상사를 막을 수 있다.

근데 이 글에선 다루지 않겠다

이상!

반응형
LIST