Docker 를 사용하여 ubuntu container 를 만들었다고 하자.

 

이 ubuntu container 의 이름은 dockeruntu 이다.

 

이 ubuntu container 안에 들어가서 ~ 위치에 mkdir test 를 하고 싶어서 아래처럼 했다.

 

sudo docker exec -it dockeruntu bash // -it 옵션과 bash 명령어를 이용하여 container 내부로 들어감.

cd ~

mkdir test

ls

 

~ 위치에 test directory가 잘 만들어진다!

 

위에선 docker container 내부로 들어가서 직접 명령을 실행했는데,

 

직접 들어가지 않고도 명령을 내릴 수 있다.

 

일단 기본적으로 간단한 명령 ls 을 하는 방법은 아래와 같다.

 

sudo docker exec dockeruntu ls

 

애초에 docker의 exec 명령어는 해당 컨테이너 내부에 명령을 보내는 역할을 한다.

 

( 자세한 것은 여기 참고 : http://pyrasis.com/book/DockerForTheReallyImpatient/Chapter20/08 )

 

이 exec 명령을 위에 처럼 사용하면, 오직 / 위치의 directory 에서만 명령어가 수행되므로

 

~ 위치로 가려면 다른 작업이 필요하다.

 

각설하고, 맨 위에 처럼 ~ 위치에 mkdir test 하는 명령어를, Docker container 바깥에서 보내는 명령어를 살펴보자.

 

sudo docker exec dockeruntu sh -c "cd ~ ; mkdir test ; ls"

 

sh -c 명령어를 사용하면 위에 보이는 것 처럼,

 

연결되거나큰 따옴표로 쓰인(chained or quoted) 명령어들을 실행시킬 수 있다.

 

( 자세한 것은 여기 참고 : https://docs.docker.com/engine/reference/commandline/exec/#extended-description )

 

 

mkdir 말고 다른 예를 들어보자.

 

나는 ~/test 위치에 존재하는 list 라는 파일에 1,2,3 이라는 글자를 개행을 포함하여 넣고 싶다.

 

<list 라는 파일에 넣고 싶은 내용>

1

2

3

 

그럼 아래처럼 명령어를 실행하면 된다.

 

sudo docker exec master sh -c "cd ~/test; echo '1' >> list ; echo '2' >> list ; echo '3' >> list ; cat list"

 

사용자의 리눅스 쉘 명령어 실력에 따라 다양하게 사용할 수 있겠다.

 

위의 명령어는 많이 복잡하니,

 

만약 쉘 스크립트를 작성 가능하다면 아래처럼 쉘 스크립트를 만들 수 있겠다.

 

#! /bin/bash

COUNTER=1
FILE="/root/test/list"
CONTENT=""
while [ $COUNTER -le 3 ];
do
        CONTENT="$CONTENT$COUNTER'\'n"
        COUNTER=$(($COUNTER+1))
done

sudo docker exec master bash -c "echo -e $CONTENT > $FILE"

 

content 변수에 들어가는 내용은 1\n2\n3\n 이다.

 

여기서 그냥 echo 를 해버리면 list 에 개행 없이 1\n2\n3\n 가 그대로 들어가기 때문에,

 

마지막 echo 에 -e 옵션을 넣어서 개행이 적용되도록 한다.

 

 

echo -e 옵션에 대해서 여기 참고 : https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_echo#-e

 

Linux Shell Script 를 어떻게 만드는지 알고 싶다면 여기 참고 : https://blog.gaerae.com/2015/01/bash-hello-world.html  

 

Bash 입문자를 위한 핵심 요약 정리 (Shell Script)

블로그와 SNS에서 주기적으로 기술 정보를 찾고 분류하여 가치를 더해 공유합니다.

blog.gaerae.com

 

 

 

+ Recent posts