Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Dockerfile과 Bash 
이재홍 
http://pyrasis.com 
Docker Seoul Meetup #2 / September 27, 2014
Dockerfile 
이미지를 생성하기 위한 설정 파일 
RUN, CMD, ENTRYPOINT에서 Shell로 명령 실행 
RUN: 이미지를 생성할 때 
CMD, ENTRYPOINT: 컨테이너를 시작할 때, 주로 스크 ...
RUN은 독립적이다 
RUN cd /etc 
RUN echo "127.0.0.1 hello" >> hosts 
# 동작 안함 
올바른 사용 방법 
RUN cd /etc && echo "127.0.0.1 hello" >>...
RUN에서 사용자 입력 창, 프롬프트가 나오면 안된다 
데비안(우분투)에서는 ENV로 환경 변수 설정 
ENV로 설정한 환경 변수는 다음에 나오는 RUN에 모두 적용됨 
Bash와 리다이렉션 파이프, 기타 방법을 사용하...
Bash(Bourne Again Shell) 
대부분 배포판에서 기본 Shell 
CentOS: sh -> bash 
Ubuntu: sh -> dash(Debian Almquist Shell) 
각종 유닉스 명령과 조합...
표준 출력(stdout) 리다이렉션 
$ echo "hello" > ./hello.txt 
$ echo "hello" > /dev/null 
표준 입력(stdin) 리다이렉션 
$ echo "cat" < ./hello....
표준 출력(stdout)과 표준 에러(stderr)를 모두 파일로 저장 
&> 
표준 출력(stdout)을 표준 에러(stderr)로 보냄 
1>&2 
표준 에러(stderr)를 표준 출력(stdout)으로 보냄 
2>...
변수 설정 
스크립트 내에서만 유효 
$ HELLO=world 
환경 변수 설정 
현재 로그인한 사용자 계정 내에서 유효 
$ export HELLO=world
명령 실행 결과(stdout)를 변수화 
$ sudo docker rm $(docker ps -aq) 
$ echo $(date) 
$ sudo docker rm `docker ps -aq` 
$ echo `date` ...
문자열 안에서 변수처리 
$ str="World" 
$ echo "Hello ${str}" 
Hello World 
$ echo "Hello $str" 
Hello World 
값이 있으면 그대로 사용, NULL이면 기...
한 줄을 여러 줄로 표현 
$ sudo docker run -d --name hello busybox:latest 
$ sudo docker run  
-d  
--name hello  
busybox:latest
문자열을 명령의 표준 입력으로 보냄 
$ cat <<< "User name is $USER" 
User name is pyrasis 
여러 줄의 문자열을 명령의 표준 입력으로 보냄 
$ cat > ./hello.txt ...
지정한 형식대로 출력. 파이프와 연동하여 명령에 입력하는 효과 
$ printf 80nexampleuserny | example-config 
Port: 80 
User: exampleuser 
Save Configur...
Dockerfile 예제
리다이렉션을 활용하여 파일에 내용 추가 
FROM ubuntu:14.04 
RUN apt-get update 
RUN apt-get install -y nginx 
RUN echo "ndaemon off;" >> /et...
리다이렉션 활용 
여러 줄의 문자열을 파일로 저장 
변수 처리 
#!/bin/bash 
mysql_install_db --user mysql > /dev/null 
cat > /tmp/sql <<EOF 
USE mysq...
rbenv로 Ruby 설치 
FROM ubuntu:14.04 
RUN apt-get update 
RUN apt-get install -y autoconf bison build-essential libssl-dev  
...
리다이렉션 활용 
printf를 활용하여 자동으로 설정 값 적용 
파이프 활용 
변수 처리 
#!/bin/bash 
echo "export ORACLE_HOME=/u01/app/oracle/product/11.2.0/x...
sed로 설정 파일 수정 
FROM ubuntu:14.04 
RUN cd /etc/apt &&  
sed -i 's/archive.ubuntu.com/ftp.daum.net/g' sources.list &&  
sed ...
변수 처리 
한 줄을 여러 줄로 표현 
[Unit] 
Description=Announce Web 
BindsTo=web.service 
[Service] 
EnvironmentFile=/etc/environment 
...
"가장 빨리 만나는 Docker" 출간 및 원고 공개 
http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book
"아마존 웹 서비스를 다루는 기술" 출간 및 원고 공개 
http://www.pyrasis.com/private/2014/09/30/publish-the-art-of-amazon-web-services-book
Upcoming SlideShare
Loading in …5
×

