Dokcer Compose 실습(로컬 환경에서 도커를 활용)

canyi·2023년 4월 11일
0

Docker

목록 보기
8/9
post-thumbnail

도커 CLI로 여러개 컨테이너 관리하기

도커 네트워크 리스트 조회

docker network ls

  • bridge: 도커 엔진에 의해 자동으로 생성되는 가상 네트워크. 컨테이너끼리 연결되는 기본 네트워크
  • host: 호스트 컴퓨터의 네트워크 인터페이스를 그대로 사용하는 네트워크
  • none: 네트워크를 사용하지 않는 컨테이너

도커 네트워크 생성

docker network create wordpress_net

도커 네트워크를 생성하는 명령어 (네트워크의 이름을 지정)

생성성공

네트워크를 다시 조회 경우 wordpress_net로 잘 생성 되었음을 확인

도커 네트워크 삭제

docker network rm 네트워크명 or 네트워크아이디

mysql db container 생성

docker \
run \
    --name "db" \
    -v "$(pwd)/db_data:/var/lib/mysql" \
    -e "MYSQL_ROOT_PASSWORD=root_pass" \
    -e "MYSQL_DATABASE=wordpress" \
    -e "MYSQL_USER=docker_pro" \
    -e "MYSQL_PASSWORD=docker_pro_pass" \
    --network wordpress_net \
mysql:latest

컨테이너이름 : db
볼륨 마운트: -v "$(pwd)/db_data:/var/lib/mysql"
환경변수: -e "MYSQL_ROOT_PASSWORD=root_pass"...
사용할 네트워크: wordpress_net
이미지: mysql:latest

wordpress container 생성

docker \
    run \
    --name app \
    -v "$(pwd)/app_data:/var/www/html" \
    -e "WORDPRESS_DB_HOST=db" \
    -e "WORDPRESS_DB_NAME=wordpress" \
    -e "WORDPRESS_DB_USER=docker_pro" \
    -e "WORDPRESS_DB_PASSWORD=docker_pro_pass" \
    -e "WORDPRESS_DEBUG=1" \
    -p 8000:80 \
    --network wordpress_net \
wordpress:latest

컨테이너이름 : app
볼륨 마운트: -v "$(pwd)/app_data:/var/www/html"
환경변수: -e -e "WORDPRESS_DB_HOST=db" ...
사용할 네트워크: wordpress_net
포트: 8000:80
이미지: wordpress:latest

복붙 할 경우 리눅스/유닉스 환경에서 사용!

컨테이너가 잘 실행 되고 있음을 확인

docker ps

docker ps -a

도커 컴포즈로 여러개 컨테이너 관리하기

docker-compose.yml

version: "3.0"

services:
  db:
    image: mysql:latest
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: docker_pro
      MYSQL_PASSWORD: docker_pro_pass
  
  app:
    depends_on: 
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: docker_pro
      WORDPRESS_DB_PASSWORD: docker_pro_pass 

도커 yml 파일로 만들고 해당 파일이 있는 디렉토리로 이동 및 yml 파일 빌드

docker-compose -f docker-compose.yml up --build

Error response from daemon: error while creating mount source

빌드를 진핼 할 경우

Error response from daemon: error while creating mount source path '/run/desktop/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu/34b290687a09a50b1f5116ca4eb09a897b1f676a4527ae5c54c1731c01e1fbb4': mkdir /run/desktop/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu/34b290687a09a50b1f5116ca4eb09a897b1f676a4527ae5c54c1731c01e1fbb4: file exists

소스경로를 마운트 할때 데몬에서 에러를 반환한다는 에러가 계속 떳는데 도커를 재시작 하면 해결이 된다!!

Error response from daemon: driver failed programming external connectivity on endpoint compose20230411-app-1 (d899a485e2f588f301c2885f78a056ef651557a1c2be04dab62371fc9e6bead9): Bind for 0.0.0.0:8000 failed: port is already allocated

 netstat -ano

현재 사용하고 있는 port확인및 pid 확인 해보니 8000포트가 이미 사용되고 있었다.

[Warning][MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive

전에 컴포즈를 실행할 경우 docker-compose.yml 파일에서 db의 volumes을 ./db_data:/var/lib/mysql으로 설정을 해 놓았다.

다만 다른 컴포즈를 실행하고 싶을 경우 새로운 폴더를 만들어 해당 docker-compose.yml 파일을 빌드를 했더니 file system for /var/lib/mysql/ is case insensitive 라는 에러가 발생!

docker-compose.yml

version: "3.0"

services:
  db:
    image: mysql:latest
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: docker_pro
      MYSQL_PASSWORD: docker_pro_pass
  
  app:
    depends_on: 
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: docker_pro
      WORDPRESS_DB_PASSWORD: docker_pro_pass 

이럴경우 db의 volumes이 충돌이 았음으로 db의 volumes을 수정하자

ex )

 compose1 
 volumes:
  - ./db_data:/var/lib/mysql
  
 compose2
 volumes:
  - ./db_data:/var/lib/mysqltest
  
 
docker-compose -f docker-compose.yml up --build

다시 yaml 파일을 빌드를 해봤음

compose 와 compose20230411라는 컴포즈가 잘 실행이 되었고
localhost 8001 과 8000를 접속할 경우 잘 실행이 되었다.

같은 db의 여러개 컴포즈를 실행할 경우 db volumes 의 경로를 잘 설정해 주도록 주의 해야 한다!!

profile
백엔드 개발 정리

0개의 댓글