db -> app-> middleware
여러개의 컨테이너가 필요할 때 사용
- yaml
도커로 DB 컨테이너 접속
- docker ps -a
- docker start mysql
- docker ps
- docker exec -it 이미지명 bash
use 테이블명
show variables like 'lower_case_table_names';
값이 0이면 대소문자 구분, 1이면 구분x
show variavles like 'lower_case_table_names'; 실행 결과
Variable_name Value lower_case_table_names 0
exit
yum install -y vim
컨테이너 다시 시작
유저명@컨테이너_id:/# ls
유저명@컨테이너_id:/# cd etc
유저명@컨테이너_id:/etc# ls
유저명@컨테이너_id:/etc# cd 컨테이너명
유저명@컨테이너_id:/etc/이름#/ls
유저명@컨테이너_id:/etc/이름#/vim my.cnf
i 입력으로 insert 전환
추가
[db명d]
lower_case_table_names = 1
esc
:wq!
위의 과정에서
[client]
default-character-set = utf8mb4
[컨테이너명(나는 mysql)]
default-character-set = utf8mb4
[컨테이너명d]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
use 컨테이너명;
status;
인코딩 방식이 아직 utf8mb4로 바뀌지 않은 경우
ALTER DATABASE mydb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
- 재확인
컨테이너들 안에는 각각 장고, 리액트 등등이 들어있다.
yaml은 컨테이너들 사이에 데이터 교환을 가능케 한다.
docker 실행 → yml 실행 → 컨테이너들 실행
dockerfile
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
리스트에 넣어 띄어놓는 이유는 바로 작동이 되지않고 리눅스에 들어가면 리스트가 해체되면서 바로 작동되도록 하기 위해
예를들어 장고 리액트 DB가 도커파일을 각각 하나씩 가지고 있어야 하고
docker-compose.yml은 3개를 묶어주는 기능이므로 단 하나 존재해야 한다. 주로 장고 프로젝트 안에 위치한다.
version: "3"
services:
database:
container_name: flussbergdb
web:
container_name: flussbergdj:v1
터미널에서 docker compose up 명령어 입력
docker images 로 이미지 리스트 확인 후
docker rmi [image id] 로 모든 개별 이미지 삭제
해결
파워쉘 관리자 권한으로 실행
리눅스 서브시스템 활성 명령어 입력
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
가상머신 플랫폼 기능 활성화 명령어 입력
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
도커 재시작
docker Image가 Alpine인 경우 /bash 대신 /sh를 사용