Swarm의 도커 비밀

3934 단어 devopsredisbashdocker
이 게시물에서는 Redis를 사용한 실제 시나리오 예제를 제공하여 Docker Secrets 사용 방법을 보여주고자 합니다.

이 기사를 읽기 전에 필요한 것은 무엇입니까?


  • Docker 기술에 대한 기본 지식
  • Docker Swarm 오케스트레이터에 대한 기본 지식
  • 도커가 설치됨
  • Bash 셸에 대한 액세스

  • Docker 비밀은 무엇입니까?



    문서에서 제공된 정의를 인용합니다.

    "Docker Swarm 서비스 측면에서 비밀은 암호, SSH 개인 키, SSL 인증서 또는 네트워크를 통해 전송되거나 Dockerfile 또는 애플리케이션의 소스 코드. ..."

    그것들을 만드는 방법?



    비밀을 생성하려면 다음 명령을 실행해야 합니다.

    am@animusna:~$echo "myPlainSecret" | docker secret create mysecret
    acvs814nso28yn105wqc32o8e
    


    이 명령의 출력은 암호의 id(acvs814nso28yn105wqc32o8e)입니다.

    비밀이 생성되었는지 확인하려면 다음 명령을 실행합니다.

    am@animusna:~$docker secret ls
    ID                          NAME       DRIVER    CREATED         UPDATED
    acvs814nso28yn105wqc32o8e   mysecret             5 seconds ago   5 seconds ago
    


    그것들을 사용하는 방법?



    시크릿을 사용하려면 서비스 생성 중에 매핑해야 합니다(이 경우 documentation과 같은 redis).

    am@animusna:~$docker service create --name redis --secret mysecret redis:alpine
    


    서비스에서 비밀을 매핑할 때 Docker는/run/secrets 폴더에 비밀 이름(이 경우 mysecret)과 같은 이름의 파일을 생성하고 다음 명령을 실행할 수 있음을 증명합니다.

    am@animusna:~$docker container exec $(docker ps --filter name=redis -q) cat /run/secrets/mysecret
    myPlainSecret
    


    여기서 출력은 우리가 생성한 비밀(myPlainSecret)의 일반 텍스트입니다.

    실제 시나리오 예: Docker 비밀을 사용한 Redis 인증



    Redis 서버를 보호하려는 경우 이전에 만든 암호를 암호로 사용하여 서버에 연결할 수 있습니다.

    docker compose 파일을 준비합시다.

    version: "3.1"
    secrets:
      mysecret:
        external: true  #external=true means we've created the secret before. 
    
    services:
      redis:
        image: redis 
        secrets:
          - mysecret   #We are declaring we are using this secret in this service. 
        command: bash -c "/startup/up-redis.sh" #The command we use to start our Redis server (we execute a shell script).
        ports:
          - "6379:6379"
        volumes:
          - "/home/am/up-redis.sh:/startup/up-redis.sh" # Mapping in the container our script.
        deploy:
          replicas: 1
          restart_policy:
            condition: on-failure
    


    특정 경로(제 경우에는/home/am/)에서 서버 up-redis.sh에 대한 시작 스크립트를 준비하겠습니다.

    #!/bin/sh
    #Script to startup Redis Server.
    
    #Reading secret in a temporary variable.
    REDIS_PASSWORD=`cat /run/secrets/mysecret`
    
    #Start Redis server
    redis-server --appendonly yes --requirepass "$REDIS_PASSWORD"  
    


    이 스크립트에서 --requirepass 옵션을 사용하여/run/secrets/mysecret에서 암호를 복구하고 REDIS_PASSWORD 변수에 넣는 옵션을 사용하여 서버의 암호를 설정합니다.

    이제 모든 것이 준비되었습니다. 서비스를 시작할 수 있습니다.

    am@animusna:~$docker stack deploy --compose-file=docker-compose.yaml myapp_stack
    Creating network myapp_stack_default
    Creating service myapp_stack_redis
    


    Redis 서비스에 액세스할 수 있는 암호를 설정했는지 확인하려면 다음 명령을 실행해 보겠습니다.

    am@animusna:~$echo -e "AUTH myPlainSecret\nPING" | redis-cli
    OK
    PONG
    


    여기서 우리는 redis-cli에서 일반 비밀 myPlainSecret으로 인증하기 위해 AUTH 명령을 실행한 다음 PING 명령을 실행하여 인증되었는지 확인합니다(우리의 경우 PONG을 얻었기 때문에 예).

    결론



    이 기사에서는 연결 암호가 될 수 있는 것처럼 민감한 데이터를 보호하기 위해 Docker 비밀을 가능하고 쉽게 사용하는 방법을 보여주었습니다. 암호 사용은 개발자가 자신의 암호를 사용하여 개발 환경을 구성해야 하는 개발 시나리오와 마찬가지로 배포 시나리오에서도 매우 유용합니다. 내 경험에 따르면 Docker 비밀은 유용하고 관리하기 쉬우며 Docker Swarm을 (마이크로) 서비스의 오케스트레이터로 선택하는 경우 사용할 가치가 있습니다.

    좋은 웹페이지 즐겨찾기