작업에서 Docker 컨테이너 사용 - GitHub Actions

👉 전제 조건

GitHub Actions를 처음 사용하는 경우 다음 기사를 읽어 보시기 바랍니다.



  • 이전 기사에서 설명한 것처럼 GitHub Actions가 GitHub Hosted Runner로 제공하는 운영 체제를 사용하여 가상 머신에서 워크플로를 실행할 수 있습니다.

    도커 컨테이너 사용



    가상 머신에 설치될 도커 컨테이너를 사용할 수 있으며 가상 머신에서 직접 실행하는 대신 워크플로가 특정 컨테이너에서 실행됩니다.

    이것은 Docker Hub의 이미지일 수 있습니다.


    도커 허브



    Docker Hub는 사용자가 컨테이너 애플리케이션을 생성, 관리 및 제공할 수 있는 플랫폼입니다. Docker Hub는 가장 큰 컨테이너 이미지 라이브러리입니다.

    링크: Docker Hub



    이미지(예: 노드)를 클릭하면 해당 태그가 있는 모든 dockerfile 링크를 볼 수 있습니다.




    사용하는 방법 ?



    당신은 제공해야합니다,
    Publisher-dockerhub-username : "container:"아래에 이미지 태그가 있는 docker-image-tag
  • Windows 및 mac-os 가상 머신에서 컨테이너를 사용할 수 없습니다.
  • 우분투 머신에서만 컨테이너를 사용할 수 있습니다.

  • 
    name: workflow-name
    on: push
    
    jobs:
      job-name:
        runs-on: ubuntu-latest
        container:
          image: dockerhub-username:docker-image-tag
    
    

    예시:

    
    name: container
    on: push
    
    jobs:
      node-docker:
        runs-on: ubuntu-latest
        container:
          image: node:14.15.0-alpine3.12
    
    


    또한 환경 변수, 포트 및 옵션 등과 같은 다른 매개 변수를 제공할 수 있습니다.

    
    name: container
    on: push
    
    jobs:
      node-docker:
        runs-on: ubuntu-latest
        container:
          image: node:14.15.0-alpine3.12
    
         #env:
         #  ENV1: Available to this container only
    
         #ports: To expose our container
    
         #options: --cpus 1 --host
    
    


    따라서 다음 그림에서는 단계가 가상 머신에서 직접 실행되는 대신 dockerhub 이미지로 초기화한 컨테이너 내에서 실행되고 있음을 확인할 수 있습니다.

    
    name: container
    on: push
    
    jobs:
      node-docker:
        runs-on: ubuntu-latest
        container:
          image: node:14.15.0-alpine3.12
        steps:
             - name: Log the node version
               run: |
                 node -v
                 cat /etc/os-release  
    
    
    


    여기에서 이미지의 노드 버전과 도커 컨테이너의 일부 운영 체제 정보를 에코합니다.

    산출:




    서비스로 실행할 여러 컨테이너를 지정할 수도 있습니다.



    여러 서비스를 실행하는 애플리케이션이 있는 경우 가상 머신에서 실행하려면 여러 이미지가 필요할 수 있습니다. 일반적으로 우리는 Docker-Compose를 사용하여 이와 같은 작업을 수행하지만 **GitHub Actions에는 이러한 유형의 애플리케이션을 실행하는 유사한 방법이 있습니다.

    작업에서 여러 도커 컨테이너를 실행합니다.



    여기에 컨테이너를 두는 대신 "서비스:"를 제공할 수 있습니다.
    서비스를 "services:"아래의 도커 이미지로 제공할 수 있으며 가상 머신에서 별도의 컨테이너로 실행됩니다.

    
    name: workflow-name
    on: push
    
    jobs:
      job-name:
        runs-on: ubuntu-latest
        services:
          service-name-1:
            image: dockerhub-username:docker-image-1
            ports:
               - 3001:3000
    
          service-name-2:
            image: dockerhub-username:docker-image-2
            ports:
               - 4001:4000
    
        steps:
          - name: Get from service-1
            run: http://localhost:3001/api/users
    
          - name: Get from service-2
            run: http://localhost:4001/api/items
    
    
          - name: post a user example
            run: "curl -x POST http://localhost:3001/api/user -H 'Content-Type: application/json' -d '{\"username"\: \"hello"\, \"address"\: "sampleaddress"}' "
    
    
    


    여기에서는 가상 머신 내부에 service-1 및 service-2에 대한 두 개의 컨테이너를 생성합니다.

    이 두 컨테이너 간에 통신하기 위해 서비스 이름을 앱의 호스트 이름으로 사용할 수 있습니다.


    개별 단계에서 도커 컨테이너를 실행합니다.



    GitHub Actions에서는 다른 단계에서도 다른 컨테이너를 사용할 수 있습니다.
  • "with:"키를 사용하여 특정 단계에서 이 컨테이너에 입력을 제공할 수 있습니다
  • .
  • 키를 사용하여 진입점을 제공하고 dockerfile의 진입점을 재정의할 수 있습니다
  • .
  • echo, node ...etc의 일부 진입점을 찾으려면 다음 명령을 사용하십시오
  • .

    예 1:

    type -a  echo
    


  • 출력 - 우분투에서 에코의 진입점:

  • echo is  /bin/echo
    


    예 2:

    type -a  node
    


  • 출력 - ubuntu에서 노드의 진입점:

  • node is  usr/local/bin/echo
    


    우분투에서 이 "type -a "명령을 사용하여 설치된 도구 및 소프트웨어의 일부 진입점을 찾으십시오.

    예시:

    
    name: container
    on: push
    
    jobs:
      node-docker:
        runs-on: ubuntu-latest
        container:
          image: node:14.15.0-alpine3.12
          steps:
             - name: Log the parent container node version
               run: |
                 node -v 
               # Echo the node version of the parent container
    
    
             - name: Log the step container node version
               uses: docker://node:12.14.1-alpine3.10
               with:
                 entrypoint: usr/local/bin/echo
                 args: -v
                # Echo the node version of this step container based on this 12.14.1-alpine3.10 image
    
    
             - name: Step with docker to echo a string
               uses: docker://node:12.14.1-alpine3.10
               with:
                 entrypoint: /bin/echo
                 args: Hello Docker !
    
    
    


    워크플로 파일을 저장소로 푸시하고 저장소의 작업 창을 확인합니다.

    출력:

    v14.15.0
    v12.14.1
    Hello Docker !
    
    


    👉 다음은 무엇입니까?
  • Trigger workflows manually using the repository dispatch event

  • 감사합니다




    여러분 모두가 이것으로부터 무언가를 즐기고 배웠기를 바랍니다. 토론 섹션에서 귀하의 의견과 제안을 알려주십시오.

    👉 방문해주세요 - https://mihinduranasinghe.com/

    좋은 웹페이지 즐겨찾기