[LG CNS AM Inspire CAMP 1기] MSA (9) - 애플리케이션 배포_Docker Container

니니지·2025년 3월 17일

LG CNS AM Inspire Camp 1기

목록 보기
41/47
post-thumbnail

INTRO

오늘은 아래 구성도와 같이 프로젝트를 구축해서, 동일한 도커 네트워크에서 여러 서비스 연동하는 과정을 실습 했습니다.

1. 네트워크 정보 확인

docker ps -a
docker container ls
docker network ls
docker network inspect [네트워크이름]

2. 네트워크 생성 (ecommerce-network on Bridge)

docker network create ecommerce-network

3. 네트워크에 rabbitmq 올리기 (port:15672/5672)

docker run -d --name rabbitmq --network ecommerce-network -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest rabbitmq:4.0-management

4. 네트워크에 kafka 올리기 (port:9092)

docker run -d -p 9092:9092 --name broker apache/kafka:latest
docker network connect ecommerce-network broker
docker network inspect ecommerce-network


docker inspect broker

5. 네트워크에 mysql 과 mariadb 올리기 (port:3306)

docker run -d --name mysql-server --network my-network -p 13306:3306 -e MYSQL_ROOT_PASSWORD=test1357 mysql:8.0.41
docker run -d --name mariadb-server --network my-network -p 23306:3306 -e MARIADB_ROOT_PASSWORD=test1357 mariadb:latest

- 구성도

- DB 실행

- 네트워크 끊기

docker network disconnect my-network mysql-server
docker system prune

- (참고) 도커 작동 과정

6. 네트워크에 config-service 올리기 (port:8888)

type Dockerfile
mvn clean compile package -DskipTests=true

docker stop config-service
docker rm config-service
-- docker build --tag config-service:1.0 -f Dockerfile .
-- docker run -d -p 8888:8888 --network ecommerce-network --name config-service config-service:1.0

docker run -d -p 8888:8888 -e encrypt.key-store.location=file:///apiEncryptionKey.jks --network ecommerce-network --name config-service config-service:1.0

docker exec -it config-service bash
pwd
ls -al

-구성도

- jks 파일 위치 이해하기

7. 네트워크에 service-discovery(Eureka) 올리기 (port:8761)

docker build --tag service-discovery:1.0 -f Dockerfile .
docker run -d -p 8761:8761 --name service-discovery service-discovery:1.0
docker network connect ecommerce-network service-discovery

- docker hub push

- docker network inspect ecommerce-network

8. 네트워크에 api-gateway 올리기 (port:8000)

docker build --tag apigateway-service:1.0 -f Dockerfile .
docker images
docker run -d -p 8000:8000 -e spring.rabbitmq.host=rabbitmq --network ecommerce-network --name apigateway-service apigateway-service:1.0

9. 네트워크에 Kafka 올리기 (port:9092)

docker run -d -p 9092:9092 --name broker --network ecommerce-network apache/kafka:latest

10. 네트워크에 zipkin 올리기 (port:9411)






난 왜 zipkin-mysql-1 이 없지? 근데 도커데스크탑에선 run 되고 있다..
-> docker network connect ecommerce-network zipkin-mysql-1로 해결. 알고보니 yml 에서 mysql 부분에 network 연결을 안해줬었다.

- mariaDB 연결


docker network connect ecommerce-network mariadb-server로 묶기.

11. 네트워크에 order-service 올리기

docker run -d --network ecommerce-network \
--name order-service \
-e "spring.zipkin.base-url=http://zipkin-zipkin-1:9411" \
-e "eureka.client.serviceUrl.defaultZone=http://service-discovery:8761/eureka/" \
-e "spring.datasource.url=jdbc:mariadb://mariadb-server:3306/mydb" \
-e "spring.rabbitmq.host=rabbitmq" \
-e "management.zipkin.tracing.endpoint=http://zipkin-zipkin-1:9411/api/v2/spans" \
order-service:1.0

위의 명령어를 docker-compose 파일에 적용되게 수정

# Use root/example as user/password credentials
version: '3.1'

services:
order-service:
image: order-service:1.0

environment:
spring.rabbitmq.host: rabbitmq
spring.zipkin.base-url: http://zipkin-zipkin-1:9411
spring.datasource.url: jdbc:mariadb://mariadb-server:3306/mydb
eureka.client.service-url.defaultZone: http://service-discovery:8761/eureka/
management.zipkin.tracing.endpoint: http://zipkin-zipkin-1:9411/api/v2/spans

networks:
my-network:

networks:
my-network:
external: true
name: ecommerce-network









mariadb쪽에서 create database mydb; docker restart order-service-order-service-1 하고 접속 완료.

- kafka 로그에 node -1 disconnected 오류

  • 우선 kafka랑 order-service 컨테이너 종료.
  • 해결은 https://hub.docker.com/r/apache/kafka 참고.
  • 카프카 띄우기.

    docker-compose -f docker-compose-kafka.yml up -d
    docker-compose -f docker-compose-kafka.yml logs -f

docker-compose -f .\docker-compose-kafka.yml exec -it broker bash
cd /opt/kafka/bin
./kafka-topics.sh --bootstrap-server broker:9092 --list

- 다시 order-service 기동

mvn 빌드 후
docker build --no-cache --tag order-service:1.0 -f .\Dockerfile .
docker-compose -f .\docker-compose-order.yml up -d
docker-compose -f .\docker-compose-order.yml logs -f

