Network/Docker

[Network | Docker] 컨테이너 외부 노출

이주여이 2024. 6. 30. 21:32

1. 호스트 포트와 바인딩할 컨테이너 생성하기

Ubuntu

docker pull ubuntu:latest # ubuntu 최신 버전 다운로드
docker images # 다운로드한 이미지 확인

docker run -it --name ubuntu -p 80:80 ubuntu:latest

apt-get update
apt-get install apache2 -y # apache 설치
service apache2 start # apache 실행

 

Rocky Linux

docker pull rockylinux:9.3 # ubuntu 최신 버전 다운로드
docker images # 다운로드한 이미지 확인

docker run -it --privileged --name rockylinux -p 8081:80 rockylinux/rockylinux /usr/sbin/init

docker exec -it rockylinux /bin/bash # shell 모드 접속

yum install httpd
systemctl start httpd
systemctl status httpd
systemctl enable httpd
  • -i - interactive / 표준 입력을 활성화하여 사용자가 컨테이너와 상호 작용할 수 있게 도와준다.
  • -t - 가상 터미널을 할당하여 shell 모드 진입을 도와준다.
  • -d - 컨테이너를 백그라운드에서 실행시킨다.
  • --privileged - 컨테이너 내부 주요 자원에 접근할 수 있다.
  • --name - 컨테이너에 특정 이름을 부여한다.
  • -p
    • -p ${호스트 포트 }: ${컨테이너 포트}
    • 컨테이너의 포트를 호스트의 포트와 바인딩해 연결할 수 있는 속성
    • (예) -p 3307:3307 -p 192.168.56.103:80:80
    • 만약 여러 개의 포트를 외부에 개방하려면 -p 옵션을 여러 번 설정하면 된다.
  • exec - docker 컨테이너 내 특정 명령을 입력하거나 shell에 접근할 수 있다.
  • /usr/sbin/init - 컨테이너 띄울 때 함께 실행한다. 해당 옵션과 --privileged 옵션이 함께 사용되어야 systemctl 이 동작한다.

 

이후 모든 컨테이너들을 확인하면 아래와 같이 나타난다.

3. URL 접속

${호스트 PC(도커를 설치한 가상 서버)의 IPv4 }:${컨테이너 생성 시 바인딩한 port 번호 } 를 입력해주면 아래와 같이 출력된다.

 

Ubuntu - 192.168.56.103:80

 

Rocky Linux - 192.168.56.103:8081


참고 레퍼런스

https://coding-orca.tistory.com/7