Docker
15단계로 배우는 Docker와 쿠버네티스: 컨테이너 네트워크(9)
the best infra
2024. 12. 31. 02:00
* 컨테이너 네트워크와 포트 공개 방법
- 실행 중인 컨테이너는 IP 주소를 할당받아 컨테이너 간 통신이 가능하다.
- 또한 같은 컨테이너 네트워크를 통해서 애플리케이션과 DB를 연결하는 것도 가능하다.
컨테이너 간 연동과 외부 공개
* 컨테이너 네트워크
- 도커 허브에 등록된 많은 애플리케이션들이 docker network를 사용해 컨테이너를 연동할 것을 안내하고 있다.
컨테이너 네트워크 커맨드 | 설명 |
docker network ls | 컨테이너 네트워크를 리스트로 표시. |
docker network inspect | 네트워크명을 지정해서 자세한 내용을 표시. |
docker network create | 컨테이너 네트워크를 생성. |
docker network rm | 컨테이너 네트워크를 삭제. |
docker network connect | 컨테이너를 컨테이너 네트워크에 접속 |
docker network disconnect | 컨테이너를 컨테이너 네트워크에서 분리 |
* 새로운 컨테이너 네트워크 만들어 보기
- docker network create my-network 으로 생성.
- 폐쇄된 네트워크에 컨테이너 실행
- docker run -d --name webserver1 --network my-network nginx:latest 실행.
- docker run -d --name webserver1 --network my-network nginx:latest 실행.
- 또 하나의 다른 컨테이너를 같은 네트워크에 생성
- docker run -it --rm --name net-tool --network my-network ubuntu:latest bash 실행
같은 네트워크에 있기에 도메인 질의가 가능하다.
- docker run -it --rm --name net-tool --network my-network ubuntu:latest bash 실행
* 외부에 포트 공개하기
- docker run -d -p 8080:80 --name test-nginx-server nginx:latest 를 실행.
외부 포트를 개방하여 로컬 pc에서도 접근 가능
* 애플리케이션 컨테이너와 DB컨테이너 연동
- 사실 두개 이상의 컨테이너를 올리려면 docker-compose나 다른 툴들을 쓰는 게 더 관리하기도 좋고 효율적이기 때문에 단순하게 dockerfile괴 docker-compse.yml을 만들어서 AP컨테이너와 DB컨테이너를 연동시켜서 한번 해보겠다.
- index.php , dockerfile, docker-compose.yml 은 같은 폴더에 있어야 한다.
- index.php 파일 코드
<html> <head><title>PHP CONNECTION TEST</title></head> <body> <?php $servername = "db"; $database = "mysql"; $database = getenv('MYSQL_DATABASE'); $username = getenv('MYSQL_USER'); // 환경변수로 부터 유저 ID획득 $password = getenv('MYSQL_PASSWORD'); // 동일하게 비밀번호 취득 // MYSQL 서버에 접속하여 결과 표시 try { $dsn = "mysql:host=$servername;dbname=$database"; $conn = new PDO($dsn, $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); print("<p>접속에 성공했습니다!</p>"); } catch(PDOException $e) { print("<p>접속에 실패했습니다ㅠㅠ</p>"); echo $e->getMessage(); } $conn = null; print('<p>종료합니다.</p>'); ?> </body> </html>
- dockerfile 코드
# PHP 애플리케이션 컨테이너 FROM php:8.2-apache # 필요한 PHP 확장 설치 RUN apt-get update && apt-get install -y \ libonig-dev \ zlib1g-dev \ && docker-php-ext-install \ pdo_mysql \ mbstring # 애플리케이션 파일 복사 COPY index.php /var/www/html/
- docker-compose.yml 코드(cmd 창에서 모든 파일이 준비 되었으면 docker-compose up으로 활성화)
version: "3.8" services: app: build: context: . dockerfile: Dockerfile container_name: php-app ports: - "8080:80" environment: MYSQL_USER: testuser MYSQL_PASSWORD: testpassword MYSQL_DATABASE: testdb depends_on: - db networks: - app-network db: image: mysql:latest container_name: mysql-db restart: always environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_USER: testuser MYSQL_PASSWORD: testpassword MYSQL_DATABASE: testdb ports: - "3306:3306" networks: - app-network networks: app-network: driver: bridge
- 제대로 작동 되면 이렇게 뜬다.
- 같은 네트워크에 있기 때문에 두 컨테이너가 연동이 된 것이다.