본문으로 바로 가기

Windows에서 Docker 사용

이 가이드에서는 Windows에서 Docker로 MyEMS를 배포할 것입니다.

전제 조건

  • 호스트에 docker, npm이 설치되어 있어야 합니다.
  • MySQL 서버가 설치되어 있어야 합니다.
  • MySQL 데이터베이스는 Docker Engine이 실행되는 호스트에서 연결할 수 있어야 합니다.
  • 하드웨어 요구사항: 최소 4GB RAM, 20GB 저장 공간 (데이터베이스 및 Docker 컨테이너).

소스 코드 클론:

cd ~
git clone https://github.com/myems/myems

1단계 데이터베이스

데이터베이스 참조

2단계 myems-api

이 섹션에서는 Docker에 myems-api를 설치합니다.

  • 소스 코드를 루트 디렉토리로 복사
cp -r myems/myems-api c:\
cd c:\myems-api
  • example.env 파일을 기반으로 .env 파일 생성
주의

수동으로 127.0.0.1을 실제 호스트 IP 주소로 대체하세요.

cp example.env .env
  • 소스 코드에서 이미지 빌드
docker build -t myems/myems-api .

사용자가 빌드를 호출하는 아키텍처 및 운영 체제뿐만 아니라 여러 플랫폼용으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-api .
  • Docker 컨테이너 실행

호스트에서 c:\myems-upload 폴더를 생성하고 컨테이너에 바인드 마운트하며, .env도 컨테이너에 바인드 마운트:

docker run -d -p 8000:8000 -v c:\myems-upload:/var/www/myems-admin/upload -v c:\myems-api\.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-api myems/myems-api
  • -d 컨테이너를 백그라운드에서 실행하고 컨테이너 ID 출력

  • -p 컨테이너의 포트를 호스트에 게시, 8000:8000 (호스트:컨테이너)는 컨테이너의 포트 8000(오른쪽)을 호스트 머신의 TCP 포트 8000(왼쪽)에 바인딩합니다.

  • -v -v 또는 --volume을 사용하여 Docker 호스트에 아직 존재하지 않는 파일이나 디렉토리를 바인드 마운트하면, -v가 사용자를 위해 엔드포인트를 생성합니다. 항상 디렉토리로 생성됩니다. ro 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트됩니다. v4.7.0 또는 이전 버전의 경우 '/app/.env' 대신 '/code/.env'를 사용하세요.

  • --log-opt max-size=2m 롤링 전 로그의 최대 크기. 측정 단위를 나타내는 수정자(k, m 또는 g)가 있는 양의 정수입니다.

  • --log-opt max-file=2 존재할 수 있는 최대 로그 파일 수. 로그를 롤링하면 초과 파일이 생성되면 가장 오래된 파일이 제거됩니다. 양의 정수입니다.

  • --restart 컨테이너가 종료될 때 적용할 재시작 정책

  • --name 컨테이너에 이름 할당

콜론 앞의 절대 경로는 호스트의 경로이며 시스템에 따라 다를 수 있습니다. 콜론 뒤의 절대 경로는 컨테이너의 경로이며 변경할 수 없습니다. .env를 바인드 마운트 매개변수로 전달하여 나중에 구성 값을 변경할 수 있습니다. .env 파일을 변경한 경우 변경 사항을 적용하려면 컨테이너를 재시작하세요.

이미지를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
docker save --output myems-api.tar myems/myems-api
  • tarball 파일을 다른 컴퓨터로 복사한 다음 tarball 파일에서 이미지 로드
docker load --input .\myems-api.tar

3단계 myems-admin

이 섹션에서는 Docker에 myems-admin을 설치합니다.

  • 소스 코드를 루트 디렉토리로 복사
cp -r myems/myems-admin c:\
cd c:\myems-admin
주의

nginx.conf에서 127.0.0.1:8000을 myems-api의 실제 호스트 IP 주소와 포트로 수동 대체하세요.

notepad nginx.conf
      proxy_pass http://127.0.0.1:8000/;
  • 소스 코드에서 이미지 빌드
docker build -t myems/myems-admin .

