Dockerfile 기본 사용법 - 2

SummerToday·2024년 2월 9일

도커, 서버 기술

목록 보기
14/34
post-thumbnail

ENTRYPOINT

ENTRYPOINT는 컨테이너가 반드시 실행해야 하는 명령어를 기입할 때 사용한다.
다른 방법들로 기입되는 CMD 명령어보다 우선 순위가 높아 덮어 씌워지지 않는다.

  • docker run 시에 넣어지는 명령은 ENTRYPOINT에 작성된 명령의 인자로 넣어지게 된다.
    (ENTRYPOINT에 기입된 명령어 바로 뒤에 docker run 시에 기입된 명령어가 바로 붙어서 실행.)

  • ENTRYPOINT에는 반드시 실행되는 명령어를 기입하고, 별도로 각 컨테이너 생성시 필요한 인자는 docker run에 기입하는 식으로도 활용 가능하다.

    • Dockerfile 작성 예시

      FROM httpd:alpine
      LABEL maintainer="qlql7748@gmail.com"
      LABEL version="1.0.0"
      LABEL description="A test docker image to understand Docker"

      COPY ./2021_DEV /usr/local/apachweb2/htdocs

      ENTRYPOINT ["/bin/sh"]

    • 이미지 생성

      docker build --tag [이미지 이름]

    • 컨테이너 실행
      docker run -dit -p 9999:80 --name [컨테이너 이름] [이미지 이름] -c httpd-foreground

    • 컨테이너와 이미지 조사하기

      docker inspect [이미지 이름]
      docker inspect [컨테이너 이름]

      이미지 구성의 Cmd는 null이고, ENTRYPOINT에만 명령어가 들어간다. 하지만 컨테이너의 구성의 Cmd에는 docker run 시 입력해준 명령어가 들어가있고, ENTRYPOINT에도 기존 Dockerfile에 기입한 명령어가 존재한다.


Run

이미지 생성시, 일종의 layer를 만들 수 있는 명령으로, 보통 베이스 이미지에 패키지(프로그램)를 설치하여, 새로운 이미지를 만들 때 주로 사용된다.

Docker는 이미지 생성시, 각 단계를 layer로 작성한다. 때문에 이미지의 특정 layer를 추가할 시 기존 이미지를 다시 다운받지 않아도 된다.

  • Dockerfile 작성 예시

    FROM httpd:alpine
    LABEL maintainer="qlql7748@gmail.com"
    LABEL version="1.0.0"
    LABEL description="A test docker image to understand Docker"

    COPY ./2021_DEV /usr/local/apachweb2/htdocs

    RUN apt-get update # 패키지 정보 업데이트
    RUN apt get install -y apache2 apt-utils # apache2, apt-utils(설치 관련 유틸리티 프로그램) 설치

    ENTRYPOINT ["/bin/sh"]

    • -y : 설치 중간의 y/n 응답에 y로 응답하는 옵션.

    • 설치하고자 하는 패키지들은 한칸씩 띄고 기입해주면 된다.

EXPOSE

Docker 컨테이너의 특정 포트를 외부에 오픈하는 설정. 컨테이너들 간의 연결을 위해서도 사용된다.

하지만 EXPOSE는 컨테이너 생성시, 특정 포트를 외부에 오픈하는 역할만 하므로, 독립적으로 EXPOSE 옵션을 넣는다 해서, 호스트 pc에서 해당 컨테이너에 포트 번호로 접속할 수 있는 것은 아니다.

컨테이너의 특정 포트를 외부에 오픈하고, 해당 포트를 호스트 PC의 특정 포트와 매핑 시키려면 docker run -p 옵션을 사용해야 한다.

  • 대문자 P 옵션 사용시, EXPOSE로 오픈된 포트에 호스트 pc의 랜덤 포트가 매핑된다.

    docker run -P -d myweb


ENV

컨테이너 내에의 환경변수를 설정하는 명령어이다.
설정한 환경변수는 RUN, CMD, ENTRYPOINT 명령에도 적용된다.

  • Dockerfile 작성 예시

    FROM mysql:5.7 # 5.7 버전이 가장 안정적.

    ENV MYSQL_ROOT_PASSWORD=1234
    ENV MYSQL_DATABASE=db

    • 이미지 작성

      docker build --tag mysqldb -f Dokcerfile_MYSQL .

    • 컨테이너 생성 후 실행

      docker run -d --name mydb mysqldb

    • 컨테이너 접속 후 실행

      docker exec -it mydb /bin/bash

    • 이미지에서 설정한 패스워드 입력

      mysql -u root -p

    • mysql 내부에 데이터베이스가 잘 생성되었는 지를 확인

      show databases;

    • mysql 종료

      exit

    • 컨테이너 접속 종료

      exit


WORKDIR

RUN, CMD, ENTRYPOINT 명령이 실행될 디렉토리 설정

  • Dockerfile 작성 예시

    FROM httpd:alpine

    WORKDIR /usr/local/apache2/htdocs

    CMD /bin/cat index.html # cat 실행 파일은 /bin 내에 존재.

    • 이미지 생성

      docker build --tag httpd -f Dockerfile_httpd .

    • 컨테이너 생성 후 백그라운드 실행

      docker run -d --name myhttpd httpd

    • 출력 결과 확인 (cat index.html 실행 결과)

      docker logs myhttpd




해당 글은 다음 강의의 내용을 참고한 글임을 밝힙니다. 자세한 내용은 다음 강의에서 확인해볼 수 있습니다. 인프런, 잔재미 코딩, ⌜풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]⌟
profile
블로그 이관했습니다.

0개의 댓글