post 처리 후 db 및 카프카 컨슈머 토픽 확인되면 완료.

docker-compose -f .\docker-compose-kafka.yml exec -it broker bash
cd /opt/kafka/bin
./kafka-topics.sh --bootstrap-server broker:9092 --list
./kafka-console-consumer.sh --bootstrap-server broker:9092 --topic example-catalog-topic

12. 네트워크에 catalog-service 올리기





13. 네트워크에 user-service 올리기





, docker rm



메이븐 빌드 후

14. 하나의 도커 파일로 만들기

- docker-compose-inner.yml

services:
user-service:
image: edowon0623/user-service:lgcns_1
# ports:
# - "60000:60000"
environment:
spring.cloud.config.uri: http://config-service:8888
spring.rabbitmq.host: rabbitmq
spring.zipkin.base-url: http://zipkin-zipkin-1:9411
eureka.client.service-url.defaultZone: http://service-discovery:8761/eureka/
management.zipkin.tracing.endpoint: http://zipkin-zipkin-1:9411/api/v2/spans
# depends_on:
# - config-service
networks:
my-network:
# ipv4_address: 172.18.0.12

order-service:
image: edowon0623/order-service:lgcns_1
environment:
spring.rabbitmq.host: rabbitmq
spring.zipkin.base-url: http://zipkin-zipkin-1:9411
spring.datasource.url: jdbc:mariadb://mariadb-server:3306/mydb
eureka.client.service-url.defaultZone: http://service-discovery:8761/eureka/
management.zipkin.tracing.endpoint: http://zipkin-zipkin-1:9411/api/v2/spans
networks:
my-network:

catalog-service:
image: edowon0623/catalog-service:lgcns_1
environment:
spring.zipkin.base-url: http://zipkin-zipkin-1:9411
spring.datasource.url: jdbc:mariadb://mariadb-server:3306/mydb
eureka.client.service-url.defaultZone: http://service-discovery:8761/eureka/
management.zipkin.tracing.endpoint: http://zipkin-zipkin-1:9411/api/v2/spans
networks:
my-network:

networks:
my-network:
external: true
name: ecommerce-network




docker tag catalog-service:1.0 edowon0623/catalog-service:lgcns_1




-f 옆에 서비스 이름 붙이면 특정 서비스의 로그만 보여진다.

docker-compose -f .\docker-compose-inner.yml logs -f
docker-compose -f .\docker-compose-inner.yml logs -f user-service

- docker-compose-outer.yml



다 내리고 이미지 빌드 및 컨테이너 재 실행










그 외 서비스 추가

# 일부만 재기동
docker-compose -f .\docker-compose-outer.yml restart apigateway-service

15. 구성도

OUTRO

각 프로젝트 위치 별 명령어 정리

zipkin:9411, eureka:8761, config:8888, apigw:8000, rabbit:5672, user:60000, kafka:9092, connector:8083,
rabbit:15672
----------------------------------------------------
mvn clean compile package -DskipTests=true
docker build --no-cache --tag service-discovery:1.0 -f Dockerfile .
docker-compose -f .\docker-compose-outer.yml up -d
docker-compose -f .\docker-compose-outer.yml logs -f
-----------------------------------------------------
[프로젝트]
C:\Work\git\toy-msa\order-service>
java -jar .\target\order-service-1.0.jar

C:\Work\git\toy-msa\config-service>
docker stop config-service
docker rm config-service
-- docker build --tag config-service:1.0 -f Dockerfile .
--docker run -d -p 8888:8888 --name config-service --network ecommerce-network config-service:1.0

docker run -d -p 8888:8888 -e encrypt.key-store.location=file:///apiEncryptionKey.jks --network ecommerce-network --name config-service config-service:1.0

C:\Work\git\toy-msa\service-discovery>
docker build --tag service-discovery:1.0 -f Dockerfile .
docker run -d -p 8761:8761 --name service-discovery --network ecommerce-network service-discovery:1.0


 C:\Work\git\toy-msa\apigateway-service>
docker build --tag apigateway-service:1.0 -f Dockerfile .
docker run -d -p 8000:8000 --name apigateway-service --network ecommerce-network -e spring.rabbitmq.host=rabbitmq apigateway-service:1.0

[rabbitMQ]
docker run -d -p 15672:15672 -p 5672:5672 --name rabbitmq --network ecommerce-network -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest rabbitmq:4.0-management

[mySQL]
docker run -d -p 13306:3306 --name mysql-server --network my-network -e MYSQL_ROOT_PASSWORD=test1357 mysql:8.0.41

[mariaDB]
docker run -d -p 23306:3306 --name mariadb-server --network my-network -e MARIADB_ROOT_PASSWORD=test1357 mariadb:latest

[카프카 커넥트]
C:\Work\confluent-6.1.0>
.\bin\windows\connect-distributed.bat .\etc\kafka\connect-distributed.properties

[카프카]
docker run -d -p 9092:9092 --name broker --network ecommerce-network apache/kafka:latest

C:\Work\kafka\bin\windows>
kafka-topics.bat --bootstrap-server localhost:9092 --list
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic example-order-topic --fro
m-beginning
kafka-console-producer.bat --bootstrap-server localhost:9092 --topic my_topic_users
kafka-topics.bat --delete --bootstrap-server localhost:9092 --topic example-order-topic

profile
지니니

0개의 댓글