기존의 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:/#