반갑습니다!
이번 포스트에서는 EXPOSE 명령어부터 살펴보도록 하겠습니다 ^^
EXPOSE 명령어는 docker 컨테이너의 특정 포트를 외부에 오픈하는 설정입니다
지금까지 주로 $ docker run 명령시 -p 옵션을 통해서 설정을 했었는데요
docker run -p 옵션은 컨테이너의 특정 포트를 외부에 오픈하고,
해당 포트를 호스트 PC의 특정 포트와 매핑을 시키는 기능을 합니다 ^^
주로 다음과 같은 예시 코드를 사용했었는데요
$ docker run -p 9999: 80 ~
호스트 PC의 9999번 포트로 접근한 데이터 패킷을 컨테이너의 80번 포트로 전달해주는 것까지
-p 옵션 하나로 해결이 되었던 것이었습니다 ^^!!
이에 반해 EXPOSE는 컨테이너 생성시 특정 포트를 외부에 오픈하는 것만 설정을 하는 것입니다
따라서 독립적으로 실행시 EXPOSE 옵션만 넣는다고 해서
호스트 PC에서 해당 컨테이너의 포트 번호로 접속할 수 있는 것은 아닙니다 ^^
특정 포트 개방 여부의 문제 자체가
포트 포워딩 여부와는 별개의 문제인 것과 같은거죠 ^^!
포트를 개방 및 매핑을 해서 외부에서 컨테이너 내부로 접근할 때에는 -p 옵션을 사용하지만,
컨테이너와 컨테이너끼리의 네트워킹을 위해서 포트를 개방할 때에
주로 EXPOSE 명령어를 사용한다고 예시로 이해하시면 될 것 같습니다 ^^
나중에 Docker Compose에 관련된 내용도 살펴볼텐데요
이 때 여러 컨테이너들끼리 서로 통신 및 접속할 수 있도록 사용할 때에도 이용합니다 ^^
vi 에디터를 이용해서 Dockerfile을 하나 작성해보겠는데요
EXPOSE 명령어를 이용해서 80번 포트를 열어주겠습니다 ^^
해당 Dockerfile로 이미지를 빌드하고 $ docker inspect로 상세 정보를 조회해보니
ExposedPorts 부분에 80/tcp라는 정보가 표기되어 있습니다 ^^
하지만 EXPOSE 명령어는 포트를 열어주기만 할 뿐,
외부 호스트PC와 매핑되어 있지는 않은데요
docker run 명령어 실행시 -P 옵션을 이용하면 외부 호스트 PC와 매핑을 해줄 수 있습니다 ^^
다만 랜덤하게 매핑 되기 때문에 EC2 인스턴스를 사용 중일 경우,
해당 포트에 대해 항상 인바운드 규칙 편집을 추가해줘야 하는 불편함이 생겨버리죠 ^^;;
그 다음은 ENV 명령어입니다
이 명령어는 컨테이너 내의 환경변수를 설정할 때 사용하는데요 ^^
설정한 환경변수는 RUN, CMD, ENTRYPOINT 명령에도 적용이 됩니다 !
vi 에디터를 이용해서 예시를 위한
새로운 Dockerfile을 한 번 작성해보겠습니다 ^^
ENV 명령어를 이용해서
MySQL 실행시 이용할 패스워드와 데이터베이스 이름을 지정해주겠습니다 ^^
해당 dockerfile로 이미지를 빌드한 다음에,
마찬가지로 docker run 명령어로 컨테이너를 실행시킨 뒤,
$ docker exec로 접근했습니다
프롬프트 기호가 바뀐 것이 보이시죠? ^^
mysql 명령어를 이용해서 root 유저로 로그인 했습니다 ^^
show databases; 명령어로 데이터베이스를 조회하니,
아까 지정한 데이터베이스의 이름이 목록에 나타나는 것이 보입니다 ^^
그 다음은 WORKDIR 명령어입니다
RUN, CMD, ENTRYPOINT 명령이 실행될 디렉토리를 설정하는 기능입니다 ^^
이미지 안에서 특정 폴더로 실행 폴더를 이동하기 위해서 종종 사용합니다 !
이번에도 해당 명령어를 시험해보기 위해
dockerfile을 새로 작성해보겠습니다 ^^
docker 파일로 이미지를 빌드한 다음에 컨테이너를 생성하였습니다
근데 컨테이너가 생성되자마자 STATUS가 Exited 상태가 되었네요
그도 그럴것이, ENTRYPOINT 또는 CMD 부분에 httpd-foreground 명령어를 기재하지 않았습니다 ^^
단순히 index.html을 화면에 출력하는 명령어만 기재해놨기 때문에
웹 서버로서 기능을 할 수 없어서 컨테이너가 실행되자마자 종료상태가 된 것이죠 ^^
로그를 한 번 찍어보면 CMD를 설정한대로
index.html의 내용이 출력된 것을 확인할 수 있겠습니다 ^^
이렇게 dockerfile에 대한 내용들을 살펴보았는데요
주요 명령어 및 참고 명령어들을 여러개 알아보았습니다 ^^
포스트 읽어주셔서 감사드리고
다음 포스트에 이어서 도커에 관련된 내용들을 더 알아보도록 하겠습니다 !
'Docker > Docker file 사용법 익히기' 카테고리의 다른 글
[Docker File 익히기] 5. ENTRYPOINT와 RUN 명령어 사용해보기 (0) | 2024.08.14 |
---|---|
[Docker File 익히기] 4. docker logs, kill 명령어와 CMD 변경 사용해보기 (0) | 2024.08.14 |
[Docker File 익히기] 3. LABEL과 COPY 명령어, docker inspect 사용해보기 (0) | 2024.08.14 |
[Docker File 익히기] 2. FROM 명령어와 docker build의 --tag, -f, --pull 옵션 사용해보기 (0) | 2024.08.14 |
[Docker File 익히기] 1. docker file 작성시 사용되는 주요 명령어 소개 (0) | 2024.08.14 |