사용자가 빌드를 호출하는 아키텍처 및 운영 체제뿐만 아니라 여러 플랫폼용으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-admin .
  • Docker 컨테이너 실행

호스트에서 c:\myems-upload 폴더를 생성하고 컨테이너에 바인드 마운트하며, nginx.conf도 컨테이너에 바인드 마운트: upload 폴더에 대한 -v 매개변수는 myems-api와 동일해야 함

docker run -d -p 8001:8001 -v c:\myems-upload:/var/www/myems-admin/upload -v c:\myems-admin/nginx.conf:/etc/nginx/nginx.conf:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-admin myems/myems-admin
  • -d 컨테이너를 백그라운드에서 실행하고 컨테이너 ID 출력

  • -p 컨테이너의 포트를 호스트에 게시, 8001:8001 (호스트:컨테이너)는 컨테이너의 포트 8001(오른쪽)을 호스트 머신의 TCP 포트 8001(왼쪽)에 바인딩합니다.

  • -v -v 또는 --volume을 사용하여 Docker 호스트에 아직 존재하지 않는 파일이나 디렉토리를 바인드 마운트하면, -v가 사용자를 위해 엔드포인트를 생성합니다. 항상 디렉토리로 생성됩니다. ro 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트됩니다. v4.7.0 또는 이전 버전의 경우 '/app/.env' 대신 '/code/.env'를 사용하세요.

  • --log-opt max-size=2m 롤링 전 로그의 최대 크기. 측정 단위를 나타내는 수정자(k, m 또는 g)가 있는 양의 정수입니다.

  • --log-opt max-file=2 존재할 수 있는 최대 로그 파일 수. 로그를 롤링하면 초과 파일이 생성되면 가장 오래된 파일이 제거됩니다. 양의 정수입니다.

  • --restart 컨테이너가 종료될 때 적용할 재시작 정책

  • --name 컨테이너에 이름 할당

이미지를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
docker save --output myems-admin.tar myems/myems-admin
  • tarball 파일을 다른 컴퓨터로 복사한 다음 tarball 파일에서 이미지 로드
docker load --input .\myems-admin.tar

4단계 myems-modbus-tcp

이 섹션에서는 Docker에 myems-modbus-tcp를 설치합니다.

  • 소스 코드를 루트 디렉토리로 복사
cp -r myems/myems-modbus-tcp c:\
cd c:\myems-modbus-tcp
  • example.env 파일을 기반으로 .env 파일 생성
주의

수동으로 127.0.0.1을 실제 호스트 IP 주소로 대체하세요.

cp example.env .env
  • 소스 코드에서 이미지 빌드
docker build -t myems/myems-modbus-tcp .

사용자가 빌드를 호출하는 아키텍처 및 운영 체제뿐만 아니라 여러 플랫폼용으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-modbus-tcp .
  • Docker 컨테이너 실행 (관리자 권한으로 실행)
docker run -d -v c:\myems-modbus-tcp\.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-modbus-tcp myems/myems-modbus-tcp
  • -d 컨테이너를 백그라운드에서 실행하고 컨테이너 ID 출력

  • -v -v 또는 --volume을 사용하여 Docker 호스트에 아직 존재하지 않는 파일이나 디렉토리를 바인드 마운트하면, -v가 사용자를 위해 엔드포인트를 생성합니다. 항상 디렉토리로 생성됩니다. ro 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트됩니다. v4.7.0 또는 이전 버전의 경우 '/app/.env' 대신 '/code/.env'를 사용하세요.

  • --log-opt max-size=2m 롤링 전 로그의 최대 크기. 측정 단위를 나타내는 수정자(k, m 또는 g)가 있는 양의 정수입니다.

  • --log-opt max-file=2 존재할 수 있는 최대 로그 파일 수. 로그를 롤링하면 초과 파일이 생성되면 가장 오래된 파일이 제거됩니다. 양의 정수입니다.

  • --restart 컨테이너가 종료될 때 적용할 재시작 정책

  • --name 컨테이너에 이름 할당

