docker multi Container 실습

yoon__0_0·2024년 5월 2일
0

이어드림 수업

목록 보기
5/103

Docker multi Container Application 구축해보기

application과 database가 연결된 container 구성해보기

1) docker network 생성

  • 여러개의 container을 연결하기 위해서는 같은 network를 활용해야함.
docker network create myapp-net

2) mysql과 연결할 docker volume 생성 - docker volume 방식

docker volume create mydb_data

3) mysql 이미지로 container 설정

docker run -itd \
--name=mysql_app \
-v mydb_data:/var/lib/mysql \
--restart=always \
-p 8098:3306 \
--net=myapp-net \
-e MYSQL_ROOT_PASSWORD=password# \
-e MYSQL_DATABASE=wpdb \
-e MYSQL_USER=wpuser \
-e MYSQL_PASSWORD=wppassword \
mysql:8.0-debian 
  • 이름 : mysql_app
  • -v : 2번에서 생성한 mydb_data 볼륨과 container안에 있는 /var/lib/mysql 과 연동시키기
  • -restart=always : 만약 꺼지면 다시 바로 실행되는 옵션
  • 내 포트 : 8098 / mysql port : 3306
  • --net=myapp-net : 사용할 네트워크는 1번에서 만든 network를 사용해서 연결할 것
  • -e 옵션을 통해서 mysql에 대해서 설정해주기 (password - 계정, 루트 , database, user,)
  • 이미지 : mysql:8.0-debian

4) web data와 연동할 docker volume을 생성

docker volume create myweb_data

5) wordpress 이미지로 웹과 db 연결

  • wordpress : 웹 호스팅 서비스에서 실행되는 PHP 및 MySQL 기반의 무료 오픈 소스 블로그 도구이자 콘텐츠 관리 시스템(CMS)
docker run -itd \
--name=wordpress_app \
-v myweb_data:/var/www/html \
-v ${PWD}/myweb-log:/var/log \
--restart=always \
-p 8099:80 \
--net=myapp-net \
-e WORDPRESS_DB_HOST=mysql_app:3306 \
-e WORDPRESS_DB_NAME=wpdb \
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_PASSWORD=wppassword \
--link mysql_app:mysql \
wordpress
  • 이름 : wordpress_app
  • -v : 4번에서 생성한 myweb_data 볼륨과 container안에 있는 /var/www/html 과 연동시키기
  • 현재 경로의 log와 container안의 /var/log도 연결 => Bind mount 방식
  • 8099번 port와 80번 port 연결
  • network를 만들어준 network로 지정
  • -e 옵션을 통해서 앞서 만든 db의 정보 지정
  • --link : 옵션을 통해서 container 이름으로 두개를 연결할 수 있음 mysql_app이라는 컨테이너의 mysql 데몬과 연결해라!
  • wordpress 이미지 활용

6) network 확인해보기

docker inspect wordpress_app | grep -i gateway
docker inspect mysql_app | grep -i gateway
  • 원래 기본적으로 gateway는 172.17.0.1 을 이용하는데, 앞선 두개의 container들은 network를 따로 설정해주었기 때문에 변경된 것으로 확인됨. (172.18.0.1 로)
  • 보통 MSA project는 독립된 네트워크를 권장해서 트래픽을 분산시킴.
  • 실제 docker0(172.17.0.1)을 사용하지 않고 네트워크를 만들어서 사용함.

7) 잘 돌아가는지 확인

docker ps

8) sql에 무엇이 담겨져 있는지 확인해보기
8-1) mysql_app container로 들어가기

docker exec -it mysql_app bash

8-2) mysql로 들어가기 (password 옵션)

mysql -uroot -p

8-3) 확인해보기

show databases;
use wpdb;
show tables;
  • databases 보기

  • container 만들때 만들었던 database 사용해보기

  • table 보기

  • 비어있는 것을 확인할 수 있음.

web을 띄우고 sql과 잘 연동되는지 확인해보기

1) 앞서 만들었던 ip:포트 번호를 통해 크롬창 열여주기

  • 왼쪽부터 순서대로 나타남

2) sql 확인하기

docker exec -it mysql_app bash

  • 새롭게 테이블과 내용들이 입력된 것을 확인할 수 있음.

docker compose 사용해서 실습

docker compose 란?

  • orchestration tool
  • 실제 docker run CLI -> YAML(yaml, yml) 코드로 변경
  • docker compose up 해주면 바로 실행됨.
  • 즉 yaml에 코드들을 넣어놓으면 됨.
  • 버전 확인
 docker compose version
  • 독립 network를 스스로 만들어서 실행시켜줌.
  • 스케일링 기능도 존재함.

docker compose 설치

실습해보기

1) yml 코드 작성

vi docker-compose.yml
services:
  mydb:
    image: mysql:8.0-debian
    container_name: mysql_app
    volumes:
      - mydb_data:/var/lib/mysql
    restart: always
    ports:
      - 8031:3306
    networks:
      - backend-net
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  myweb:
    depends_on:
      - mydb
    image: wordpress:latest
    container_name: wordpress_app
    ports:
      - 8032:80
    networks:
      - frontend-net
      - backend-net
    volumes:
      - myweb_data:/var/www/html
      - ${PWD}/myweb-log:/var/log
    restart: always
    environment:
      WORDPRESS_DB_HOST: mydb:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
networks:
  frontend-net: {}
  backend-net: {}
volumes:
  mydb_data: {}
  myweb_data: {}

2) 실행

docker compose up
  • 무한루프로 도는게 아니라 계속 실행되고 있는거임!
  • 이때 ip@8032로 들어가면 정상적으로 나옴

3) 모두 없애기

  • *.yml 코드가 있는 경로에서만 실행됨
docker compose down 
  • volume 없애기
docker volume rm 볼륨이름

추가 코드

  • docker container 모두 확인하기
docker ps -a
  • docker container 돌아가고 있는거 확인하기
docker container ls
  • volume 뭐 있는지 확인하기
docker volume ls
  • docker container 삭제하기
  • 먼저 정지 부터 해줘야함
docker stop container이름1 container이름2
  • 제거
docker rm container이름1 container이름2

실습해보기 못한거

1) git과 연동 (강사님꺼)

git clone  https://github.com/brayanlee/cloud-webapp.git

2) yaml 코드 설명 및 작성

services:
  webserver:
    build: build/.
    ports:
     - "8010:8899"
    depends_on:
     - redis

  redis:
    image: redis:4.0
  • version 예전에는 썻는데 지금은 쓰지않음
  • 키: value로 되어있고, json과 유사함.
    • 키 하고 value를 쓸때 key와 :는 붙이고 한칸을 꼭 띄고 value를 적어줘야함
  • 두개의 service를 이용할것(webserver와 redis)
  • build: build/. : build 폴더에 안에있는 dockerfile을 불러와라
  • 열려있는 포트번호 적어줘야함.
  • depends_on: --link 랑 동일함.
  • 들여쓰기에 민감하기 때문에 꼭 잘 해줘야함.

3) docker compose 실행

  • *.yml 코드가 있는 경로에서만 실행됨
docker compose up
  • 백그라운드 실행 (-d)
  • log 를 같이 써주면 log를 찍어줌

4) docker container 확인

docker ps -a
profile
신윤재입니다

0개의 댓글