[Docker] 도커 네트워크 및 도커 컴포즈

junghan·2023년 8월 3일
0

Docker

목록 보기
4/6
post-thumbnail

도커 네트워크

Docker의 네트워킹 하위 시스템은 드라이버를 사용하여 연결 가능합니다. 여러 드라이버가 기본적으로 존재하며 핵심 네트워킹 기능을 제공합니다.

도커 네트워크 연결 확인

컨테이너 두개 생성

네트워크 목록 확인

  • 사용법
    docker container ls

네트워크 확인

  • 사용법
    docker container inspect []

네트워크에 두개의 컨테이너의 값이 저장되어 있는 것을 보실 수 있습니다.


도커 컴포즈란?

Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. Compose에서는 YAML 파일을 사용하여 애플리케이션의 서비스를 구성합니다. 그런 다음 단일 명령으로 구성에서 모든 서비스를 만들고 시작합니다.

도커 컴포즈 파일 구성

  • services
    - 실행하려는 컨테이너들을 정의하는 역할
    - 이름, 이미지, 포트 매핑, 환경 변수, 볼륨 등을 포함
    - 해당 정보를 가지고 컨테이너를 생성하고 관리
    • image: 컨테이너를 생성할 때 쓰일 이미지 지정
    • build: 정의된 도커파일에서 이미지를 빌드해 서비스의 컨테이너를 생성하도록 설정
    • environment: 환경 변수 설정, docker run 명령어의 --env, -e 옵션과 동일
    • command: 컨테이너가 실행될 때 수행할 명령어, docker run 명령어의 마지막에 붙는 커맨드와 동일
    • depends_on: 컨테이너 간의 의존성 주입, 명시된 컨테이너가 먼저 생성되고 실행
    • ports: 개방할 포트 지정, docker run 명령어의 -p와 동일
    • expose: 링크로 연계된 컨테이너에게만 공개할 포트 설정
    • volumes: 컨테이너에 볼룸을 마운트함
    • restart: 컨테이너가 종료될 때 재시작 정책
      • no: 재시작 되지 않음
      • always: 외부에 영향에 의해 종료 되었을 때 항상 재시작 (수동으로 끄기 전까지)
      • on-failure: 오류가 있을 시에 재시작
  • network
  • volume
  • config
  • secret

도커 컴포즈 명령어

docker-compose vs docker compose ?

💡docker-compose 명령어가 docker compose로 흡수되었음.

이전에는 Docker에서는 docker-compose 명령어가 별도로 설치되어야 했지만, Docker 1.13 이후로는 docker-compose 명령어가 Docker CLI에 통합됨

  • docker-comopse -f local-infra.yml up -d
    • up: 도커 컴포즈 파일로, 컨테이너를 생성하기
    • -f: 도커 컴포즈 파일 지정하기
    • -d: 백그라운드에서 실행하기

https://docs.docker.com/compose/reference/


도커 컴포즈를 사용해야하는 이유

💡 도커로 컨테이너를 일일이 관리하고 네트워크로 연결하려면 비용소모가 크다!

mysql과 wordpress 도커로 직접 연결

네트워크 생성

  • 사용법
    docker network create wordpress_net

Mysql 컨테이너 생성

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

Wordpress 컨테이너 생성

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

네트워크 연결 확인

wordpress 연결확인

네트워크 삭제

  • 사용법
    docker network rm wordpress_net

사용하지 않는 컨테이너, 이미지, 네트워크 삭제

  • 사용법
    docker system prune

컨테이너 간 복잡한 설정..


도커 컴포즈로 편하게 자동화해보자

아래의 docker-compose.yml파일에 생성하고자하는 컨테이너를 정의해주자
네트워크를 따로 설정하지 않으면 Default network가 bridge로 생성됨.


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 

도커 컴포즈로 빌드

  • 사용법
    docker compose -f docker-compose.yml up --build

실행이 완료되었다!

브라우저로 확인

볼륨 생성 확인

네트워크 자동 생성


실무 도커 컴포즈 사용 예제

  • 도커 컨테이너를 일괄적으로 정의하고 제어하는 도구
  • 설정 파일을 도커 CLI로 번역하는 역할

예제

회사에서 개발하고 있는 백엔드 서버에 필요한 인프라
• Database
• Redis
• rabbitMQ

• 설정 파일을 도커 CLI로 번역하는 역할

version: '3.0'

services:
  mariadb10:
    image: mariadb:10
    ports:
     - "3310:3306/tcp"
    environment:
      - MYSQL_ROOT_PASSWORD=my_db_passward
      - MYSQL_USER=docker_pro
      - MYSQL_PASSWORD=docker_pro_pass
      - MYSQL_DATABASE=docker_pro
  redis:
    image: redis
    command: redis-server --port 6379
    restart: always
    ports:
      - 6379:6379
  rabbitmq:
    image: rabbitmq:3-management-alpine
    container_name: 'rabbitmq'
    ports:
        - 5672:5672
        - 15672:15672
    volumes:
        - ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/
        - ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
    networks:
        - rabbitmq_go_net

networks:
  rabbitmq_go_net:
    driver: bridge

빌드

  • 사용법
    docker compose -f local-infra.yml up --build

이전에 nginx와 wordpress와 mariadb를 도커 위에 올려 블로그를 배포한 적이 있었는데, 잊어버렸던 지식이 살아나는 느낌이 들었따!


출처:

profile
42seoul, blockchain, web 3.0

0개의 댓글