Docker는 리눅스 기반이기 때문에 이미지를 생성할때 Bash(Bourne-again shell)을 주로 사용합니다. 이미지를 생성하기 전에 자주 사용하는 Bash 문법을 간단히 정리합니다.
출력 리다이렉션. 표준 출력을 파일로 저장합니다.
$echo "hello" > ./hello.txt
입력 리다이렉션. 파일의 내용을 읽어 명령의 표준 입력으로 사용합니다.
$cat < ./hello.txt
명령 실행의 표준 출력을 파일에 추가합니다. '>'는 이미 있는 파일에 내용을 덮어쓰지만 '>>'는 파일 뒷부분에 내용을 추가합니다.
명령 실행의 표준 에러(stderr)를 파일로 저장합니다.
명령 실행의 표준 에러(stderr)를 파일에 추가합니다.
표준 출력과 표준 에러를 모두 파일로 저장합니다.
표준 출력을 표준 에러로 보냅니다. echo 명령으로 문자열을 표준 출력으로 출력했지만 표준 에러로 보냈기 때문에 변수에는 문자열이 들어가지 않습니다.
$ hello=$(echo "hello world" 1>%2)
$ echo $hello
표준 에러를 표준 출력으로 보냅니다. abcd라는 명령어는 없음므로 에러가 발생하지만 에러를 표준 출력으로 보낸 뒤 다시 /dev/null로 보냈기 때문에 아무것도 출력되지 않습니다.
$adcd > /dev/null 2>%1
파이프. 명령 실행의 표준 출력을 다른 명령의 표준 입력으로 보냅니다. 즉 첫 번째 명령의 출력 값을 두 번째 명령에서 처리합니다.
$ ls-al | grep .txt
bash의 변수입니다. 값을 저장할 때는 $를 붙이지 않고, 변수를 가져다 쓸 때만 $을 붙입니다.
& hello="hello world"
$ echo $hello
hello world
명령 실행 결과를 변수화합니다. 명령 실행 결과를 변수에 저장하거나 다른 명령의 매개 변수로 넘겨줄 때 사용합니다. 또는 문자열 안에 명령의 실행 결과를 넣을 때 사용합니다.
$ sudo docker rm $(docker ps -aq)
$ echo $(date)
Tue Sep 9 21:24:30 KST 2014
$ sudo docker rm 'docker ps -aq'
$ echo 'date'
Tue Sep 9 21:24:30 KST 2014
한줄에서 명령을 여러 개 실행합니다. 단 앞에 있는 명령이 에러 없이 실행되어야 뒤에 오는 명령이 실행됩니다.
$ make && make install
문자열입니다. '' 안에 들어있는 변수는 처리되지 않습니다.