본문 바로가기
프로젝트/개인 프로젝트) 요만큼

Docker ) Dockerfile 과 compose 설정 파일 작성 과정!

by 휴일이 2023. 10. 27.

요즘 운영체제와 도커에 대해 공부중인 나.

이번 프로젝트에서는 도커 파일을 작성해보기로 한다.^_^

 

 

 

docker run -d \
--name mysql_yomankum \
-e MYSQL_ROOT_PASSWORD=비번 \
-e MYSQL_DATABASE=yomankum \
-v yomankum:/var/lib/mysql \
--net yomankum \
--net-alias yomankum \
-p 3307:3306/tcp \
mysql

참고로 내가 도커파일로 작성하고 싶은 명령어는 요것임 ㅇ_ㅇ...!

 

 

 

 

Dockerfile

FROM ubuntu:latest
LABEL authors="holiday <holiday.k1@icloud.com>"
# For ubuntu
RUN apt-get update && apt-get install apache2 -y
# For MySQL
RUN apt-get install -y mysql-server
EXPOSE 3306
ENV MYSQL_ROOT_PASSWORD 비번
ENV MYSQL_DATABASE yomankum
VOLUME ["/var/lib/mysql"]
ENTRYPOINT ["top", "-b"]



 

하나씩 설명을 하면

.

.

.

FROM ubuntu:latest

기본 베이스 이미지 !!

나는 우분투 서버를 이용할 거라서 우분투를 이용했고

일단은 마지막에 올린 버전으로...

 

LABEL authors="holiday <holiday.k1@icloud.com>"

이건 이미지를 만든 사람 알려주는 거,,

원래는 M 으로 시작하는 뭔가를 쓰는데 현재는 사용 안 하는 걸로 되어서

이젠 태그용도인 라벨에다가 넣는다고 한당.

 

# For ubuntu
RUN apt-get update && apt-get install apache2 -y

이것은 아파치 웹서버를 다운받는 것이당

톰캣 풀네임이 아파치 톰캣인 거 아시죠? 웹서버 만드는 고런 녀석임

일단 나중에 웹 서버 돌릴 거니까 미리 인스톨해두는건데 솔직히 주석해도 그만이긴 함

 

# For MySQL
RUN apt-get install -y mysql-server
EXPOSE 3306
ENV MYSQL_ROOT_PASSWORD 비번
ENV MYSQL_DATABASE yomankum
VOLUME ["/var/lib/mysql"]
ENTRYPOINT ["top", "-b"]

그리고 mysql 서버 이미지를 다운받고

mySQL 포트는 3306 이니까 적어주고

환경변수도 설정한당

도커 볼륨에 연동(?)할 mySQL 데이터가 있는 레포 경로도 적어주고

웹서버를 올릴 때의 명령어도 적어준당...

 

 

Dockerfile 이 실제 도커 명령어(?)를 써주는 느낌이면

compose.yml 은 내가 썼던 명령어의 세부 설정을 정해주는 느낌이다.

version: '1'
services:
  db:
    container_name: mysql_yomankum
    image: 'mysql:latest'
    restart: 'unless-stopped'
    volumes:
      - mysql_yomankum:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=비번
      - MYSQL_USER=yomankum
      - MYSQL_PASSWORD=비번
      - MYSQL_DATABASE=yomankum
    ports:
      - 3307:3306
    networks:
      network:
        aliases:
          - yomankum

networks:
  network:
    driver: bridge

volumes:
  mysql_yomankum:
    external: true

요런 내용인데 하나하나 뜯어보면..

 

 

version: '1'

내 애플리케이션의 버전을 적어주는 거다.

나는 모 일단 아무것도 완성된 것도 없고...첫번째 버전이라고 1이라고 일단 적었음 ㅋㅋㅋ

 

 

services:
  db:
    container_name: mysql_yomankum
    image: 'mysql:latest'
    restart: 'unless-stopped'

이미지 종류에 따라 services: 밑에 나눠서 적어주는데

난 일단 mysql 디비 사용만 필요해서 이렇게 적었담..

 

 

 

근데

사실 난 미리 디비 컨테이너, 네트워크, 볼륨을 "요만큼" 용으로 미리 만들어두었음..

적용하고 싶은 세부 설정들이 있었기 때문임,,

 

근데 컨테이너 이름을 안 적으면 임의로 yomankum-db-1 이런 식으로 만들어지는데

저렇게 컨테이너 이름을 적어주면 기존 컨테이너를 사용할 수 있음...

그러면 나머지는 정보는 어케보면 그냥 내 컨테이너 정보를 적어주는 것임.ㅎㅎ

-> 그런 게 아니라 그냥 기존 컨테이너에 마운트되어지는듯 ...^^ ㅋㅋ...

 

이미지는 mysql:lastest 를 사용했고

도커 데몬을 재시작해도 백그라운드에서 계속 돌아가도록, DB서버가 꺼지지 않도록 설정!

 

 

    volumes:
      - mysql_yomankum:/var/lib/mysql
      
volumes:
  mysql_yomankum:
    external: true

요것은 볼륨 관련 설정인데

나는 미리 도커볼륨을 mysql_yomankum 이라는 이름으로 만들어두어서

호스트볼륨(내가만든 볼륨):mysql data가 들어가는 디렉토리 를 연동했다는 걸 명시하고

내가 만든 볼륨을 명시해준다. ㅇ_ㅇ

 

 

    environment:
      - MYSQL_ROOT_PASSWORD=비번
      - MYSQL_PASSWORD=비번
      - MYSQL_DATABASE=yomankum

이거는 그냥 환경 변수 설정.

내가 처음에 mysql_yomankum 컨테이너를 만들면서 쓰는 데이터베이스와 비번 등을 적어준당.

아마 기존 컨테이너를 만들지 않았다면 이 정보대로 mysql 컨테이너가 만들어질 것이다.

 

 

 

    ports:
      - 3307:3306
    networks:
      network:
        aliases:
          - yomankum

networks:
  network:
    driver: bridge

그리고 네트워크 관련인데

나는 내 맥의 3307 포트와 mysql의 3306 포트를 연결했기 때문에 저렇게 명시한다.

networks: 아래에는 네트워크 이름을 명시해주는데

이게 저렇게 해놓으면 이름 만드는 패턴이

yomankum_network <- 이렇게 만들어짐 (참고하삼)

 

그리고 나는 yomankum_network 를 브릿지 네트워크로 만들었었기 때문에 저렇게 명시해주었다.

이런 사용자 정의 네트워크는 나중에 disconnect, connect 를 통해 연결하거나 끊을 수 있다.

 

 

 

 

 

이렇게 작성한 뒤, 서버를 빌드하면...

 

 

저렇게 컨테이너를 시작할 수 있고..

 

터미널에서 docker ps -a 해보면

요렇게 무사히 컨테이너가 만들어진 것을 볼 수 있답니다!

포트 연결도 제대로 되었지요?

 

 

야호!~~~

728x90