이 포스트는 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 | docker run -it ubuntu:16.04 bash |
또 다른 터미널을 실행하여 작성
1 | docker ps |
diff와 commit 명령어
docker diff : 이미지의 변동사항을 확인할 수 있는 명령어
docker commit : Base Image 에 추가 구성사항을 더하여 새로운 이미지로 생성
Dockerfile로 이미지 만들기
Dockerfile : 이미지 생성 과정을 기술한 Docker 전용 DSL
Dockerfile을 원하는 디렉토리에 만들어보자.
1 | touch Dockerfile |
ubuntu 16.04 Base Image에 git을 설치하자
1 | FROM ubuntu:16.04 |
컨테이너는 반드시 상호작용 상태에서 작동되서는 안된다.
따라서 -y 옵션을 줘야 상호작용을 요구하지 않으며, 정상적으로 실행이 된다.
위 방법대로 진행 후 git2 라는 버전이름을 갖춘 이미지를 생성해보자.
1 | cat Dockerfile |
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 사이트이다.
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 |