-
[Docker] 3. 이미지만들고 배포CLOUD/Docker 2021. 2. 23. 17:28반응형
https://subicura.com/2017/02/10/docker-guide-for-beginners-create-image-and-deploy.html
따라쳐보기 콘솔에서
- 도커는 이미지를 만들기 위해 Dockerfile이라는 이미지 빌드용 DSL (Domain Specific Language) 파일을 사용
Ruby 웹 어플리케이션 ubuntu에 배포하는 과정
- ubuntu 설치
- $ apt-get update
- ruby 설치
- $ apt-get install ruby
- $ gem install bundler
- 소스 복사
- $ mkdir -p /usr/src/app
- $ scp Gemfile app.rb root@ubuntu:/usr/src/app
- gem 패키지 설치
- $ bundle install
- sinatra 서버 실행
- $ bundle exec ruby app.rb
Dockerfile로 변경
#1. ubuntu 설치 (패키지 업데이트 + 만든사람 표시)
FROM ubuntu:16.04
MAINTAINER subicura@subicura.com
RUN apt-get -y update#2. ruby 설치
RUN apt-get -y install ruby
RUN gem install bundler#3. 소스 복사
COPY . /usr/src/app#4. Gem 패키지 설치 (실행 디렉토리 설정)
WORKDIR /usr/src/app
RUN bundle install#5. Sinatra 서버 실행 (Listen 포트 정의)
EXPOSE 4567
CMD bundle exec ruby app.rb -o 0.0.0.0- Docker build 이미지 빌드 명령어
docker build [OPTIONS] PATH | URL | -
$ docker build -t app . ( 생성할 이미지 이름 지정 -t )
Successfully built ... 보이면 된거
Dockerfile 기본 명령어 https://docs.docker.com/engine/reference/builder/
- FROM
- FROM <image>:<tag>
- 베이스 이미지 지정. 반드시 지정해야함
- MAINTAINER
- MAINTAINER <name>
- 빌드에 영향 주지는 않음. 관리하는 사람 정보 적어놓음
- COPY
- COPY <src> .. <dest>
- COPY . /usr/src/app
- 파일이나 디렉토리를 이미지로 복사 (일반적으로 소스 복사)
- ADD
- COPY와 비슷.
- src에 URL입력가능. src에 압축파일 입력하면 자동 압축 해제 및 복사
- RUN
- 명령어 그대로 실행
- CMD
- 도커 컨테이너가 실행되었을때 실행되는 명령어를 정의
- 마지막 cmd만실행되므로 여러개 실행하고싶을 땐 run.sh파일이나 데몬으로 실행
- WORKDIR
- 기본 디렉토리 설정 . 명령어에서만 하면 다음 줄엔 다시 초기화가 되기 때문
- EXPOSE
- EXPOSE <port> [<port>..]
- 도커 컨테이너가 실행되었을때 요청을 기다리고있는(Listen) 포트 지정 (여러개 가능)
- VOLUME
- 컨테이너 외부에 파일시스템을 마운트할때 사용. 지정하는것이 좋음
- ENV
- 컨테이너에 사용할 환경변수 지정
- 실행시 -e를 사용해 기존값오버라이딩
docker build 분석
- 디렉토리 파일들(build context)를 도커서버로 전송
- 임시컨테이너 생성 - 명령어 수행 - 이미지로 저장 - 임시컨테이너 삭제 - 새로운 이미지 기반 임시컨테이너 생성......
- 성공한 이미지 ID 출력
base image 사용
우분투 베이스에 ruby설치가 아니라 ruby이미지가 이미 존재함. nodejs, python, java도 마찬가지
build cache
이미 빌드한 이미지는 레이어로 저장해 다음 빌드에서 캐시로 사용
gemfile을 위에 둬서 먼저 복사하고 수정되는 부분을 뒤로 미루면 매번 새로 설치하지 않아도됨
명령어 최적화
-qq (quite)옵션으로 로그를 출력하지 않게 함
--no-doc / --no-ri옵션으로 패키지 설치시 문서파일도 생성 하지 않으며 최적화
같은 명령어는 && \ 로 묶어 쓰는것도 좋음.
최종
FROM ruby:2.3
MAINTAINER subicura@subicura.com
COPY Gemfile* /usr/src/app/
WORKDIR /usr/src/app
RUN bundle install --no-rdoc --no-ri
COPY . /usr/src/app
EXPOSE 4567
CMD bundle exec ruby app.rb -o 0.0.0.0
'CLOUD > Docker' 카테고리의 다른 글
[Docker] Dockerfile (0) 2021.08.10 [docker] 명령어 (0) 2021.07.19 [Docker] 2 설치.컨테이너 실행 (0) 2021.02.23 도커란 무엇인가 (0) 2021.02.23