[Docker] 컨테이너에서 컨테이너 DB 연결 #php,apache #mariadb
제목 그대로 , 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
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 해주시면 됩니다.
이제 도커 입문자라 부족한 내용이 많습니다
혹시라도 잘못된 정보가 있다면 지적 부탁드리겠습니다.
감사합니다 (_ _)