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
'Docker' 카테고리의 다른 글
[Docker] ubuntu 에 기본 툴 설치 (3) | 2019.05.10 |
---|---|
Docker 공부할 때 좋은 사이트들 (0) | 2019.03.29 |
[Docker] -v 옵션 적용시 .ssh 파일들이 사라질 때 (0) | 2019.02.12 |
[Docker] swarm 설명 링크 (0) | 2019.01.29 |
[Docker] --memory 옵션을 줄 때 경고가 뜨는 경우 (0) | 2019.01.15 |