콜론 앞의 절대 경로는 호스트의 경로이며 시스템에 따라 다를 수 있습니다. 콜론 뒤의 절대 경로는 컨테이너의 경로이며 변경할 수 없습니다. .env를 바인드 마운트 매개변수로 전달하여 나중에 구성 값을 변경할 수 있습니다. .env 파일을 변경한 경우 변경 사항을 적용하려면 컨테이너를 재시작하세요.

  • Docker 컨테이너 이전

컨테이너를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
docker save --output myems-modbus-tcp.tar myems/myems-modbus-tcp
  • tarball 파일을 다른 컴퓨터로 복사한 다음 tarball 파일에서 이미지 로드
docker load --input .\myems-modbus-tcp.tar

5단계 myems-cleaning

이 섹션에서는 Docker에 myems-cleaning을 설치합니다.

  • 소스 코드를 루트 디렉토리로 복사
cp -r myems/myems-cleaning c:\
cd c:\myems-cleaning
  • example.env 파일을 기반으로 .env 파일 생성
주의

수동으로 127.0.0.1을 실제 호스트 IP 주소로 대체하세요.

cp example.env .env
  • 소스 코드에서 이미지 빌드
docker build -t myems/myems-cleaning .

사용자가 빌드를 호출하는 아키텍처 및 운영 체제뿐만 아니라 여러 플랫폼용으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-cleaning .
  • Docker 컨테이너 실행 (관리자 권한으로 실행)
docker run -d -v c:\myems-cleaning\.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-cleaning myems/myems-cleaning
  • -d 컨테이너를 백그라운드에서 실행하고 컨테이너 ID 출력

  • -v -v 또는 --volume을 사용하여 Docker 호스트에 아직 존재하지 않는 파일이나 디렉토리를 바인드 마운트하면, -v가 사용자를 위해 엔드포인트를 생성합니다. 항상 디렉토리로 생성됩니다. ro 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트됩니다. v4.7.0 또는 이전 버전의 경우 '/app/.env' 대신 '/code/.env'를 사용하세요.

  • --log-opt max-size=2m 롤링 전 로그의 최대 크기. 측정 단위를 나타내는 수정자(k, m 또는 g)가 있는 양의 정수입니다.

  • --log-opt max-file=2 존재할 수 있는 최대 로그 파일 수. 로그를 롤링하면 초과 파일이 생성되면 가장 오래된 파일이 제거됩니다. 양의 정수입니다.

  • --restart 컨테이너가 종료될 때 적용할 재시작 정책

  • --name 컨테이너에 이름 할당

콜론 앞의 절대 경로는 호스트의 경로이며 시스템에 따라 다를 수 있습니다. 콜론 뒤의 절대 경로는 컨테이너의 경로이며 변경할 수 없습니다. .env를 바인드 마운트 매개변수로 전달하여 나중에 구성 값을 변경할 수 있습니다. .env 파일을 변경한 경우 변경 사항을 적용하려면 컨테이너를 재시작하세요.

  • Docker 컨테이너 이전

컨테이너를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
docker save --output myems-cleaning.tar myems/myems-cleaning
  • tarball 파일을 다른 컴퓨터로 복사한 다음 tarball 파일에서 이미지 로드
docker load --input .\myems-cleaning.tar

6단계 myems-normalization

이 섹션에서는 Docker에 myems-normalization을 설치합니다.

  • 소스 코드를 루트 디렉토리로 복사
cp -r myems/myems-normalization c:\
cd c:\myems-normalization
  • example.env 파일을 기반으로 .env 파일 생성
주의

수동으로 127.0.0.1을 실제 호스트 IP 주소로 대체하세요.

cp example.env .env
  • 소스 코드에서 이미지 빌드
docker build -t myems/myems-normalization .

사용자가 빌드를 호출하는 아키텍처 및 운영 체제뿐만 아니라 여러 플랫폼용으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-normalization .
  • Docker 컨테이너 실행 (관리자 권한으로 실행)
