IT/Docker

[Docker] 컨테이너에서 컨테이너 DB 연결 #php,apache #mariadb

월공 2020. 9. 17. 20:12
728x90
300x250

제목 그대로 , php, apache 컨테이너에서 mariadb 컨테이너로의 연결입니다.

정말 간단했는데 너무나도 삽질을해서 기록삼아 ... 적어둡니다.

 

아래 이미지는 제가 직접 만든것으로 Apache, PHP7, mariaDB 의 이미지입니다.

아래 이미지 토대로 작업을 진행했습니다~!

docker pull bugkingus/centos8_200914:1.0

 

웹에서 ip주소:83 하면 접속이 가능하게끔 포트포워딩을 하였고

호스트의 경로 /var/www/html/test 폴더와

컨테이너의 경로 /var/www/html/폴더를 이어주었습니다(마운트)

docker run -i -t -p 83:80 -v /var/www/html/test:/var/www/html --name test centos8_200914:latest

포트포워딩 및 마운트 정보가 잘 되었는지 확인하는 방법은 아래 처럼 치시면 됩니다.

docker inspect test

inspect 결과 일부 캡쳐
inspect 결과 일부 캡쳐

 

mariadb 컨테이너도 가동을 하겠습니다, db 컨테이너 역시 위에서 한것처럼 포트포워딩을 해줘야합니다

docker run -i -t -d -p 60000:3306 --name testDB -e MYSQL_ROOT_PASSWORD=비밀번호 -v /var/lib/mysql:/var/lib/mysql mariadb

 

아래 명령어로 컨테이너 목록을 볼수있고 당연히 STATUS 가 UP 된 상태여야합니다

혹시라도 UP 이 아닐경우 docker start 컨테이너ID or 이름 으로 켜줍니다

docker ps -a

 

이렇게 세팅을 해줬으면 됐고, 어차피 마운트로 호스트 ftp 에서 수정해도 apache, php 컨테이너와 연결이 되어있기 때문에 파일질라로 호스트에 연결해서 connect.php 내용을 수정하였습니다.

 

db_host 쪽을 호스트 ip:포트 추가해보고 별의별 삽질을 다했는데 계속 안되다가 컨테이너 IP 를 넣어줘야 접근이 가능한것이었습니다 ㅠ

 

컨테이너 IP 확인법

 docker inspect -f "{{ .NetworkSettings.IPAddress }}" testDB 

<?
	//============= DB 접속 ========================
	$db_host = '172.17.0.2';
	$db_name = 'testDB';
	$db_user = '유저아이디';
	$db_pass = '비밀번호';

	$connect = mysqli_connect($db_host,$db_user,$db_pass, $db_name) or  die( " SQL server에 연결할 수 없습니다");

	mysqli_select_db($connect,$db_name);
	mysqli_query($connect,"SET NAMES 'utf8'");

	if (mysqli_connect_errno()) {
	 throw new Exception(mysqli_connect_error(), mysqli_connect_errno());
	}
	
?>

 

이렇게 해주니 DB 연결이 잘 되더군요 .. 괜히 포트번호 넣고 별의 별 삽질하면서 하루 시간 다날렸습니다 ㅠ

아 그리고 php 인식 안되시는분들은 php 컨테이너 내부에 php.ini 파일 찾아서 shorten_tag 를 On 해주시면 됩니다.

 

이제 도커 입문자라 부족한 내용이 많습니다

혹시라도 잘못된 정보가 있다면 지적 부탁드리겠습니다.

감사합니다 (_ _)

728x90
300x250