앞서 설명한 Dockerfile 명령어에 대해 깊게 이해하기
- LABEL은 [key]=[value] 형식으로 메타 데이터를 넣을 수 있는 기능
- 작성자, 버전, 설명, 작성일자 등을 넣음
# Dockerfile FROM httpd:alpine LABEL maintainer="test@gmail.com" LABEL version="1.0.0" LABEL description="test dockerfile description"
- 지정한 디렉토리 복사
- test_doc경로에 있는 파일을 이미지 내부 htdocs 디렉토리로 복사
# Dockerfile COPY ./test_doc /usr/local/apache/htdocs
- CMD 명령어 작성 방법으로는 세가지가 있지만 대표적인 방법만 설명
- CMD 명령은 하나만 작성. 여러개 작성 하더라도 마지막 CMD만 적용
- CMD 명령은 FROM에 설정한 이미지의 기본 CMD 명령을 덮어씌운다
- [중요] 하지만 터미널 명령 즉 run 명령어에 포함시킨 CMD 명령은 Dockerfile 설정 CMD 명령어를 덮어 씌운다
# Dockerfile CMD ["executable", "param1", "param2", ...] CMD ["/bin/sh", "-c, "echo", "Hello World"]
- 이미지에 명령어를 고정시킨다.
- ENTRYPOINT는 CMD 명령어를 인자가진다.
# Dockerfile ENTRYPOINT ["bin/echo", "hello"]
- 이해하기
Dockerfile에 echo 로 hello라는 명령어를 입력하고 build 후
docker run -dit -p testweb /bin/sh World 를 입력하게되면
결과는 "hello /bin/sh World" 라고 나온다.
즉 /bin/sh가 명령어는 ENTRYPOINT를 덮어씌우지 못하고, 명령어로 인지되는게 아니라 인자로 인지되어 hello 뒤에 텍스트로 인식되어 출력된다.
- 이미지들은 여러 패키지들을 설치해 만든 것
- 이 여러 패키지에 원하는 패키지를 더해 이미지를 생성할 수 있게 해준다.
- ubuntu에 apache서버를 설치해 이미지로 만들고 싶다면
# Dockerfile FROM ubuntu RUN apt-get update RUN apt-get install -y apache # -y 는 설치 중 y/n 가 나오면 무조건 y로 설치
- 컨테이너 내부 특정 포트를 open
- docker-compose 에서 이미지 끼리 내부 통신 할 때 주로 사용
- 외부에서 포트로 접속 할 때는 -p 옵션으로 접속
# Dockerfile 80port open EXPOSE 80
- 환경변수 설정
- 예를 들어 MYSQL 설치 시 패스워드와 데이터베이스 설정
# Dockerfile FROM mysql ENV MYSQL_ROOT_PASSWORD=1234 ENV MYSQL_DATABASE=testdb
- RUN, CMD, ENTRYPOINT 명령이 실행 될 디렉토리 설정
# Dockerfile FROM httpd:alpine WORKDIR /usr/local/apache/htdocs CMD /bin/cat index.html
- 컨테이너 에러 또는 출력 결과 확인
docker logs {container ID or NAME}
- 컨테이너 즉시 중지
- stop은 실행중인 단계가 끝난 후에 중지하지만 kill은 즉시 중지
docker kill {container ID or NAME}
참조자료 : 잔재미코딩님의 docker 강의