금일은 Docker 의 네트워크와 저장소에 대해 알아보겠습니다.
실습 내용은 이미지로 첨부하겠습니다.
Docker Container 는 격리 된 환경에서 작동하기 때문에 다른 Container 과는 통신이 불가능하다.
Docker Network 구조

Docker Network 종류
Bridge Network
Host Network
None Network
Overlay Network
Docker Network 명령어
| 명령어 | 설명 |
|---|---|
| docker network ls | Docker Network 목록 보기 |
| docker network inspect <NETWORK_NAME> | Docker Network 상세 보기 |
| docker network create <NETWORK_NAME> | Docker Network 생성 |
| docker network rm <NETWORK_NAME> | Docker Network 삭제 |
| docker network connect <NETWORK_NAME> | 실행 중인 Container를 Docker Network에 추가 |
| docker network disconnect <NETWORK_NAME> | Docker Network에 추가된 Container를 삭제 |
Docker Network 지정 가능한 명령어입니다.
docker network create --driver bridge <NETWORK_NAME>
docker run -it --name my-container --network <NETWORK_NAME> ubuntu:16.04
아래의 그림은 terminal 에서 birdge 네트워크의 정보이며 해당 실행중인 컨테이너도 확인 가능하다.

실습 하기에 앞서 해당 container, network 를 삭제할때 아래의 명령어를 사용하면 쉽게 제거가 가능하다(단 실행중인 container, 할당된 container 가 있는 network 는 제외)
docker system prune
Mysql DB Client(Host pc) + Mysql DB Server (Docker)
아래의 명령어를 실행후 Mysql Workbench 를 활용하여 MySQL 클라이언트에서 MariaDB 컨테이너에 접근해 보겠습니다.
docker run -d -p 13306:3306 -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true --name mariadb1 mariadb:latest

다음은 톰캣 서버에서 호스트 pc 에 설치되어있는 톰캣 애플리케이션에서 mariaDB 를 실행해보겠습니다.
host pc 에 tomcat 서버를 구동하기 위해서는 jdk 가 필요합니다.

springboot framwork 로 작성된 backend 애플리케이션의 jar 파일을 구동 시켜보겠습니다.
backend 애플리케이션의 포트번호는 8088 이며 application.yml 에 datasource 정보를 입력해주어야 한다.

실행 명령어
docker network create --driver bridge my-network
docker run -d -p 13306:3306 --network my-network \
-e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true \
-e MARIADB_DATABASE=mydb \
--name my-mariadb edowon0623/my-mariadb:1.0
java -jar catalog-service-mariadb-1.0.jar
실행 결과
workbench 에서 mydb 데이터 베이스의 catalog 테이블이 생성된것을 볼 수 있다.

해당 실습은 웹 3계층 시스템 아키텍처로 구성해보겠습니다.
front server + backend server + database
2개의 컨테이너 (web, db) 에 독립적인 docker network 할당하여 구성해보겠습니다.
아래의 명령어는 앞서 생성한 my-network 와 --name 옵션을 사용하여 hostname 을 지정해주며 컨테이너의 이름을 가지고 접속을 시도하도록 하여 동적으로 ip 가 바뀌어도 찾을 수 있도록 지정해준다.
host pc 에서 컨테이너에 접근할때는 3306으로 접근해준다.
springboot 애플리케이션 이미지를 가져와서 실행해준다.
docker run -d -p 8088:8088 --network my-network \
-e "spring.datasource.url=jdbc:mariadb://my-mariadb:3306/mydb" \
--name catalog-service edowon0623/catalog-service:mariadb-demo
해당 명령어로 container 를 확인 가능합니다.
docker network inspect my-network