도커 실습 4 - php mysql 연결 및 tasks app 개발 > 클라우드네이티브

본문 바로가기

[실습] 도커 실습 4 - php mysql 연결 및 tasks app 개발

필기자
2025-10-08 12:01 214 0
  • - 첨부파일 : app.zip (5.3K) - 다운로드
  • - 첨부파일 : app.js (3.2K) - 다운로드

본문

※ 주의 첫번째 파일 app.zip 실습 한 이후 -> 프론트와 서버 분리하고 두번째 파일 app.js 덮어 씌우세요. 
※ 상단 app.zip 파일 압축이 안풀리면 https://ine.or.kr:5001/sharing/yISQoXtba 에서 다시 다운로드 하세요.


목차

  • php, mysql 컨테이너 실행
  • 개발 환경 구축 및 tasks app 설치
  • front, back end 컨테이너 분할


php, mysql 컨테이너 실행

공유 네트워크 생성


# php-mysq 네트워크 생성
docker network create php-mysql

3232235521_aVkpiBbX_47086f82c577cd30abaaecd64845df1b0bec6d7c.png

mysql 컨테이너 실행

# 컨테이너 명 : mysql
# 네트워크 : php-mysql
# root 패스워드 : 123456
# database : php-mysql
# 사용자 계정 : php-mysql
# 사용자 패스워드 : 123456
# 포트포워드 : 33306:3306

docker run --name mysql -dit -p 33306:3306 --net php-mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=php-mysql -e MYSQL_USER=php-mysql -e MYSQL_PASSWORD=123456 mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

# docker run --name mysql -dit -p 33306:3306 --net php-mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=php-mysql -e MYSQL_USER=php-mysql -e MYSQL_PASSWORD=123456 mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password

3232235521_CbdsIEPS_b49d198e3361721610b1db44aa8daa1670e283b5.png

php-apache 컨테이너 설치를 위한 디렉토리 생성

# html 디렉토리 생성
mkdir html
mkdir myphpimage


Dokerfile 생성

cd myphpimage
nano Dockerfile


FROM php:8.0-apache

# 필요한 모든 확장을 활성화
RUN apt-get update && apt-get install -y zlib1g-dev libpng-dev && docker-php-ext-install mysqli pdo pdo_mysql gd iconv opcache


Dockerfile 빌드 한후 이미지 생성

# 이미지 빌드
# 명령어 마지막 . 은 현재 경로
docker build -t myphpimage ./

3232235521_z0OdIHiX_5c334388a8d783781c830af2a755ef9736b4953c.png

생성한 이미지 기반 myphp 컨테이너 설치

# 컨테이너 명 : myphp
# 네트워크 : php-mysql
# 포트포워드 : 80:80
# 바인딩마운트 : ~/html:/var/www/html

docker run -d -p 80:80 --name myphp --net php-mysql -v ~/html:/var/www/html myphpimage

3232235521_6j0cyIPT_c906bd35247719b2bcdb4fdf9803b6e1d903e075.png

네트워크 상세 정보에서 구성 컨테이너 확인

# 네트워크 상세 정보
docker network inspect php-mysql

3232235521_DrGJwOTm_29b3bcb955a6731c545b491aebf39c2109aba3bd.png

게스트(ubuntu) 컴퓨터에 ssh 서버 설치

#sshd 설치
sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh
sudo systemctl enable ssh

3232235521_G918oyS5_ecdfa2471769b5d243918083c1ab102e4c70f02b.png

개발 환경 구축 및 tasks app 설치

PC에서 VSCode 설치 및 SSH 접속

3232235521_ZMAzB1aC_95c2f242d311a5448c4c58d0f18a12eddd977ae5.png

3232235521_kEiMJIjf_c8d9d0f8bb614d1948c218eed88950cce8fc82de.png
 
  • VSCode SSH 클라이언트 설치
    • Remote Development 설치 : 좌측 확장 아이콘 > remote 검색 > Remote Development Install
3232235521_UHVPXGrK_0bab7a4eae78299589ac2e441b33eb21a8638885.png

3232235521_A0bVthxD_4eb765f32b287d7872cdb7e462ef16a308babe7a.png
  • VSCode SSH 클라이언트 설정
    • SSH 설정 : F1 버튼 > ssh 검색 > Add New SSH Host 선택 > 본인아이디@우분투아이피 입력 > config 파일에 저장
