Docker 입문 | 0. Docker


docker container ls

docker container ls 명령어을 실행했을 때 표시되는 항목에 대해 알아보도록 하자.

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2axaf8tx4gjd        registry            "/entrypoint.sh /etc…"   7 weeks ago         Up 7 weeks          0.0.0.0:5000->5000/tcp   devkuma-private-registry

실행중인 컨테이너 및 종료의 컨테이너를 표시하는 명령이다.

항목 내용
CONTAINER ID 컨테이너를 식별하기 위한 유일한 식별자
IMAGE 컨테이너를 만드는 데 사용한 Docker Image
COMMAND 컨테이너에서 실행되는 응용 프로그램 프로세스
CREATED 컨테이너 생성 후 후 경과 시간
STATUS Up (실행) Exited (종료) 등의 컨테이너의 실행 상태
PORTS 호스트 포트와 컨테이너 포트의 연결 관계 (포트 포 워 딩)
NAMES 컨테이너 이름

Dockerfile

Docker 이미지를 만들 때 반듯이 필요한 설정 파일이다. 이 파일에 작성된 지침을 인스트럭션(instruction) 이미지가 만들어진다.

기본적으로 Dcokerfile라는 이름을 사용하여 파일 이름을 변경하려면 Build시 추가 옵션을 주어야 한다. (-f)

인스트럭션(instruction)

FROM

  • 해당 Docker 이미지의 기본 이미지를 지정한다.

mysql을 지정하는 경우는 다음과 같다.

FROM mysql

COPY

  • 호스트 컴퓨터의 파일이나 디렉토리를 Docker 컨테이너에 복사한다.
  • 이미지가 Build 될 때 한 번만 실행된다.
COPY ./cnf/my.cnf /etc/mysql/conf.d/my.cnf

RUN

  • Docker 이미지를 Docker에서 실행하는 명령을 정의한다.
  • COPY와 마찬가지로 Build 될 때 한 번만 실행된다.
  • 특별한 지침이 없는 경우는 사용되지 않는다.

다음은 Test.java를 javac로 컴파일하고 있다.

RUN javac Test.java

ADD

기본은 COPY과 동일하며, 다음과 같은 기능이 추가로 있다.

  • source가 remote URL이면 다운로드 후 destination에 복사한다.
  • source가 자주 사용되고 있는 압축 파일 형식(zip 등)이면 압축을 풀어준다.
  • source가 remote URL + 압축 파일 형식인 경우 압축을 풀지 않는다.

CMD

  • 컨테이너에서 실행하는 프로세스 (명령)을 지정한다. 이것은 이미지를 실행할 때마다 실행되는 명령이다.
  • CMD는 Dockerfile에 하나만 만들 수 있다. 여러개를 만들 때 맨 마지막에있는 명령만 실행된다.

다음은 mysqld를 실행하고 있다.

CMD ["mysqld"]