[태그:] exec

  • docker exec script

    기존의 docker exec 실행 과정:

    command line 인터페이스에서 docker exec를 실행하는 다음의 과정은 타이핑이 많고 다소 번거롭게 느껴졌다.

    Bash
    root:/# docker ps          # 컨테이너 목록에서 container_id를 알아냄
    CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS                 PORTS
                                                                                        NAMES
    82c74c62c057   node:18.19-alpine         "docker-entrypoint.s…"   47 hours ago   Up 6 hours             0.0.0.0:9970-9972->9970-9972/tcp, :::9970-9972->9970-9972/tcp                                                               node-18.19-alpine
    de21f0a597ce   alpine/node:latest        "/bin/sh /home/node/…"   2 days ago     Up 2 days              0.0.0.0:9990-9992->9990-9992/tcp, :::9990-9992->9990-9992/tcp                                                               alpine-node-1
    108328fc0449   postgres:latest           "docker-entrypoint.s…"   5 months ago   Up 8 days              5432/tcp, 0.0.0.0:5436->5436/tcp, :::5436->5436/tcp                                                                         postgres
    6c58225e976e   gitlab/gitlab-ce:latest   "/assets/wrapper"        6 months ago   Up 4 weeks (healthy)   0.0.0.0:32769->22/tcp, :::32769->22/tcp, 0.0.0.0:9780->80/tcp, :::9780->80/tcp, 0.0.0.0:32768->443/tcp, :::32768->443/tcp   gitlab
    
    root:/# docker exec -it 6c5822 /bin/bash   # 쉘 실행
    root@gitlab:/# 

    간소화 스크립트 코드 작성:

    그래서 다음과 같이 스크립트를 작성해보았다.

    #!/bin/bash
    
    # script file name: exec.gitlab.sh
    
    if [ $# -ge 3 ]; then
        echo "Usage: $0 [command]"
        exit
    fi
    
    container_name='gitlab'
    command="/bin/bash"
    
    if [ $# -ge 1 ]; then
        command=$1
    fi
    
    dockerid=`docker ps | grep -i $container_name | awk '{ print $1 }'`
    docker exec -it $dockerid $command

    실행 예:

    실행 예는 다음과 같다. 타이핑 수와 실행단계가 줄었다.

    root:/# ./exec.gitlab.sh ls     # ls 실행
    RELEASE  boot  gitlab  lib32   linuxrc  opt   run   sys  var
    assets   dev   home    lib64   media    proc  sbin  tmp
    bin      etc   lib     libx32  mnt      root  srv   usr
    root:/# ./exec.gitlab.sh pwd    # pwd 실행
    /
    root:/# ./exec.gitlab.sh        # 인자가 없다면 쉘 실행
    root:/#