[04] Docker, mySQL바탕의 Dockerfile 만들기(feat.database폴더)

이 글은 도커사용을 위한 가이드 글이 아닙니다.

개인학습 기록용 포스팅입니다.

 

 

 

 

저번에 뜬 404페이지 오류를 수정하려 갖가지 방법 다 해봐도 안 되길래 뛰어넘겠다.

대략적으로, 제대로 실행되었다면 의도한대로 백엔드와의 연결이 되지 않은 상태로 페이지가 열린다. 따라서 "초기화면은 휑하다. "

ctrl+c로 터미널을 종료하고, 컨테이너랑 이미지를 삭제해주자

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker image prune -a

 

 

이번엔 database폴더에서 도커를 실행해보자

 

# dababase폴더로 가자

이번엔 database폴더의 Dockerfile을 이용하여 msql가져오기.

=> mysql 5.7버전의 이미지를 다운받아 개조할 것이다.

 

# 명령어 살펴보자

  • ENV, 이미지 환경변수
ENV MYSQL_USER mysql_user
ENV MYSQL_PASSWORD mysql_passwordENV 
MYSQL_ROOT_PASSWORD mysql_root_passwordENV 
MYUSQL_DATABASE visitlog

해당 Docker파일에는 위의 내용들이 있다.

위 코드를 통해 컨테이너 안에 저런 내용이 담기게 된다

즉, MYSQL 데이터베이스에 어떤 사용자명과 비밀번호, 데이터베이스명 등을 사용할지 미리 지정해두는 것.

실제로는 이런곳에 그대로 적으면 큰 일난다. 파일만 열면 개인정보 거덜나니까. 

 

  •  COPY
COPY ./scripts/ docker-entrypoint-initdb.d/

이 명령어의 역할:  [scripts 안에 있는 파일들] --복사--> [이미지 내부의  파일]

다시말해 mysql은 scripts이하의 sql파일들에 적힌 쿼리 명령어들을 실행하도록 함

서비스에서 사용할 테이블들을 만들어두고 기본적으로 들어갈 데이터들을 넣어주는 쿼리들이란 것.

 

  • - COPY와 VOLUME 차이
    COPY는 RUN처럼 이미지를 생성하는 과정에서 미리 해당 이미지 안에 특정 파일을 넣어두는 것
    VOLUME은  CMD처럼 컨테이너가 생성되어 실행될 때 그 내부의 폴더를 외부의 것과 연결하는 것임
    그리고, 위에있는 databse-script 파일들은 컨테이너 초기화 과정에 필요한 것이기에 이렇게 하는 것.

 

 

# 이미지를 만들어보자

터미널을 이동부터

cd ../database

docker build -t database -img .

cd ../database
docker build -t database -img .

 

database-img 라고 설정한 이름대로 만들어지는데, 몇 초 걸릴지 기대해봤다

36.4s 걸리더라.

 

 

- 그런데 좀 이상해

유투버 얄코님의 영상보면 database-img 이름 뿐만 아니라 자동으로 mysql도 생성되던데, 나는 그렇지않다

여기서 이미 쎄하지만 넘어갔다

 

# 만든 이미지를 컨테이너에 담아 run, 실행해보자

docker run --name database-con -it -p 3306:3306 database -img

되었단 걸까 말았단 걸까. warning도 곳곳에 보이고.

되었다 생각하고 정리하면

mySQL은 3306이 기본 포트여서 값을 주소로 3306을 사용했다.

그리고 mySQL을 따로 설치했다면 (insert_data.sql)파일로 적은 것들이 등록되어있는 걸 확인할 수 있게 된다.

 

 

 

# run에 명령어를 하나 더 (-d옵션) 붙여서 실행해보자.

이제 이 컨테이너가 돌아가는 동안 해당 터미널은 쓸 수가 없으니, 해결하고 보자.

현재는 내가 볼 때만 컨테이너 내용들이 돌아가도록 설정되어있는 것이 문제.

명령어도 못 받으니, 터미널을 하나 더 만들어서 컨테이너를 중지, 삭제해주자

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

요로코롬.

 

 

이제 목적이었던 run 명령어에 -d 옵션을 붙여서 실행하자.

  •  -d 옵션
docker run --name database-con -p 3306:3306 -d database -img

: d 는 daemon의 줄임말인데 안 보이는 곳 뒤로 가서 알아서 컨테이너 돌라는 뜻. ('뒤'의 약자라고 생각)

이러면 id만 표시되고 컨테이너는 그대로 사용가능

 

 

작동 중인지 다음 코드로 확인

docker ps

알아서 잘 돌고 있는 것을 확인 가능

 

 

*

컨테이너 로그를 살펴보려면 

docker logs -f {컨테이너명}

위 코드를 작성하여 실시간으로 로그를 볼 수 있고, ctrl+c 로 빠져나가면 된다

(실행하니 길고 무서워서 사진 생략)

 

 

 

 

 

다음엔 마지막인 baekend폴더를 통한 도커 알아보기.