Linux용 MID 서버 Docker 이미지 빌드

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 읽기18분
  • 제공된 레시피로 Docker 이미지를 생성하여 Linux에 컨테이너화된 MID Server를 배포합니다. 컨테이너식 MID 서버는 MID 서버를 대규모로 신속하게 배포할 수 있도록 하는 MID 서버의 Docker 이미지를 사용합니다.

    시작하기 전에

    필요한 역할: admin

    구성 단계에 대한 설정 표시기MID 서버가 네트워크 내부 및 외부의 요소에 연결할 수 있는지 확인Linux 또는 Windows 호스트에서 MID 서버를 다운로드 및 설치MID 서버 구성MID 서버 보안 구성MID 서버가 네트워크 내부 및 외부의 요소에 연결할 수 있는지 확인Linux 또는 Windows 호스트에서 MID 서버를 다운로드 및 설치MID 서버 구성MID 서버 보안 구성

    필요 조건:

    호스트는 Docker 엔진과 CLI(명령줄 인터페이스) 20.10.4 이상을 사용해야 합니다.

    라이브러리를 사용 가능한 최신 버전 또는 최소한 보안 수정 사항이 있는 가장 높은 버전으로 업데이트합니다. 식별된 문제가 전이적 종속성의 일부인 경우 최신 전이적 버전을 포함하는 종속 라이브러리 버전을 찾습니다. 종속 라이브러리를 업그레이드하여 전이적 종속성을 업그레이드할 수 없는 경우 종속성을 제외하고 보안 버전을 직접 포함하는 것이 좋습니다.

    주:
    관리자로 Docker 버전 명령을 실행하여 Docker의 가용성을 확인합니다. 자세한 내용은 Docker 버전 명령 설명서를 참조하십시오.

    프로시저

    1. MID 서버 다운로드 페이지에서 Linux Docker 레시피 ZIP 파일을 다운로드하고 서명을 확인합니다.
      MID 서버 다운로드 페이지 및 서명 확인에 대한 자세한 내용은 MID 서버 파일 다운로드를 참조하십시오.
    2. 폴더에 ZIP 파일의 압축을 풉니다.
    3. 옵션: 현재 디렉터리를 새 폴더로 변경할 수 있습니다.
    4. 이미지를 빌드하려면 build 명령을 실행합니다. > docker build <path-to-docker-recipe> [ --tag <docker-tag> ]

      명령에 대한 자세한 내용은 Docker 빌드 명령 설명서를 참조하세요. Docker 파일의 경로는 상대 경로일 수 있으며, 파일이 Docker 레시피 디렉터리에 있는 경우 현재 디렉터리일 수 있습니다.

      기본 이미지 태그는 DOCKER_TAG 매개 변수와 함께 .env 파일에서 기본적으로 제공됩니다. docker 명령을 실행하기 전에 > export $(grep DOCKER_TAG .env) 명령을 실행하여 이 매개 변수를 내보낼 수 있습니다. 다음 모든 명령에서 <docker-tag>DOCKER_TAG 값으로 바꿀 수 있습니다.

      build 명령은 다음 빌드 인수를 사용합니다.

      속성 설명
      MID_INSTALLATION_URL MID 서버 설치 파일을 다운로드하는 링크입니다. 기본적으로 MID 서버 다운로드 페이지에 제공된 Linux 64비트 설치 ZIP 파일의 다운로드 링크로 설정됩니다.
      MID_INSTALLATION_FILE 로컬 MID 서버 설치 파일의 이름입니다. 기본값은 비어 있습니다. 이 매개변수가 비어 있지 않으면 레시피는 설치 서버에서 다운로드하는 대신 로컬 파일을 사용합니다. 이 매개변수는 전체 경로가 아니라 파일 이름만 사용합니다. 빌드 전에 로컬 파일을 레시피 디렉터리의 asset/ 하위 폴더에 복사해야 합니다. Rome 이전의 MID 서버 릴리스는 지원되지 않습니다.

      예: > docker build <path-to-dockerfile> --build-arg MID_INSTALLATION_FILE=<mid.installation.file.name>) --tag <docker-tag>

      MID_SIGNATURE_VERIFICATION MID 서버 설치 파일의 서명을 검증해야 합니다. 기본값은 TRUE입니다. TRUE이면 빌드 프로세스에서는 항상 MID 서버 설치 파일의 디지털 서명이 원격 서버에서 다운로드되었는지 혹은 로컬 파일에서 다운로드되었는지 검증합니다. 그렇지 않으면 서명 검증을 건너뜁니다.

      예: > docker build <path-to-dockerfile> --build-arg MID_SIGNATURE_VERIFICATION=false --tag <docker-tag>

      USER_ID 및 GROUP_ID

      기본적으로 지정하지 않으면 Docker는 사용자 ID = 1001, 그룹 ID = 1001로 MID 서버 사용자를 생성합니다. USER_ID 및 GROUP_ID 빌드 인수를 사용하여 사용자 지정 사용자 ID 및 그룹 ID를 컨테이너로 전달할 수 있습니다. Docker는 제공된 사용자 ID와 그룹 ID로 MID 서버의 사용자를 생성합니다. 컨테이너 이미지 내에서 MID 서버 설치 폴더 아래의 모든 파일은 이 사용자와 루트 그룹(id=0)이 소유합니다.

      이미지가 Kubernetes 플랫폼에 배포되면 이 MID 서버 사용자는 MID 서버를 실행하는 컨테이너 사용자가 됩니다.

      이미지가 OpenShift 플랫폼에 배포되면 OpenShift는 관리자가 아닌 임의의 사용자 ID를 MID 서버를 실행하는 컨테이너 사용자로 할당할 수 있습니다. 그러나 이 사용자는 항상 루트 그룹에 속합니다.

      두 경우 모두 컨테이너 사용자는 MID 서버 파일에 대한 모든 권한을 갖습니다. 이렇게 하면 동일한 이미지를 Kubernetes와 OpenShift에 배포할 수 있습니다.

    5. 옵션: 이미지가 성공적으로 빌드되면 > docker image ls 명령을 사용하여 빌드된 이미지를 나열할 수 있습니다.

    다음에 수행할 작업

    디스크 공간을 절약하려면 사용되지 않거나 중간 이미지가 있는 경우 다음 명령을 실행하여 현수 이미지를 제거합니다.
    $ docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
    예를 들어 현수 이미지를 제거하기 전에 docker image ls 명령은 다음과 유사한 내용을 표시할 수 있습니다.
    REPOSITORY                                TAG                                           IMAGE ID       CREATED              SIZE
    mid                                       trackdiscocopper-10-09-2020_10-14-2021_2200   4542b6ab34af   21 seconds ago       1.01GB
    <none>                                    <none>                                        1cdae087a970   About a minute ago   1.38GB
    
    현수 이미지를 제거한 후 docker image ls 명령은 다음을 표시합니다.
    REPOSITORY                                TAG                                           IMAGE ID       CREATED              SIZE
    mid                                       trackdiscocopper-10-09-2020_10-14-2021_2200   4542b6ab34af   About a minute ago   1.01GB
    

    컨테이너식 MID 서버 시작

    컨테이너식 MID 서버는 MID 서버를 대규모로 신속하게 배포할 수 있도록 하는 MID 서버의 Docker 이미지를 사용합니다. MID Server는 Docker Swarm과 같은 오케스트레이션 도구를 사용하여 배포됩니다.

    시작하기 전에

    필요한 역할: admin

    필요 조건:

    프로시저

    1. 이미지를 사용할 수 있게 되면 docker run 명령을 사용하여 새 MID 서버를 시작하고 env 파일 또는 env 변수 옵션(docker run --env-file <env_file_name_here> <docker_tag 또는 image_id>)을 지정합니다.
      주:
      보안 취약성이 있을 수 있으므로 이 명령을 사용하여 중요한 데이터를 전달하지 마십시오. 중요한 데이터를 전달하려면 절차 Docker 비밀을 사용하여 중요한 데이터를 컨테이너화된 MID 서버에 전달Kubernetes 비밀을 사용하여 중요한 데이터를 컨테이너화된 MID 서버에 전달.

      자세한 내용은 docker image ls 명령, docker run 명령env 파일 또는 env 변수 옵션 지정에 대한 Docker 설명서 페이지를 참조하세요. env 파일은 name=value 형식을 사용하는 간단한 텍스트 파일입니다. 변수가 env 파일과 --env 옵션 모두에 지정된 경우 명령줄에 정의된 변수가 우선합니다.

      배포 요청은 컨테이너식 MID Server를 시작하는 데 권장되는 방법이지만 환경 변수를 사용하여 구성할 수도 있습니다. 컨테이너가 처음 시작될 때 초기화 스크립트는 환경 변수를 사용하고 다음 환경 변수를 사용하여 MID 서버 애플리케이션을 구성합니다.
      MID_INSTANCE_URL
      이 변수는 'url' 구성 매개 변수를 설정합니다.
      MID_INSTANCE_USERNAME
      이 변수는 "mid.instance.username" 구성 매개변수를 설정합니다.
      MID_INSTANCE_PASSWORD
      이 변수는 "mid.instance.password" 구성 매개변수를 설정합니다.
      MID_SERVER_NAME
      이 변수는 'name' 구성 매개 변수를 설정합니다.
      MID_PROXY_HOST
      이 변수는 "mid.proxy.host" 구성 매개변수를 설정합니다. 이 변수는 필수가 아니며 프록시가 설정된 경우에만 필요합니다.
      MID_PROXY_PORT
      이 변수는 'mid.proxy.port' 구성 매개변수를 설정합니다.
      MID_PROXY_USERNAME
      이 변수는 "mid.proxy.username" 구성 매개변수를 설정합니다.
      MID_PROXY_PASSWORD
      이 변수는 'mid.proxy.password' 구성 매개변수를 설정합니다.
      MID_SECRETS_FILE
      이 변수는 암호 또는 인증서와 같은 중요한 데이터를 포함하는 전체 비밀 파일 이름을 지정합니다.
      MID_MUTUAL_AUTH_PEM_FILE
      이 변수는 자동 유효성 검사 설정에 사용되는 클라이언트 인증서 파일의 전체 파일 이름을 지정합니다.
    2. 옵션: 컨테이너 목록을 보려면 docker container ls 명령을 실행합니다.

    Docker 비밀을 사용하여 중요한 데이터를 컨테이너화된 MID 서버에 전달

    환경 변수 또는 비밀 파일을 통해 전달된 구성 매개변수를 사용하여 컨테이너화된 MID Server를 구성할 수 있습니다.

    시작하기 전에

    필요한 역할: Docker Swarm 관리자

    이 태스크 정보

    Docker 시크릿을 사용하여 민감한 데이터(예: 암호 또는 인증서)를 컨테이너화된 MID 서버로 전달할 수 있습니다. 이 절차를 사용하기 전에 Docker Swarm 을 설정하고 시작합니다.

    배포를 만들 때 복제본이 1로 유지되는지 확인합니다.

    프로시저

    1. mid-secrets.properties에 중요한 데이터 배치
    2. docker secret create 명령을 사용하여 docker 비밀 만들기: docker secret create mid-secrets mid-secrets.properties

      첫 번째 mid-secrets 는 docker swarm의 비밀을 나타내고, 두 번째 mid-secrets.properties 파라미터는 호스트 머신의 파일 시스템에서 비밀을 읽을 파일 경로를 나타냅니다. docker secret ls 명령을 실행하여 생성된 모든 비밀을 나열할 수 있습니다.

      docker secret 명령에 대한 자세한 내용은 docker secret 설명서를 참조하세요.

    3. MID_SECRETS_FILE 환경 변수를 컨테이너 내의 비밀 파일 경로로 업데이트합니다.
      Linux에서 Docker Swarm 비밀의 기본 경로는 /run/secrets/mid-secrets.properties입니다.
    4. docker service create 명령을 사용하여 MID 서버 이미지 컨테이너를 스웜에 배포: docker service create --name mid-service --secret mid-secrets.properties --env-file mid.env <docker-tag or image-id>

      컨테이너 서비스가 지정된 비밀과 연결할 수 있도록 --secret 플래그 가 제공되었는지 확인합니다.

    Docker 비밀을 사용하여 상호 인증된 컨테이너식 MID 서버에 중요한 데이터 전달

    환경 변수 또는 비밀 파일을 통해 전달된 구성 매개변수를 사용하여 컨테이너화된 MID Server를 구성할 수 있습니다.

    시작하기 전에

    필요한 역할: admin

    필요한 역할: Docker Swarm 관리자

    이 태스크 정보

    인스턴스에인증서 기반 인증이 활성화된 경우 상호 인증 클라이언트 인증서(PEM 파일)를 사용하여 자동 확인하도록 MID 서버를 구성할 수 있습니다. 이 작업은 MID_MUTUAL_AUTH_PEM_FILE 환경 변수를 사용하여 컨테이너 내부의 PEM 인증서 파일에 대한 전체 경로를 설정하여 수행할 수 있습니다. 예를 들어 mid.env 파일에서 변수를 MID_MUTUAL_AUTH_PEM_FILE= /run/secrets/certificate.pem으로 업데이트할 수 있습니다.

    Docker 또는 Kubernetes 시크릿을 사용하여 PEM 인증서 파일을 컨테이너에 전달할 수 있습니다. 다음은 PEM 인증서 파일을 컨테이너에 전달하는 예제 명령입니다. docker service create --name mid-service --secret mid-secrets.properties --secret <certificate-secret-name> --env-file mid.env <docker-tag 또는 image-id>

    상호 PEM 인증서는 초기화 과정에서 MID Server에 설치됩니다. 그러면 MID 서버가 인스턴스에 연결하고 자동으로 검증합니다. 상호 인증이 성공적으로 활성화된 MID Server가 인스턴스에 연결되면 MID 에이전트 로그에서 다음 항목 중 일부를 확인할 수있습니다.

    • MID 키 스토어에 사용자 지정 인증서를 설치함
    • 상호 인증을 사용하도록 구성된 MID

    프로시저

    1. 상호 인증 PEM 번들을 준비합니다.
    2. docker secret create 명령을 사용하여 docker 시크릿을 생성합니다: docker secret create mutual-auth-secret <mutual-auth-pem-file-on-local-filesystem>.

      docker secret ls 명령을 실행하여 생성된 모든 비밀을 나열할 수 있습니다.

    3. 컨테이너 내의 비밀 파일 경로로 MID_MUTUAL_AUTH_PEM_FILE 환경 변수를 업데이트합니다.

      Linux에서 Docker Swarm 보안 정보의 기본 경로는 /run/secrets/<mutual-auth-pem-file-name>입니다.

    4. docker service create 명령을 사용하여 MID 서버 이미지 컨테이너를 스웜에 배포: docker service create --name mid-service --secret mutual-auth-secret --env-file mid.env <docker-tag 또는 image-id>

      컨테이너 서비스가 지정된 비밀과 연결할 수 있도록 --secret 플래그가 제공되는지 확인합니다.

    5. 컨테이너화된 MID 서버를 deployment.yml가 있는 포드에 배포하고 kubectl create -f deployment.yml 명령을 실행합니다.

    Kubernetes 비밀을 사용하여 중요한 데이터를 컨테이너화된 MID 서버에 전달

    환경 변수 또는 비밀 파일을 통해 전달된 구성 매개변수를 사용하여 컨테이너화된 MID Server를 구성할 수 있습니다.

    시작하기 전에

    필요한 역할: Kubernetest 관리자

    이 절차를 사용하기 전에 Kubernertes 클러스터 를 설정하고 시작합니다. 쿠버네티스 시크릿에 대한 자세한 내용은 쿠버네티스 시크릿 설명서를 참조한다.

    주:
    Kubernetes는 로컬 이미지에서 직접 작동하지 않습니다. MID 서버 이미지를 공용 레지스트리에 업로드하거나 로컬 레지스트리를 설정합니다. docker 레지스트리 빌드에 대한 공식 Docker 지침을 참조하십시오.

    배포를 만들 때 복제본이 1로 유지되는지 확인합니다.

    프로시저

    1. 그에 따라 중요한 데이터를 mid-secrets.properties에 배치합니다.
    2. kubectl create secret generic mid-secret --from-file=mid-secrets.properties 명령으로 Kubernetes 시크릿을 생성합니다.
    3. 옵션: kubectl get secrets 명령을 실행하여 생성된 모든 비밀을 나열할 수 있습니다.
    4. MID_SECRETS_FILE 환경 변수를 컨테이너 내부의 비밀 파일 경로로 업데이트합니다.
    5. 다음 샘플 YML 컨텐츠를 사용하여 배포를 작성합니다.
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: basic-example
      spec:
        selector:
          matchLabels:
            app: MIDServerManagement
            provider: ServiceNow
        replicas: 1
        template:
          metadata:
            labels:
              app: MIDServerManagement
              provider: ServiceNow
          spec:
            containers:
              - name: basic-example-container
                imagePullPolicy: IfNotPresent
                image: "mid:imageTag"
                env:
                  - name: MID_INSTANCE_URL
                    value: " https://exampleinstance.service-now.com/"
                  - name: MID_INSTANCE_USERNAME
                    value: "mid_server_user_name”
                  - name: MID_SECRETS_FILE
                    value: "/opt/snc_mid_server/secrets/mid-secrets.properties“
                  - name: MID_SERVER_NAME
                    value: "Basic-Example-MID"
                volumeMounts:
                  - mountPath: "/opt/snc_mid_server/secrets"
                    name: "mid-mount-secret"
                    readOnly: true
            volumes:
            - name: "mid-mount-secret"
              secret:
                secretName: "mid-secret"
      
      주:
      배포 또는 포드를 생성하는 방법에는 여러 가지가 있습니다.자세한 내용은 Kubernetes 배포 지침을 참조하세요.  
    6. deployment.yml가 있는 포드에 컨테이너화된 MID 서버를 배포하고 kubectl create -f deployment.yml 명령을 실행합니다.

    Kubernetes 비밀을 사용하여 민감한 데이터를 상호 인증된 컨테이너식 MID 서버에 전달

    환경 변수 또는 비밀 파일을 통해 전달된 구성 매개변수를 사용하여 컨테이너화된 MID Server를 구성할 수 있습니다.

    시작하기 전에

    필요한 역할: Kubernetest 관리자

    필요 조건:

    인스턴스에인증서 기반 인증이 활성화된 경우 상호 인증 클라이언트 인증서(PEM 파일)를 사용하여 자동 확인하도록 MID 서버를 구성할 수 있습니다. 이 작업은 MID_MUTUAL_AUTH_PEM_FILE 환경 변수를 사용하여 컨테이너 내부의 PEM 인증서 파일에 대한 전체 경로를 설정하여 수행할 수 있습니다. Kubernetes 시크릿을 사용하여 PEM 인증서 파일을 컨테이너에 전달할 수 있습니다.

    상호 PEM 인증서는 초기화 과정에서 MID Server에 설치됩니다. 그러면 MID 서버가 인스턴스에 연결하고 자동으로 검증합니다. 상호 인증이 성공적으로 활성화된 MID Server가 인스턴스에 연결되면 MID 에이전트 로그에서 다음 항목 중 일부를 확인할 수있습니다.

    • MID 키 스토어에 사용자 지정 인증서를 설치함
    • 상호 인증을 사용하도록 구성된 MID

    프로시저

    1. 상호 인증 PEM 번들을 준비합니다.
    2. kubectl create secret generic mutual-auth-secret --from-file=<mutual-auth-pem-file 명령을 사용하여 Kubernetes 시크릿을 생성합니다>
    3. 옵션: kubectl get secrets 명령을 실행하여 생성된 모든 비밀을 확인할 수 있습니다.
    4. MID_MUTUAL_AUTH_PEM_FILE 환경 변수를 컨테이너 내부의 비밀 파일 경로로 업데이트합니다.
    5. 다음 샘플 YML 컨텐츠를 사용하여 배포를 작성합니다.
      6.	apiVersion: apps/v1
      7.	kind: Deployment
      8.	metadata:
      9.	  name: mutual-auth-example
      10.	spec:
      11.	  selector:
      12.	    matchLabels:
      13.	      app: MIDServerManagement
      14.	      provider: ServiceNow
      15.	  replicas: 1
      16.	  template:
      17.	    metadata:
      18.	      labels:
      19.	        app: MIDServerManagement
      20.	        provider: ServiceNow
      21.	    spec:
      22.	      containers:
      23.	        - name: mutual-auth -container
      24.	          imagePullPolicy: IfNotPresent
      25.	          image: "mid:imageTag”
      26.	          env:
      27.	            - name: MID_INSTANCE_URL
      28.	              value: "https://exampleinstance.service-now.com/"
      29.	            - name: MID_INSTANCE_USERNAME
      30.	              value: "mid_server_user_name”
      31.	            - name: MID_SERVER_NAME
      32.	              value: "Mutual-Auth-Deployment-MID"
      33.	            - name: MID_MUTUAL_AUTH_PEM_FILE
      34.	              value: "/opt/snc_mid_server/mutual-auth/yourpemfile.pem"
      35.	          volumeMounts:
      36.	            - mountPath: "/opt/snc_mid_server/mutual-auth"
      37.	              name: "mid-mount-mutual-auth"
      38.	              readOnly: true
      39.	      volumes:
      40.	      - name: "mid-mount-mutual-auth"
      41.	        secret:
      42.	          secretName: "mid-mutual-auth-secret"
      
    6. 컨테이너화된 MID 서버를 deployment.yml가 있는 포드에 배포하고 kubectl create -f deployment.yml 명령을 실행합니다.