
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에 기입한 명령어가 존재한다.
이미지 생성시, 일종의 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"]
Docker 컨테이너의 특정 포트를 외부에 오픈하는 설정. 컨테이너들 간의 연결을 위해서도 사용된다.
하지만 EXPOSE는 컨테이너 생성시, 특정 포트를 외부에 오픈하는 역할만 하므로, 독립적으로 EXPOSE 옵션을 넣는다 해서, 호스트 pc에서 해당 컨테이너에 포트 번호로 접속할 수 있는 것은 아니다.
컨테이너의 특정 포트를 외부에 오픈하고, 해당 포트를 호스트 PC의 특정 포트와 매핑 시키려면 docker run -p 옵션을 사용해야 한다.
대문자 P 옵션 사용시, EXPOSE로 오픈된 포트에 호스트 pc의 랜덤 포트가 매핑된다.
docker run -P -d myweb
컨테이너 내에의 환경변수를 설정하는 명령어이다.
설정한 환경변수는 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
show databases;
exit
exit
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
docker logs myhttpd