JUST WRITE

Docker 제품 만들기(5) - Container 운영 본문

MLOps/Docker

Docker 제품 만들기(5) - Container 운영

천재보단범재 2021. 10. 4. 14:03
2020년에 다니고 있는 회사 내부 프로젝트에서 기술적인 부분만 발췌해서 정리한 글입니다.

Container 운영

제품 Docker Image 구성하고 배포까지 완료하였다.

이제 제품 Docker Container들을 어떻게 운영하였는지 정리해보았다.

먼저 docker run 명령어에 대해서 정리해보려 한다.

docker run

docker containerhost에서 하나의 process에서 작동한다.

container는 host와는 별개로 자신만의 file system, networking, 독립된 process tree를 가진다.

docker run은 docker image를 기반으로 container를 실행시키는 명령어이다.

# debian 이미지 기반 container 실행
docker run --name test -it debian

여기서는 사용한 docker run 명령어 옵션에 대해서 정리하였다.

Name, shorthand Description
--detach, -d Container를 Background로 실행
--env, -e 환경변수
--name Container 명칭
--publish, -p 해당 Container Port를 host에 매핑
--volume, -v Container와 host 쪽 bind mount

추후에 docker run 관련해서 따로 자세히 정리할 예정이다.

 

제품 Container 실행

제품은 총 4개의 Container로 실행하였다.

  • 제품 Repository Container (PostgreSQL Official Image)
  • Repository 설치 서비스 Container (OpenJDK 기반 Image)
  • Web Application Container (Tomcat 기반 Image)
  • Daemon Program Container (OpenJDK 기반 Image)

제품 Container 구성

제품 Repository Container

docker run -d --name repo
-p 15432:5432 \ # ${매핑할_host_Port}:${Container_Port}
-p 18080:8080 \
-p 5001:5001 \
-e POSTGRES_DB=swjeong \ 
-e POSTGRES_USER=swjeong \
-e POSTGRES_PASSWORD=swjeong \
-v ${pwd}:/var/lib/postgresql/data \
postgres:10.12
  • -d, --name repo => Container Background로 실행, Container명칭을 repo로 지정
  • -p ${매핑할_host_Port}:${Container_Port}
    • Container 5432 Port를 host 15432 Port로 매핑
    • 나중에 하나의 network로 묶일 Web Appcation Port(8080)를 host 18080 Port로 매핑
    • 나중에 하나의 network로 묶일 Daemon Program Port(5001)를 host 5001 Port로 매핑
  • -e PostgreSQL 옵션 => POSTGRES_PASSWORD 옵션은 필수
  • -v ${pwd}:/var/lib/postgresql/data
    • /var/lib/postgresql/data가 PostgreSQL 데이터 Path
    • 해당 Path와 연결하여 host 쪽에 PostgreSQL 데이터 남기게끔 mount
    • ${pwd} => 지금 현재 path
      • Window command : %cd%
      • Window PowerShell : ${PWD}
      • Linux : $(pwd)
  • postgres:10.12 => PostgreSQL 공식 Image 중 Tag 10.12 사용

Repository 설치 Container

docker run -d --name repo_setup
-e REPO_HOST=${Repository_Container_ip}
-e REPO_DB=swjeong \ 
-e REPO_USER=swjeong \
-e REPO_PASSWORD=swjeong \
nexus.docker.repo:5556/product/repo_setup:1.0.0
    • -d, --name repo_setup => Container Background로 실행, Container명칭을 repo_setup로 지정
    • -e Repository 연결할 옵션
      • Repository 옵션 중 host는 추후에 docker-compose때 개선이 됨.
    • nexus.docker.repo:5556/product/repo_setup:1.0.0 => 제품 Image 사용

Web Application Container

docker run -d --name product_was
--net=container:repo \ 
-v ${pwd}:/usr/local/tomcat/webapps \
nexus.docker.repo:5556/product/product_was:1.0.0
  • -d, --name repo => Container Background로 실행, Container명칭을 product_was로 지정
  • --net=container:repo => Network를 Repository Container와 공유
  • -v ${pwd}:/usr/local/tomcat/webapps
    • /usr/local/tomcat/webapps가 Tomcat WAR 배포 Path
    • 해당 Path와 연결하여 host 쪽에 WAR 배포 수정할 수 있게끔 mount
  • nexus.docker.repo:5556/product/product_was:1.0.0 => 제품 Image 사용

Daemon Product Container

docker run -d --name product_daemon
--net=container:repo \ 
-v ${pwd}:/opt/product \
nexus.docker.repo:5556/product/product_daemon:1.0.0
  • -d, --name repo => Container Background로 실행, Container명칭을 product_daemon로 지정
  • --net=container:repo => Network를 Repository Container와 공유
  • -v ${pwd}:/opt/product
    • 해당 Path와 연결하여 host쪽에 Daemon Program 바로 수정할수 있게끔 mount
  • nexus.docker.repo:5556/product/product_daemon:1.0.0 => 제품 Image 사용

정리

4개의 Container를 실행하는 것을 정리해보았다.

아직 Docker Container Network 구성하는 게 최선의 방식은 아닌 거 같았다.

그래서 docker-compose를 구성하여 손쉽게 Container를 실행하고 Network Setting도 개선하려 한다.

 

다음 글에서는 docker-compose 구성한 것을 정리하겠습니다.

[참고사이트]

728x90
반응형
Comments