개발강의정리/DevOps

[도커(Docker)의 이해] 3. 이미지 만들고 배포하기

nineDeveloper 2019. 10. 7.
728x90

컨테이너 기반 가상화 플랫폼 '도커(Docker)'의 이해

포스팅 참조 정보

해당 포스팅 참고 토크ON세미나 강의 링크

https://www.youtube.com/playlist?list=PLinIyjMcdO2S_Ojp_qK7EaZpxr3M3xprT

 

Docker의 이해 - YouTube

 

www.youtube.com

https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=125

 

컨테이너 기반 가상화 플랫폼 ‘도커(Doker)’의 이해 | T아카데미 온라인강의

본 강의는 2018.1.17(수)에 진행된 제19차 토크ON세미나 동영상입니다. 도커는 빠르게 인기를 얻고 있는 컨테이너 기반의 오픈소스 가상화 플랫폼으로 개발과 테스트,..

tacademy.skplanet.com

실습 Version 정보

  • Ubuntu 18.04
  • Docker Version: 19.03.2

3강 이미지만들고 배포하기

컨테이너를 이미지로 저장하기 Git

  • 특정 프로세스를 실행하기 위한 환경
    • 계층화된 파일 시스템
    • 이미지는 파일들의 집합
    • 프로세스가 실행되는 환경도 결국 파일들의 집합

이미지 제작 실습

  1. Base Image 생성
  2. Container 에 Git설치
  3. Git이 설치된 컨테이너를 커스텀 이미지로 저장

컨테이너 작업내용 초기화

컨테이너를 실행하고 파일을 생성한뒤 exit로 빠져나가면 생성된 파일이 모두 사라짐

$ docker run -it ubuntu:latest bash
$ cd root
$ touch a.txt b.txt c.txt
$ exit
$
$ docker run -it ubuntu:latest bash 

Git 설치하기

$ docker run -it ubuntu:latest /bin/bash

업데이트 과정 보여주지 않기

apt-get update &> /dev/null
$ brew
$ git --version

docker diff

다운받은 이미지로부터 어떠한 변경사항이 있는지 보여줌

$ docker diff $CONTAINER

docker commit

선택한 컨테이너를 이미지로 생성

$ docker commit $CONTAINER $IMAGE_NAME:$TAG_NAME

Dockerfile로 이미지 만들기

Dockerfile 만들기

  • FROM: 베이스 이미지
  • RUN: 빌드시 도커 컨테이너 내에서 실행되는 명령어
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y git

hash sum mismatch 오류 발생시 아래의 내용으로 Dockerfile을 만들고
build시 다른 이미지명과 태그명으로 생성

FROM ubuntu:latest
RUN apt-get clean
RUN rm -r /var/lib/apt/lists/*
# The blog below also recommends to change your compression
RUN apt-get update -o Acquire::CompressionTypes::Order::=gz
RUN apt-get install -y git

Dockerfile Build

$ docker build -t $IMAGE_NAME:$TAG_NAME $DOCKERFILE_PATH

FROM

베이스 이미지 지정

FROM $IMAGE_NAME

ADD

파일추가
Dockerfile이 있는 현재 디렉토리에 있는 파일을 Docker 컨테이너 안에 추가 시킬 수 있음
Dockerfile이 있는 경로 외부에 있는 경로의 파일은 접근할 수 없음

ADD $ADD_FILE $ADD_PATH

예시

ADD data.txt /tmp/data.txt

RUN

명령어 실행

RUN $command

예시

RUN apt-get install -y git

WORKDIR

작업 디렉터리 변경
RUN 명령을 실행하는 디렉토리를 변경함

WORKDIR $DIRECTORY

예시

WORKDIR /tmp

ENV

환경변수 기본값 지정

ENV $ENVIRONMENT $VALUE

EXPOSE

컨테이너로 실행 시 노출시킬 포트
어플리케이션에서 사용할 포트
-p옵션으로 외부에서 사용할 포트는 반드시 지정해 주어야함

Docker가 자동으로 포트를 열어줌
Docker파일을 보고 이 포트를 사용하고 있다는 사실을 알려줌

EXPOSE $PORT

예시

EXPOSE 3000

CMD

이미지의 기본 실행 명령어 지정

CMD $COMMAND

예시

CMD /run.sh

Docker 이미지 원하는 이름으로 복사해서 만들기

docker tag $ORIGINAL_NAME $CHANGE_NAME

Ruby on Rails Application

git download 후 Dockerfile 로 Application 실행 예제

이미지를 만들어서 Application 실행

FROM ruby:2.3-slim
MAINTAINER freejava1191@gmail.com
# ADD 대신 COPY를 사용 현재 디렉토리의 Gemfile*을 복사해서 Docker /usr/src/app 디렉토리에 옮겨 놓음
COPY Gemfile* /usr/src/app/
WORKDIR /usr/src/app
# Appplication의 의존성 패키지를 설치
RUN bundle install
# 현재 디렉토리의 Application을 그대로 복사
COPY . /usr/src/app
# 포트를 4567 로 지정
EXPOSE 4567
# 서버를 실행하는 명령어
CMD bundle exec ruby app.rb -o 0.0.0.0
git source download
git clone https://github.com/nacyot/docker_tutorial.git
Docker build
docker build --force-rm=true -t freelife1191/docker-workshop-app:1 .
Docker run
docker run --rm -p 4567:4567 freelife1191/docker-workshop-app:1
Docker tag

push할 이미지 명으로 이미지 생성

docker tag freelife1191/docker-workshop-app:1 freelife1191/docker_tutorial:latest
Docker Hub
  1. Docker Hub에 계정생성
  2. Docker Hub Create Repository
    https://cloud.docker.com/repository/registry-1.docker.io/freelife1191/docker_tutorial
  3. Docker login
docker login
  1. Docker push
docker push freelife1191/docker_tutorial:latest
  1. Docker pull
docker pull freelife1191/docker_tutorial:latest
Test
ENDPOINT=https://workshop-docker-kr.herokuapp.com/ PARAM_NAME=freelife1191 PARAM_VERSION=2 PARAM_MESSAGE=message bundle exec ruby app.rb

Dockerfile 예제

FROM nacyot/ruby-ruby:latest

RUN apt-get update
RUN apt-get install -qq -y libsqlite3-dev nodejs
RUN gem install foreman compass

WORKDIR /app
RUN git clone https://github.com/nacyot/docker-sample-project.git /app
RUN git checkout v0.1
RUN bundle install --without development test

ENV SECRET_KEY_BASE hellodocker
ENV RAILS_ENV production
EXPOSE 3000
CMD foreman start -f Procfile
728x90

댓글

💲 추천 글