레이어 저장 방식
- Union File System을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용가능하게함
이미지 경로
- 이미지는 URL 방식으로 관리하며 태그를 붙일 수 있음
Dockerfile
- DSL(Domain-Specific Language) 이용하여 이미지 생성 과정 기술
Docker Hub
- 공개 이미지 저장소(무료) - github와 유사
user1
을 docker 그룹에 추가docker version : 설치되어있는 도커의 버전 정보 출력
docker run [OPTION] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] : 도커 이미지 실행(컨테이너 생성)
- options
- -d: detached mode(백그라운드 모드)
- -p: 호스트와 컨테이너의 포트를 연결(포워딩)
- -v: 호스트와 컨테이너의 디렉토리를 연결(마운트) -> 연결 후엔 컨테이너 제거해도 데이터 유지
- -e: 컨테이너 내에서 사용할 환경변수 설정
- -name: 컨테이너 이름 설정
- -rm: 프로세스 종료시 컨테이너 자동 제거
- -it: -i와 -t를 동시에 사용한 것으로 터미널(키보드) 입력을 위한 옵션
- -link: 컨테이너 연결[컨테이너명:별칭]
docker ps [OPTIONS] : 실행중인 컨테이너 목록 출력
- -a, --all: 실행중이지 않은 컨테이너도 포함
- docker stop [OPTIONS] CONTAINER [CONTAINER...] : 실행중인 컨테이너를 하나 또는 여러개(space로 구분) 중지
- docker ps 명령어에서 확인할 수 있는 컨테이너 ID로 식별
docker rm [OPTIONS] CONTAINER [CONTAINER...] : 종료된 컨테이너를 하나 또는 여러개 제거(컨테이너 ID로 식별)
- tip: docker rm -v $(docker ps -a -q -f status=exited) - 현재 중지 상태인 컨테이너 ID를 가져와서 한번에 제거
docker images [OPTIONS] [REPOSITORY[:TAG]] : 도커가 다운로드한 이미지 목록 출력
docker pull [OPTIONS] NAME[:TAG|@DIGEST] : 이미지를 다운로드
- 이미 다운받았던 같은 태그의 이미지는 최신버전으로 다시 다운받음
docker rmi [OPTIONS] IMAGE [IMAGE...]
- docker images 명령어로 확인할 수 있는 이미지 ID로 식별
docker logs [OPTIONS] CONTAINER
- options
- -f : 대상 컨테이너에 대한 실시간 로그 출력
- --tail [number] : 대상 컨테이너에 대한 로그 중 최근 [number]개 출력
이미지 빌드용 DSL(Domain-Specific Language) 파일
일반적으로 소스와 함께 관리
기본 명령어
- FROM : 베이스 이미지 지정
- 형식: FROM :
- ex) FROM ubuntu:16.04
- **MAINTAINER** : Dockerfile을 관리하는 사람의 이름 또는 이메일 정보
- 형식: MAINTAINER <name>
- ex) MAINTAINER noone@noone.com
- **COPY** : 파일이나 디렉토리를 이미지로 복사 -> 일반적으로는 소스를 복사하는데 사용 (target 디렉토리가 없다면 자동생성)
- 형식: COPY <src> <dest>
- ex) COPY ./my_script.sh /home/noone/my_script.sh
- **ADD** : COPY와 유사하나 src에 파일 대신 URL 입력 가능, 압축파일 입력 시 자동으로 압축 해제하면서 복사
- 형식: ADD <src> <dest>
- ex) ADD ./my_script.sh /home/noone/my_script.sh
- **RUN** : 명령어를 그대로 실행, 내부적으로 /bin/sh -c 뒤에 명령어를 실행하는 방식
- 형식: RUN <command>
- 형식: RUN ["executable", "param1", "param2"]
- ex2) RUN bundle install
- **CMD** : 도커 컨테이너가 실행되었을 때 실행할 명령어 정의
- 형식: CMD ["executable", "param1", "param2"]
- 형식: CMD command param1 param2
- ex) CMD bundle exec ruby app.rb
- 주의사항: 여러 개 CMD 존재하면 가장 마지막 CMD만 실행됨, 여러 개의 프로그램 실행을 원한다면 run.sh 파일을 작성하여 데몬으로 실행하거나 supervisord나 forego와 같은 여러 개의 프로그램을 실행하는 프로그램 사용
- **WORKDIR** : RUN, CMD, ADD, COPY 등이 이루어질 기본 디렉토리 설정, 각 명령어의 현재 디렉토리는 한줄 한줄마다 초기화되기 때문에 RUN cd /path를 실행하더라도 다음 명령어에서는 다시 위치가 초기화됨. 같은 디렉토리에서 계속 작업하기 위해서 WORKDIR 사용
- 형식: WORKDIR /path/to/workdir
- **EXPOSE** : 도커 컨테이너 실행 후에 요청을 기다리고 있는(Listen) 포트 지정 (여러개 포트 지정 가능)
- 형식: EXPOSE <port> <port> ...
- ex) EXPOSE 4567
- **VOLUME** : 컨테이너 외부에 파일 시스템을 마운트할 때 사용 (반드시 지정하지 않아도 마운트할 수 있지만 기본적으로 지정하는 것이 좋음)
- 형식: VOLUME ["/data"]
- **ENV** : 컨테이너에서 사용할 환경변수 지정(컨테이너 실행 시 -e옵션 사용하면 기존 값을 오버라이딩)
- 형식1: ENV <key\> <value\>
- 형식2: ENV <key\>=<value\> ...
- ex) ENV DB_URL mysql
Docker build
- docker build [OPTIONS] PATH | URL | -
- ex) docker build -t app .(Dockerfile이 있는 디렉토리)
도커 정리글 감사합니다 :)
도커에 관심있던 참이라 도움이 될 것 같습니다!!
참고링크도 감사합니다 ㅎㅎ