docker run -d -v c:\myems-normalization\.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-normalization myems/myems-normalization
  • -d 컨테이너를 백그라운드에서 실행하고 컨테이너 ID 출력

  • -v -v 또는 --volume을 사용하여 Docker 호스트에 아직 존재하지 않는 파일이나 디렉토리를 바인드 마운트하면, -v가 사용자를 위해 엔드포인트를 생성합니다. 항상 디렉토리로 생성됩니다. ro 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트됩니다. v4.7.0 또는 이전 버전의 경우 '/app/.env' 대신 '/code/.env'를 사용하세요.

  • --log-opt max-size=2m 롤링 전 로그의 최대 크기. 측정 단위를 나타내는 수정자(k, m 또는 g)가 있는 양의 정수입니다.

  • --log-opt max-file=2 존재할 수 있는 최대 로그 파일 수. 로그를 롤링하면 초과 파일이 생성되면 가장 오래된 파일이 제거됩니다. 양의 정수입니다.

  • --restart 컨테이너가 종료될 때 적용할 재시작 정책

  • --name 컨테이너에 이름 할당

콜론 앞의 절대 경로는 호스트의 경로이며 시스템에 따라 다를 수 있습니다. 콜론 뒤의 절대 경로는 컨테이너의 경로이며 변경할 수 없습니다. .env를 바인드 마운트 매개변수로 전달하여 나중에 구성 값을 변경할 수 있습니다. .env 파일을 변경한 경우 변경 사항을 적용하려면 컨테이너를 재시작하세요.

  • Docker 컨테이너 이전

컨테이너를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
docker save --output myems-normalization.tar myems/myems-normalization
  • tarball 파일을 다른 컴퓨터로 복사한 다음 tarball 파일에서 이미지 로드
docker load --input .\myems-normalization.tar

7단계 myems-aggregation

이 섹션에서는 Docker에 myems-aggregation을 설치합니다.

  • 소스 코드를 루트 디렉토리로 복사
cp -r myems/myems-aggregation c:\
cd c:\myems-aggregation
  • example.env 파일을 기반으로 .env 파일 생성
주의

수동으로 127.0.0.1을 실제 호스트 IP 주소로 대체하세요.

cp example.env .env
  • 소스 코드에서 이미지 빌드
docker build -t myems/myems-aggregation .

사용자가 빌드를 호출하는 아키텍처 및 운영 체제뿐만 아니라 여러 플랫폼용으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-aggregation .
  • Docker 컨테이너 실행 (관리자 권한으로 실행)
docker run -d -v c:\myems-aggregation\.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-aggregation myems/myems-aggregation
  • -d 컨테이너를 백그라운드에서 실행하고 컨테이너 ID 출력

  • -v -v 또는 --volume을 사용하여 Docker 호스트에 아직 존재하지 않는 파일이나 디렉토리를 바인드 마운트하면, -v가 사용자를 위해 엔드포인트를 생성합니다. 항상 디렉토리로 생성됩니다. ro 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트됩니다. v4.7.0 또는 이전 버전의 경우 '/app/.env' 대신 '/code/.env'를 사용하세요.

  • --log-opt max-size=2m 롤링 전 로그의 최대 크기. 측정 단위를 나타내는 수정자(k, m 또는 g)가 있는 양의 정수입니다.

  • --log-opt max-file=2 존재할 수 있는 최대 로그 파일 수. 로그를 롤링하면 초과 파일이 생성되면 가장 오래된 파일이 제거됩니다. 양의 정수입니다.

  • --restart 컨테이너가 종료될 때 적용할 재시작 정책

  • --name 컨테이너에 이름 할당

콜론 앞의 절대 경로는 호스트의 경로이며 시스템에 따라 다를 수 있습니다. 콜론 뒤의 절대 경로는 컨테이너의 경로이며 변경할 수 없습니다. .env를 바인드 마운트 매개변수로 전달하여 나중에 구성 값을 변경할 수 있습니다. .env 파일을 변경한 경우 변경 사항을 적용하려면 컨테이너를 재시작하세요.

  • Docker 컨테이너 이전

  • 이미지를 tarball 파일로 내보내기

docker save --output myems-aggregation.tar myems/myems-aggregation
  • tarball 파일을 다른 컴퓨터로 복사한 다음 tarball 파일에서 이미지 로드