3232235521_8dP1aEV2_2c67a8b17419187da41d398b47e6b1d26467c4e5.png

3232235521_UNQobHzB_1274918f166014bcc1674a9ea7996d8ed3e033fb.png

3232235521_xo14cBsD_14fd49f9f34d85096d84f25f783fa214ddeae188.png

 
  • VSCode에서 라즈베리파이 SSH 접속
    • 좌측 원격 아이콘 클릭 > REMOTES EXPLORER에서 우분투 아이피 클릭 > Linux 선택 >비밀번호 입력(2323) > 접속 확인
3232235521_5TXEVLi9_778fc6b3f6e539f81d8cf3766497d652e2400604.png

3232235521_51lmUNfg_c8ab5a287a2ceea9f4e49367f06153ab754c837d.png

3232235521_sHc9oYW2_a67f339fbe66997a161ac13e1a4e2005244c28e2.png

3232235521_XmUIb1ST_eeba88476fc9b4723cc2378709cef67a83a12aae.png
 
  • 작업 폴더 열기
    • 좌측 탐색기 아이콘 클릭 > Connected to remote > Open Folde 버튼 클릭 > /home/본인아이디(kkl)/ 선택 > OK 버튼 클릭
3232235521_fjAh9QT4_626fe9853834a50c7d71fe0557f5ee18a8418ff2.png

3232235521_9tNiWkGU_1b489d0211275d095a89419f71494e9d1ae41593.png
 
  • HTML Files, XML Files 등등 설치

html 폴더에 첨부 파일 tasks app 설치 > myphp 컨테이너의 /var/www/html 과 동기화

3232235521_HlYmFKrS_c377d10316b89ddbb2097f419c3dfeea76ae65b1.png
3232235521_KZh5StzV_4522c5987b97e78afb04c76d0e4a3bbae12f870e.png

호스트(windows) 컴퓨터 크롬에서 게스트(ubuntu) 컴퓨터 tasks app(myphp 컨테이너)에 접속
3232235521_tFL92nkw_bd2d902990e71088ed89d0c7fe802a53be99c6a1.png
호스트(windows) 컴퓨터에서 게스트(ubuntu)를 통해 mysql 컨테이너 접속
3232235521_8eBVnwvM_c7abf58a246bddafecf528816010ee88b933dcc8.png

tasks app(myphp 컨테이너) DB 테이블 생성
  • php-mysql > 쿼리

CREATE TABLE task (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    due_datetime DATETIME
);

3232235521_q7sQBnwY_f93fdf2e844c1acaa9a11411d58bbff4caddcbe0.png

게스트(ubuntu) 컴퓨터에 tasks app(myphp 컨테이너) DB 접속 설정 및 동작 확인
  • database.php 파일 수정

$mysql_host = "mysql";
// docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql
$mysql_user = "php-mysql";
$mysql_password = "123456";
$mysql_db = "php-mysql";
$connection = mysqli_connect(
    $mysql_host, $mysql_user, $mysql_password, $mysql_db
);
  • 호스트(windows)에서 게스트(ubuntu) 컴퓨터 tasks app(myphp 컨테이너) 접속 및 동작 확인
3232235521_3y4TDi2t_1311a143e270d67a841b2bbebe0e963e8eff0039.png

front, back end 컨테이너 분할

서버 프로그램 분할 도커 컨테이너 생성

docker run -d -p 8080:80 --name myserver --net php-mysql -v ~/php:/var/www/html myphpimage


php 폴더에 서버 프로그램 이동
3232235521_KtpXlzhA_847da9e955fae05fa6bc78eda93a3a754b7e32be.png

database.php 에  CROSS 도메인 이슈 설정

header("Access-Control-Allow-Origin: *");
$mysql_host = "mysql";
// docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql
$mysql_user = "php-mysql";
$mysql_password = "123456";
$mysql_db = "php-mysql";

$connection = mysqli_connect(
    $mysql_host, $mysql_user, $mysql_password, $mysql_db
);



const hostName = window.location.hostname;
const hostNameServerUrl = 'http://'+hostName+':8080/';
// url: hostNameServerUrl+'tasks-list.php' 등으로 변경
// 이하 app.js 파일 첨부 확인

- 첨부파일 : app.js (3.2K) - 다운로드
 

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색