42Seoul/Docker

9. docker 가이드 파해치기 [Get started] part 7

part 7) Multi container apps

 

이젠 여러게의 컨테이너를 사용하는 방법이다

docker network create todo-app

todo-app 이라는 network를 만들어준다

docker run -d \
     --network todo-app --network-alias mysql \
     -v todo-mysql-data:/var/lib/mysql \
     -e MYSQL_ROOT_PASSWORD=secret \
     -e MYSQL_DATABASE=todos \
     mysql:8.0

이제 봐야할거는 

https://hub.docker.com/_/mysql/

이거다 왜냐하면 이미 정해놓은 변수들과 룰이있어서 확인한다음 그거에 맞게 써야한다

일단

--network : 이녀석은 네트워크를 이어주는애같다

--network-alias : 네트워크의 환경에 mysql을 추가한거 같다

-v todo-mysql-data: /var/lib/mysql 이건 뭐냐

-e MYSQL_ROOT_PASSWORD  : 페스워드를 입력하는거다

-e MYSQL_DATABASE : 데이타베이스 이름을 정하는거다

mysql:8.0 : 버전을 설정해서 받으려고 하는거 같다

 

 

docker exec -it <mysql 아이디> mysql -u root -p

이걸로 실행 

exec : 실행하는거 

 

이제 mysql비번을 설정했으니 그것을 처준다 "secret" 으로 설정하였다

그리고 

db를 확인해보면 todos가 잘있는걸 확인된다

이렇게 써준다고 하는거 같다..

이단이건 암기인듯..

 

mysql에 데이터 저장하기

이걸보면 미리 켜둔 db에서는 todo items를 찾을수 없는데 새로킨 db는 저걸 찾아 보여준다..

왜일까??? 같은 db인데

 

$ docker exec -it <sql 아이디> mysql -p todos
...비번입력
mysql> ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'secret';
mysql> flush privileges;

이건 mysql에  들어가서 추가를 해주어야 한다

그리고 나가서 

docker run -dp 3000:3000 \
   -w /app -v "$(pwd):/app" \
   --network todo-app \
   -e MYSQL_HOST=mysql \
   -e MYSQL_USER=root \
   -e MYSQL_PASSWORD=secret \
   -e MYSQL_DB=todos \
   node:18-alpine \
   sh -c "yarn install && yarn run dev"

이걸 실행한다음 

다시 sql에 들어가는걸 추천한다 다시 들어가는식이 아니면 안됨..

암튼 그렇게 db에 내 데이터를 저장할 수 있다