docker load --input .\myems-aggregation.tar

8단계 myems-web

이 섹션에서는 Docker에 myems-web을 설치합니다.

  • config.js 파일 수정:
참고

https://mapbox.com에서 mapboxToken을 가져온 후 showOnlineMap을 true로 설정하세요. 온라인 지도 기능을 끄려면 showOnlineMap을 false로 설정하세요.

cd myems/myems-web
notepad src/config.js
주의

nginx.conf에서 127.0.0.1:8000을 myems-api의 실제 호스트 ip와 포트로 대체하세요

cd myems/myems-web
notepad nginx.conf
  • 소스 코드를 루트 디렉토리로 복사
cp -r myems/myems-web c:\
cd c:\myems-web
정보

이 섹션의 'npm run build' 명령은 Dockerfile에 내장되어 있으므로 안전하게 무시할 수 있습니다.

  • 소스 코드에서 이미지 빌드
docker build -t myems/myems-web .
docker image prune -f

사용자가 빌드를 호출하는 아키텍처 및 운영 체제뿐만 아니라 여러 플랫폼용으로 빌드하려면, buildx를 사용하고 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼을 지정할 수 있습니다 (예: linux/amd64, linux/arm64, darwin/amd64).

docker buildx build --platform=linux/amd64 -t myems/myems-web .
docker image prune -f
  • Docker 컨테이너 실행

호스트에서 nginx.conf 바인드 마운트

docker run -d -p 80:80 -v c:\myems-web/nginx.conf:/etc/nginx/nginx.conf:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-web myems/myems-web
  • -d 컨테이너를 백그라운드에서 실행하고 컨테이너 ID 출력

  • -p 컨테이너의 포트를 호스트에 게시, 80:80 (호스트:컨테이너)는 컨테이너의 포트 80(오른쪽)을 호스트 머신의 TCP 포트 80(왼쪽)에 바인딩합니다.

  • -v -v 또는 --volume을 사용하여 Docker 호스트에 아직 존재하지 않는 파일이나 디렉토리를 바인드 마운트하면, -v가 사용자를 위해 엔드포인트를 생성합니다. 항상 디렉토리로 생성됩니다. ro 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트됩니다. v4.7.0 또는 이전 버전의 경우 '/app/.env' 대신 '/code/.env'를 사용하세요.

  • --log-opt max-size=2m 롤링 전 로그의 최대 크기. 측정 단위를 나타내는 수정자(k, m 또는 g)가 있는 양의 정수입니다.

  • --log-opt max-file=2 존재할 수 있는 최대 로그 파일 수. 로그를 롤링하면 초과 파일이 생성되면 가장 오래된 파일이 제거됩니다. 양의 정수입니다.

  • --restart 컨테이너가 종료될 때 적용할 재시작 정책

  • --name 컨테이너에 이름 할당

이미지를 다른 컴퓨터로 이전하려면,

  • 이미지를 tarball 파일로 내보내기
docker save --output myems-web.tar myems/myems-web
  • tarball 파일을 다른 컴퓨터로 복사한 다음 tarball 파일에서 이미지 로드
docker load --input .\myems-web.tar

설치 후

축하합니다! 이제 MyEMS Admin UI 및 Web UI에 로그인할 수 있습니다.

기본 포트

MyEMS Web UI: 80

MyEMS API: 8000

MyEMS Admin UI: 8001

서버 주소가 192.168.1.8이라고 가정 (실제 서버 주소로 대체) MyEMS Web UI에 접속: http://192.168.1.8 (80 생략 가능) MyEMS Admin UI에 접속: http://192.168.1.8:8001

기본 비밀번호

MyEMS Admin UI

사용자명:

administrator

비밀번호:

!MyEMS1

MyEMS Web UI

사용자명:

administrator@myems.io

비밀번호:

!MyEMS1

문제 해결

이미지 풀 타임아웃 문제 해결 방법

ISP 네트워크 문제로 인해 이미지 풀이 느릴 수 있습니다. 타사 가속 서비스를 사용할 수 있습니다.