사용자 정의 네트워크 생성 및 Apache 웹 서버 배포
이 단계에서는 컨테이너에 대한 사용자 정의 네트워크를 생성하고 Apache 웹 서버를 배포합니다. Podman 은 기본 네트워크를 제공하지만, 사용자 정의 네트워크를 사용하는 것이 가장 좋은 방법입니다. 이는 더 나은 격리를 제공하며, 가장 중요한 것은 컨테이너 간의 자동 DNS 확인을 가능하게 합니다. 이를 통해 컨테이너는 변경될 수 있는 IP 주소를 사용하는 것보다 더 안정적인 이름을 사용하여 서로 통신할 수 있습니다.
먼저, 애플리케이션을 위한 사용자 정의 브리지 네트워크를 생성해 보겠습니다. 이름을 webapp-network로 지정합니다.
podman network create webapp-network
이 명령은 새로 생성된 네트워크의 이름을 출력합니다.
webapp-network
Podman 네트워크를 모두 나열하여 사용자의 네트워크가 성공적으로 생성되었는지 확인할 수 있습니다.
podman network ls
기본 네트워크와 함께 목록에 webapp-network가 표시되어야 합니다.
NETWORK ID NAME DRIVER SCOPE
...
f1e2d3c4b5a6 webapp-network bridge local
...
다음으로, 이 새 네트워크에서 mariadb_server 컨테이너를 다시 생성해야 합니다. 이 환경의 네트워크 백엔드 구성으로 인해 기존 컨테이너를 새 네트워크에 연결할 수 없습니다. 대신, 새 네트워크 구성으로 컨테이너를 중지하고 다시 생성합니다.
실행 중인 mariadb_server 컨테이너를 중지합니다.
podman stop mariadb_server
중지된 컨테이너를 제거합니다.
podman rm mariadb_server
이제 새 네트워크로 MariaDB 컨테이너를 다시 생성합니다. 이 명령은 이전 단계의 명령과 유사하지만, --network webapp-network 플래그가 추가되었습니다.
podman run -d \
--name mariadb_server \
--network webapp-network \
--userns=keep-id \
-e MARIADB_ROOT_PASSWORD=supersecret \
-e MARIADB_DATABASE=webappdb \
-e MARIADB_USER=webappuser \
-e MARIADB_PASSWORD=userpass \
-v $(pwd)/mariadb_data:/var/lib/mysql:Z \
mariadb:10.6
이제 웹 서버를 배포해 보겠습니다. 공식 Apache httpd 이미지를 사용합니다. 먼저, 웹사이트 파일을 저장할 호스트에 디렉토리를 생성합니다.
mkdir ~/project/webapp_content
이 새 디렉토리에 간단한 index.html 파일을 생성합니다. 이것이 웹 애플리케이션의 홈페이지가 됩니다.
echo "<h1>Welcome to My Web App</h1>" > ~/project/webapp_content/index.html
Apache 컨테이너가 파일에 액세스할 수 있도록 웹앱 콘텐츠 디렉토리에 대한 올바른 권한을 설정합니다.
chmod 755 ~/project/webapp_content
이제 Apache httpd 컨테이너를 실행합니다. webapp-network에 연결하고 webapp_content 디렉토리를 볼륨으로 마운트합니다. 이렇게 하면 웹 서버가 방금 생성한 index.html 파일을 제공할 수 있습니다.
podman run -d \
--name web_server \
--network webapp-network \
-v $(pwd)/webapp_content:/usr/local/apache2/htdocs/:Z \
httpd:2.4
옵션을 자세히 살펴보겠습니다.
--network webapp-network: 새 컨테이너를 사용자 정의 네트워크에 연결합니다.
-v $(pwd)/webapp_content:/usr/local/apache2/htdocs/:Z: 로컬 webapp_content 디렉토리를 컨테이너의 /usr/local/apache2/htdocs/에 마운트합니다. 이는 Apache 가 파일을 제공하는 기본 디렉토리입니다. :Z 접미사는 Podman 에게 SELinux 호환성을 위해 내용을 개인적이고 공유되지 않은 레이블로 다시 레이블링하도록 지시합니다.
두 컨테이너가 모두 실행 중인지 확인합니다.
podman ps
이제 실행 중인 컨테이너 목록에 mariadb_server와 web_server가 모두 표시되어야 합니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a3f46c0ab3a docker.io/library/mariadb:10.6 mariadbd 29 seconds ago Up 29 seconds 3306/tcp mariadb_server
da5d52ce9c41 docker.io/library/httpd:2.4 httpd-foreground 7 seconds ago Up 7 seconds 80/tcp web_server
이제 두 컨테이너가 동일한 사용자 정의 네트워크에 있으며 이름으로 서로 통신할 수 있습니다.