TIL 2021-01-22 docker

­최상언·2021년 1월 22일
1

AWS

목록 보기
3/5

dockerfile

전혀 모르는 상태로 시작함.
docker는 push, pull, run, rm, rmi 정도만 해봤다.
근데 이제 내가 image를 빌드해야 하고.. 그러려면 file도 만들어야 하는 것 같은데..(멘붕)

일단 다른 dockerfile 들은 어떻게 생겼는지 먼저 봤다.
원래라면 dockerfile 기본 문법 .. 얘는 뭐고 쟤는 뭐고 .. 뭐는 꼭 필요하고 뭐는 optional 하고 .. 이런거 먼저 주파하고 직접 해봤을텐데, 시간이 없어서 좀 질러갔 는줄 알았는데, 결국 나에게는 이게 더 돌아가는 길이었다. 나는 이론 -> 예시 -> 테스트 순서로 공부하는 게 훨씬 효율적인 휴먼 다.

이 과정에서 알 수 있었던건
('<', '>'는 문법에 포함되지 않는다)


FROM

FROM <이미지명>:<버전>

어딘가에서 기존 docker image를 땡겨온다.
주로 OS를 가져오는데, 누군가의 custom 이미지를 가져오기도 하는 것 같다. 그걸 베이스로 더하고 빼고 한다.
아무것도 땡겨올 게 없으면 공란 대신 FROM scratch로 표기한다.


ADD

ADD <호스트파일> <이미지내에_파일이추가될_위치>

이미지를 빌드할 때 호스트의 파일을 포함시킨다.


RUN

# Shell Command 처럼 사용
RUN <command>
# exec 처럼 사용
RUN [<"executable", "param1", "param2", ...>]

도커파일이 이미지를 생성하는 과정에서 실행할 명령어.


CMD

# 일반적으로 많이 쓰는, exec 사용하듯 쓰기
CMD [<"executable", "param1", "param2", ...>]
# ENTRYPOINT 명령어의 기본 파라미터로 넘겨주는 방법.이라는데 뭔지 아직 잘 모름
CMD [<"param1">, <"param2">, ...]
# Shell Command 처럼 쓰기
CMD <커맨드 param1 param2>

도커파일로 빌드된 이미지가 컨테이너로 만들어지며 실행되는 첫 명령어.
하나의 도커파일에는 하나의 CMD 명령만 존재할 수 있음!


ENTRYPOINT

# 일반적으로 많이 쓰는, exec 사용하듯
ENTRYPOINT [<"executable", "param1", "param2", ...>]
# Shell Command 처럼 쓰기
ENTRYPOINT <커맨드 param1 param2>

컨테이너가 실행될 때 실행될 프로그램


이것도 사실 한번에 다 파악은 못했고, 중간중간 찾아가며 작성했다.
제일 헷갈렸던건 CMD랑 ENTRYPOINT의 관계, 우선순위, 정확한 용법 등등.
마침 간단 명료하게 정리해 둔 포스트가 있었음!

+ CMD & ENTRYPOINT

  • 하나의 도커파일은 최소한 둘👆🏻중 하나의 명령을 가지고 있어야 한다.
  • ENTRYPOINT는 실행 가능한 형태의 컨테이너(데몬 프로세스처럼?)로 만들 때 사용해야 한다..고?
  • CMD는 ENTRYPOINT가 실행 가능한 형태의 컨테이너로 동작할 때 - 기본 인자 설정 값으로 사용되거나,
  • 컨테이너 내에서 임시로 명령을 내릴 때 사용해야 한다.

또 다른 명령어들

COPY

COPY <원본_파일명> <이미지_내부에_복사해올_파일명>

이미지 생성시 호스트의 파일을 이미지 내부로 복사한다. 대개 설정 파일 등
정확한 문자열 대신 간단한 정규식도 받음. ~/* 이런거
ADD랑 모가 다른거지?

WORKDIR

USER

VOLUME

profile
배울게 많은 햇병아리 개발자

1개의 댓글

comment-user-thumbnail
2021년 1월 29일

정말 좋은 글이네요. 잘읽었어요

답글 달기