docker로 mysql, redis 실행. Django와 연결
- Study/서버
- 2020. 2. 23. 16:45
서버 개발을 하다 보면, 앱 서버와 DB서버가 분리되어있는 경우가 많다. (사실 거의 대부분이다.)
또 로컬에서 개발환경을 만들때 앱 서버 따로 DB따로 띄워주는 것이 상~~당히 귀찮고 복잡하다.
다행히 최근에는 컨테이너 형태의 이미지로 서버를 띄우는 경우가 많아 생각보다 간단하게? 구성할 수 있다. 서버 자체가 컨테이너 이미지로 되어있다면 더더욱 쉽다. (그냥 서버에 있는 이미지를 로컬에서 띄우면 된다)
내가 일하는 회사의 경우 앱, DB 모두 서버에 설치하여 구동중이다. 앱은 EC2에 Django를 설치하여 서비스하고, DB는 AWS RDS서버를 사용 중이다. 보통 테스트할 때 베타 서버에 있는 DB에 붙어서 테스트를 했는데, 이번에 서버 플로우나 DB구조를 대대적으로 변경하기 위해 로컬에서 작업환경을 만들어봤다.
일단 계획은 Django는 로컬에서 그냥 실행하고 MySql과 Redis만 docker로 띄워 연결할 것이다. 이전에 PostgreSql은 도커로 설치해봤는데 MySql은 처음이다.
MySQL 띄우기
명령어는 터미널에서 docker pull mysql
를 입력하면 mysql을 다운받는다.
docker를 설치할 때 이런 명령어들을 다 기억하는 것이 아니라 docker-hub에 들어가면 쉽게 찾을 수 있다.
hub 페이지에 실행하는 명령어도 나오는데 나는 아래와 같이 실행했다.
docker run -it --rm --name mysql-db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_PASSWORD=password mysql
그럼 이제 마구마구 명령어가 뜰 것이다. 아마 실행이 되었을 텐데 실행되었는지 확인하려면 다음과 같은 명령어를 쳐보면 된다.
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'NAME': 'mysql-db',
'USER': 'root',
'PASSWORD': 'password',
'PORT': '3306',
'OPTIONS': {'charset': 'utf8mb4'},
}
}
Django에서도 DB설정을 위와 같이 로컬로 바꿔주니 바로 접속 가능! 신나게 makemigrations를 때렸다.
Redis 띄우기
MySql로 docker를 사용해 봤으니 Redis도 쉽다. 사실 먼저 이미지를 docker pull img로 받지 않아도, docker run을 실행하면 이미지가 있는지 검사해서 있으면 실행, 없으면 다운로드 후 실행된다.
아직 redis img를 설치하지 않은 상태에서 아래 명령어를 실행하면 다운로드 후 실행된다.
docker run --rm --name some-redis -d -p 6379:6379 redis
이 명령어를 치면 또 뭐라고 쭈우우욱 나오는데 docker ps 명령어로 정상 실행되었는지 확인할 수 있다.
Django에서 docker 설정 역시 settings.py에서 할 수 있다.
#settings.py
CACHES = {
"default": {
"BACKEND" : "django_redis.cache.RedisCache",
"LOCATION" : "redis://127.0.0.1",
"OPTIONS": {
"CLIENT_CLASS" : "django_redis.client.DefaultClient",
}
}
}
위와 같이 선언하면 Django에서 redis를 연결할 수 있다. 연결만 한다고 사용되는 것은 당연히 아니고, 코드상에서 redis를 사용하도록 명시해야 한다. django.core.cache패키지를 사용해서 cache를 사용하면 django에 등록된 cache를 사용하는데, redis를 등록했기 때문에 redis를 사용하게 된다.
더 자세하게 cache를 사용하는 방법은 따로 포스팅할 예정이다. 궁금하신 분들은 구글링 하면 쉽게 나오기 때문에 찾아서 사용해보면 될 것 같다.
'Study > 서버' 카테고리의 다른 글
ec2에 docker django 이미지 만드는데 자꾸 no space left on device 에러날 때 (1) | 2020.06.14 |
---|---|
AWS RDS 사용중 MySQL server has gone away 에러 발생 !? (0) | 2020.05.29 |
윈도우 서버 세션 종료시 락 안걸리게 하기. (0) | 2019.06.12 |
Double 소수점 표기 , 데이터베이스와 소스상의 표기 차이 (0) | 2018.12.12 |
맥 미니 서버용에 MySql, phpMyAdmin 설치하기 (0) | 2017.06.02 |