0%

T아카데미 토크ON세미나 19차 '컨테이너 기반 가상화 플랫폼 도커(Docker)의 이해' : 3강 이미지 만들고 배포하기

이 포스트는 2018년 1월 17일 수요일에 진행됐던 세미나 강의 영상을 시청하고 작성했습니다.
세미나 강의는 이 곳을 눌러 시청하실 수 있습니다.

노트 필기식으로 작성한 내용이기에, 존댓말을 사용하지 않은 점 참고하시기 바랍니다.

* 발표자 : 김대권 (Docker Meetup Seoul 운영자) 님


구성요소

Base Image

  • 초기
    rootfs + Base Image 로 구성.

  • Run 실행 후
    rootfs + Base Image + Install xxx (Container에 구성요소 추가)

Custom Image

  • Base Image + Container 구성요소 + Commit
    rootfs + Base Image + xxx

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

명령어로 이미지 생성하기

실습

1
2
3
docker run -it ubuntu:16.04 bash
# apt-get update
# apt-get install -y git

또 다른 터미널을 실행하여 작성

1
2
3
4
5
6
7
docker ps
docker diff <CONTAINER_ID>

# git 이라는 version으로 태그한 ubuntu image가 생성된다.
docker commit <CONTAINER_ID> ubuntu:git

docker run -it ubuntu:git bash

diff와 commit 명령어
docker diff : 이미지의 변동사항을 확인할 수 있는 명령어
docker commit : Base Image 에 추가 구성사항을 더하여 새로운 이미지로 생성


Dockerfile로 이미지 만들기

Dockerfile : 이미지 생성 과정을 기술한 Docker 전용 DSL

Dockerfile을 원하는 디렉토리에 만들어보자.

1
2
touch Dockerfile
vi Dockerfile

ubuntu 16.04 Base Image에 git을 설치하자

1
2
3
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y git

컨테이너는 반드시 상호작용 상태에서 작동되서는 안된다.
따라서 -y 옵션을 줘야 상호작용을 요구하지 않으며, 정상적으로 실행이 된다.

위 방법대로 진행 후 git2 라는 버전이름을 갖춘 이미지를 생성해보자.

1
2
cat Dockerfile
docker build -t ubuntu:git2 .

Dockerfile 작성시 알아야할 명령어

FROM

Base Image 지정을 의미한다.
FROM <Base Image 이름>

1
FROM ubuntu:git

ADD

파일 추가
ADD <추가할 파일> <파일이 추가될 경로>

현재 Directory에 있는 내용들이 Dockerfile로 추가할 수 있다.

RUN

원하는 명령어 실행
RUN <명령어>

1
RUN apt-get install -y git
  • 단, Interactive 내용이 있을 경우 Build가 되지 않는다.

WORKDIR

작업 디렉터리 변경 (cd 명령어와 유사)

1
WORKDIR /tmp

ENV

환경변수 기본값 지정
ENV AWESOME_VAR FOOVAR

1
ENV JAVA_HOME=/opt/jdk/current

EXPOSE

컨테이너로 실행시 노출시킬 포트를 선언한다
EXPOSE <포트 번호>

Docker 가 자동으로 내부 포트를 개방시킨다.

  • 단, -p 옵션을 사용하여 반드시 외부에서도 접근을 허용토록 설정해야한다.
1
EXPOSE 8080 22

CMD

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

1
CMD /bin/bash

Docker Hub

  • Docker Hub는 Docker에서 공식으로 제공하는 Docker Registry 사이트이다.

    https://hub.docker.com

docker tag

1
docker tag wgtech/docker_tutorial:latest wgtech/docker_rename:latest
  • docker_tutorial:latest 태그의 이미지 손실 없이, docker_rename:latest 태그의 이미지가 추가된다.

docker login

터미널 시스템과 Docker Registry 동기화

docker push

생성된 이미지를 Docker Registry로 업로드.

1
docker push wgtech/docker_tutorial:latest

docker rmi

Local에서 생성된 이미지를 제거

docker pull

Docker Registry에 업로드 되어 있는 이미지를 내려받는 명령어

1
docker pull wgtech/ubuntu:latest