Dockerfile과 Bash

4,242 views

Published on

Dockerfile과 Bash

Docker Seoul Meetup #2 발표 자료입니다.

Bash 기본 문법과 Dockerfile 예제를 설명하였습니다

Published in: Software
  • Dating for everyone is here: ♥♥♥ http://bit.ly/2ZDZFYj ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/2ZDZFYj ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ..................................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, CookeBOOK Crime, eeBOOK Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ..................................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, CookeBOOK Crime, eeBOOK Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Dockerfile과 Bash

  1. 1. Dockerfile과 Bash 이재홍 http://pyrasis.com Docker Seoul Meetup #2 / September 27, 2014
  2. 2. Dockerfile 이미지를 생성하기 위한 설정 파일 RUN, CMD, ENTRYPOINT에서 Shell로 명령 실행 RUN: 이미지를 생성할 때 CMD, ENTRYPOINT: 컨테이너를 시작할 때, 주로 스크 립트를 실행
  3. 3. RUN은 독립적이다 RUN cd /etc RUN echo "127.0.0.1 hello" >> hosts # 동작 안함 올바른 사용 방법 RUN cd /etc && echo "127.0.0.1 hello" >> hosts WORKDIR /etc RUN echo "127.0.0.1 hello" >> hosts
  4. 4. RUN에서 사용자 입력 창, 프롬프트가 나오면 안된다 데비안(우분투)에서는 ENV로 환경 변수 설정 ENV로 설정한 환경 변수는 다음에 나오는 RUN에 모두 적용됨 Bash와 리다이렉션 파이프, 기타 방법을 사용하여 자동화 FROM ubuntu:14.04 ENV DEBIAN_FRONTEND noninteractive RUN apt-get update RUN echo "mysql-server mysql-server/root_password password" | debconf-set-selections RUN echo "mysql-server mysql-server/root_password_again password" | debconf-set-selections RUN apt-get install -y mysql-server
  5. 5. Bash(Bourne Again Shell) 대부분 배포판에서 기본 Shell CentOS: sh -> bash Ubuntu: sh -> dash(Debian Almquist Shell) 각종 유닉스 명령과 조합하여 사용
  6. 6. 표준 출력(stdout) 리다이렉션 $ echo "hello" > ./hello.txt $ echo "hello" > /dev/null 표준 입력(stdin) 리다이렉션 $ echo "cat" < ./hello.txt 표준 출력 내용을 파일에 추가 $ echo "world" >> ./hello.txt 표준 에러(stderr)를 파일로 저장, 추가 2> 2>>
  7. 7. 표준 출력(stdout)과 표준 에러(stderr)를 모두 파일로 저장 &> 표준 출력(stdout)을 표준 에러(stderr)로 보냄 1>&2 표준 에러(stderr)를 표준 출력(stdout)으로 보냄 2>&1 $ cat world.txt > /dev/null 2>&1 표준 출력을 다른 명령의 표준 입력으로 보냄 $ ls -al | grep .txt
  8. 8. 변수 설정 스크립트 내에서만 유효 $ HELLO=world 환경 변수 설정 현재 로그인한 사용자 계정 내에서 유효 $ export HELLO=world
  9. 9. 명령 실행 결과(stdout)를 변수화 $ sudo docker rm $(docker ps -aq) $ echo $(date) $ sudo docker rm `docker ps -aq` $ echo `date` 변수를 처리하는 않는 문자열 $ echo "$USER" pyrasis 변수를 처리하지 않는 문자열 $ echo '$USER' $USER
  10. 10. 문자열 안에서 변수처리 $ str="World" $ echo "Hello ${str}" Hello World $ echo "Hello $str" Hello World 값이 있으면 그대로 사용, NULL이면 기본값 사용 $ WORLD= $ WORLD=${WORLD:-"abcd"} $ echo $WORLD abcd
  11. 11. 한 줄을 여러 줄로 표현 $ sudo docker run -d --name hello busybox:latest $ sudo docker run -d --name hello busybox:latest
  12. 12. 문자열을 명령의 표준 입력으로 보냄 $ cat <<< "User name is $USER" User name is pyrasis 여러 줄의 문자열을 명령의 표준 입력으로 보냄 $ cat > ./hello.txt <<EOF Hello World Host name is $(hostname) User name is $(USER) EOF
  13. 13. 지정한 형식대로 출력. 파이프와 연동하여 명령에 입력하는 효과 $ printf 80nexampleuserny | example-config Port: 80 User: exampleuser Save Configuration (y/n): y 텍스트 파일에서 문자열 변경 $ sed -i "s/hello/world/g" hello.txt Git 리비전 구하기. 실행 결과를 변수화 #!/bin/bash REVISION=$(expr substr $(git rev-parse --verify HEAD) 1 7)
  14. 14. Dockerfile 예제
  15. 15. 리다이렉션을 활용하여 파일에 내용 추가 FROM ubuntu:14.04 RUN apt-get update RUN apt-get install -y nginx RUN echo "ndaemon off;" >> /etc/nginx/nginx.conf RUN chown -R www-data:www-data /var/lib/nginx WORKDIR /etc/nginx CMD ["nginx"] EXPOSE 80 EXPOSE 443
  16. 16. 리다이렉션 활용 여러 줄의 문자열을 파일로 저장 변수 처리 #!/bin/bash mysql_install_db --user mysql > /dev/null cat > /tmp/sql <<EOF USE mysql; FLUSH PRIVILEGES; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; UPDATE user SET password=PASSWORD("$MYSQL_ROOT_PASSWORD") WHERE user='root'; EOF mysqld --bootstrap --verbose=0 < /tmp/sql rm -rf /tmp/sql mysqld ADD entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT /entrypoint.sh
  17. 17. rbenv로 Ruby 설치 FROM ubuntu:14.04 RUN apt-get update RUN apt-get install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev git RUN apt-get install -y nginx nodejs curl libpq-dev RUN git clone https://github.com/sstephenson/rbenv.git /root/.rbenv RUN git clone https://github.com/sstephenson/ruby-build.git /root/.rbenv/plugins/ruby-build ENV PATH /root/.rbenv/bin:/root/.rbenv/shims:$PATH ENV CONFIGURE_OPTS --disable-install-doc RUN rbenv install 2.1.3 RUN rbenv global 2.1.3 RUN rbenv init - RUN echo 'gem: --no-rdoc --no-ri' >> /root/.gemrc RUN gem install bundler RUN rbenv rehash RUN echo "daemon off;" >> /etc/nginx/nginx.conf RUN rm -rf /etc/nginx/sites-enabled/default ADD exampleapp.conf /etc/nginx/sites-enabled/exampleapp.conf WORKDIR /tmp ADD Gemfile Gemfile ADD Gemfile.lock Gemfile.lock RUN bundle install ADD ./ /var/www/exampleapp WORKDIR /var/www/exampleapp RUN chmod +x entrypoint.sh EXPOSE 80 ENTRYPOINT ./entrypoint.sh
  18. 18. 리다이렉션 활용 printf를 활용하여 자동으로 설정 값 적용 파이프 활용 변수 처리 #!/bin/bash echo "export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe" > /etc/profile.d/oracle.sh echo "export ORACLE_SID=XE" >> /etc/profile.d/oracle.sh echo "export PATH=$PATH:/u01/app/oracle/product/11.2.0/xe/bin" >> /etc/profile.d/oracle.sh source /etc/profile.d/oracle.sh printf 8080n1521n$ORACLE_PASSWORDn$ORACLE_PASSWORDnn | /etc/init.d/oracle-xe configure echo "root:$ORACLE_PASSWORD" | chpasswd /usr/sbin/sshd -D
  19. 19. sed로 설정 파일 수정 FROM ubuntu:14.04 RUN cd /etc/apt && sed -i 's/archive.ubuntu.com/ftp.daum.net/g' sources.list && sed -i 's/archive.ubuntu.com/ftp.daum.net/g' sources.list.d/proposed.list RUN apt-get update RUN apt-get install -y nginx
  20. 20. 변수 처리 한 줄을 여러 줄로 표현 [Unit] Description=Announce Web BindsTo=web.service [Service] EnvironmentFile=/etc/environment ExecStart=/bin/sh -c "while true; do etcdctl set /services/web/nginx '{ "host": "${COREOS_PUBLIC_IPV4}", "port": 80 }' --ttl 60; sleep 45; done" ExecStop=/usr/bin/etcdctl rm /services/web/nginx [X-Fleet] MachineOf=web.service
  21. 21. "가장 빨리 만나는 Docker" 출간 및 원고 공개 http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book
  22. 22. "아마존 웹 서비스를 다루는 기술" 출간 및 원고 공개 http://www.pyrasis.com/private/2014/09/30/publish-the-art-of-amazon-web-services-book

×