Ubuntu에서 Docker-Compose로 LEMP 스택 Docker화
이 페이지에서
- 1단계 - Docker 설치
- 2단계 - Docker-Compose 설치
- 3단계 - Docker 환경 생성 및 구성\n
- 4단계 - docker-compose.yml 파일 구성
- 5단계 - Docker-Compose 실행\n
- 6단계 - 테스트
- 참조
Docker-Compose는 다중 컨테이너 도커 애플리케이션을 정의하고 관리하기 위한 명령줄 도구입니다. Compose는 Python 스크립트이며 pip 명령으로 쉽게 설치할 수 있습니다(pip는 Python 패키지 저장소에서 Python 소프트웨어를 설치하는 명령입니다). Compose를 사용하면 단일 명령으로 여러 도커 컨테이너를 실행할 수 있습니다. 이를 통해 개발, 테스트 및 스테이징 환경에 적합한 컨테이너를 서비스로 만들 수 있습니다.
이 튜토리얼에서는 docker-compose를 사용하여 LEMP Stack 환경(LEMP = Linux - Nginx - MySQL - PHP)을 만드는 방법을 단계별로 안내합니다. 다른 Docker 컨테이너에서 모든 구성 요소를 실행하고 Nginx 컨테이너, PHP 컨테이너, PHPMyAdmin 컨테이너 및 MySQL/MariaDB 컨테이너를 설정합니다.
전제 조건
- 우분투 서버 16.04 -64비트
- 루트 권한\n
1단계 - 도커 설치
이 단계에서는 Docker를 설치합니다. Docker는 Ubuntu 리포지토리에서 사용할 수 있습니다. 리포지토리를 업데이트한 다음 설치하면 됩니다.
우분투 저장소 업데이트 및 업그레이드:
sudo apt-get update
sudo apt-get upgrade우분투 저장소에서 최신 Docker를 설치합니다.
sudo apt-get install -y docker.io
도커를 시작하고 부팅 시 시작되도록 활성화합니다.
systemctl start docker
systemctl enable dockerDocker 서비스가 실행 중입니다.
다음으로 아래 명령과 함께 docker를 사용하여 테스트할 수 있습니다.
docker run hello-world
docker의 Hello World.
2단계 - Docker-Compose 설치
첫 번째 단계에서 우리는 이미 Docker를 설치했습니다. 이제 docker-compose를 설치하겠습니다.
Compose 설치를 위해 python-pip가 필요합니다. apt를 사용하여 python 및 python-pip를 설치합니다.
sudo apt-get install -y python python-pip
설치가 완료되면 pip 명령으로 docker-compose를 설치합니다.
pip install docker-compose
이제 docker-compose 버전을 확인합니다.
docker-compose --version
Docker-compose가 설치되었습니다.
3단계 - Docker 환경 생성 및 구성
이 단계에서는 docker-compose 환경을 구축합니다. 루트가 아닌 사용자를 사용할 것이므로 지금 해당 사용자를 생성해야 합니다.
hakase라는 이름의 새 사용자를 추가합니다(원하는 경우 여기에서 고유한 사용자 이름 선택).
useradd -m -s /bin/bash hakase
passwd hakase그런 다음 새 사용자를 docker 그룹에 추가하고 docker를 다시 시작합니다.
usermod -a -G docker hakase
sudo systemctl restart docker이제 사용자 hakase는 sudo 없이 도커를 사용할 수 있습니다.
그런 다음 루트 사용자에서 su를 사용하여 hakase 사용자로 로그인합니다.
su - hakase
Compose 환경을 위한 새 디렉터리를 만듭니다.
mkdir lemp-compose/
cd lemp-compose/이것은 우리의 docker-compose 환경이며 Docker 컨테이너에 있어야 하는 모든 파일은 이 디렉터리에 있어야 합니다. docker-compose를 사용하는 경우 docker-compose.yml이라는 .yml 파일이 필요합니다.
lemp-compose 디렉터리에서 일부 새 디렉터리와 docker-compose.yml 파일을 만듭니다.
touch docker-compose.yml
mkdir -p {logs,nginx,public,db-data}- logs: Nginx 로그 파일의 디렉터리입니다.
- nginx: 가상 호스트 등과 같은 Nginx 구성을 포함합니다.\n
- public: 웹 파일, index.html 및 PHP 정보 파일용 디렉토리입니다.
- db-data: MariaDB 데이터 디렉토리 볼륨.
로그 디렉토리에 error.log 및 access.log 로그 파일을 작성하십시오.
touch logs/{error,access}.log
nginx 디렉터리에 새 nginx 가상 호스트 구성 파일을 만듭니다.
vim nginx/app.conf
아래에 구성 붙여넣기:
upstream php {
server phpfpm:9000;
}
server {
server_name 193.70.36.50;
error_log "/opt/bitnami/nginx/logs/myapp-error.log";
access_log "/opt/bitnami/nginx/logs/myapp-access.log";
root /myapps;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}파일을 저장하고 vim을 종료합니다.
공용 디렉터리에 새 index.html 파일과 PHP 정보 파일을 만듭니다.
echo '<h1>LEMP Docker-Compose</h1><p><b>hakase-labs</b>' > public/index.html
echo '<?php phpinfo(); ?>' > public/info.php이제 아래와 같이 환경 디렉토리를 볼 수 있습니다.
tree
4단계 - docker-compose.yml 파일 구성
이전 단계에서 컨테이너에 필요한 디렉터리와 파일을 만들었습니다. 이 단계에서는 docker-compose.yml 파일을 편집하려고 합니다. docker-compose.yml 파일에서 LEMP 스택, 각 컨테이너의 기본 이미지 및 도커 볼륨에 대한 서비스를 정의합니다.
hakase 사용자로 로그인하고 vim으로 docker-compose.yml 파일을 수정합니다.
su - hakase
cd lemp-compose/
vim docker-compose.yml- Nginx 서비스 정의
아래에 nginx 구성을 붙여넣습니다.
nginx:
image: 'bitnami/nginx'
ports:
- '80:80'
links:
- phpfpm
volumes:
- ./logs/access.log:/opt/bitnami/nginx/logs/myapp-access.log
- ./logs/error.log:/opt/bitnami/nginx/logs/myapp-error.log
- ./nginx/app.conf:/bitnami/nginx/conf/vhosts/app.conf
- ./public:/myapps해당 구성에서 우리는 이미 다음을 정의했습니다.
- nginx: 서비스 이름
- 이미지: bitnami/nginx 도커 이미지를 사용하고 있었습니다.\n
- 포트: 컨테이너 포트 80을 호스트 포트 80에 노출\n
- 링크: nginx 서비스 컨테이너를 phpfpm 컨테이너에 연결
- 볼륨: 로컬 디렉토리를 컨테이너에 마운트합니다. 로그 파일 디렉토리를 마운트하고 Nginx 가상 호스트 구성을 마운트하고 웹 루트 디렉토리를 마운트하십시오.\n
- PHP-fpm 서비스 정의
Nginx 블록 아래에 구성을 붙여넣습니다.
phpfpm:
image: 'bitnami/php-fpm'
ports:
- '9000:9000'
volumes:
- ./public:/myapps여기에서 정의했습니다.
- phpfpm: 서비스 이름을 정의합니다.\n
- 이미지: bitnami/php-fpm 이미지로 phpfpm 서비스의 기본 이미지를 정의합니다.\n
- 포트: TCP 포트 9000으로 PHP-fpm을 실행하고 포트 9000을 호스트에 노출합니다.\n
- 볼륨: 컨테이너의 myapps에 공개된 웹 루트 디렉토리를 마운트합니다.
\n
- MySQL 서비스 정의
세 번째 블록에서 MariaDB 서비스 컨테이너에 대한 아래 구성을 붙여넣습니다.
mysql:
image: 'mariadb'
ports:
- '3306:3306'
volumes:
- ./db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=hakase-labs123여기에서 우리가 사용하고 있는 것을 볼 수 있습니다:
- mysql: 서비스 이름으로.
- 이미지: 컨테이너는 mariadb 도커 이미지를 기반으로 합니다.\n
- 포트: MySQL 연결을 위해 포트 3306을 사용하는 서비스 컨테이너이며 포트 3306의 호스트에 노출됩니다.\n
- 볼륨: db-data 디렉토리 mysql
- 환경: 컨테이너 빌드 시 실행되는 도커 이미지에 대한 mysql 루트 암호에 대한 환경 변수 MYSQL_ROOT_PASSWORD를 설정합니다.\n
- PHPMyAdmin 서비스 구성
마지막 블록에 아래 구성을 붙여넣습니다.
phpmyadmin:
image: 'phpmyadmin/phpmyadmin'
restart: always
ports:
- '8080:80'
links:
- mysql:mysql
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: hakase-labs123
PMA_HOST: mysql우리는 phpmyadmin 도커 이미지를 사용하고 호스트에서 컨테이너 포트 80을 8080으로 매핑하고 컨테이너를 mariadb 컨테이너에 연결하고 항상 다시 시작을 설정하고 set PMA_HOST를 포함하여 도커 이미지의 일부 환경 변수를 설정합니다.
파일을 저장하고 vim을 종료합니다.
github에서 전체 예제를 볼 수 있습니다.
5단계 - Docker-Compose 실행
이제 docker-compose를 실행할 준비가 되었습니다. 참고: docker-compose를 실행하려면 docker-compose 프로젝트 디렉토리에 있어야 하며 작성 구성이 포함된 yml 파일이 있는지 확인해야 합니다.
아래 명령을 실행하여 LEMP 스택을 가동합니다.
docker-compose up -d
-d: 데몬 또는 백그라운드로 실행
새 컨테이너가 생성되었다는 결과가 표시되면 아래 명령으로 확인하십시오.
docker-compose ps
이제 Nginx, PHP-fpm, MariaDB 및 PHPMyAdmin을 실행하는 4개의 컨테이너가 있습니다.
6단계 - 테스트
호스트의 docker-proxy에서 사용하는 포트를 확인합니다.
netstat -plntu
Nginx 컨테이너용 포트 80, MariaDB 컨테이너용 포트 3306, php-fpm 컨테이너용 포트 9000, PHPMyAdmin 컨테이너용 포트 8080을 볼 수 있습니다.
웹 브라우저에서 포트 80에 액세스하면 index.html 파일이 표시됩니다.
PHP-fpm이 실행 중인지 확인하고 웹 브라우저에서 액세스하십시오.
MySQL 셸에서 MySQL 컨테이너에 액세스합니다.
docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL PASSWORD: hakase-labs123이제 새 데이터베이스를 만듭니다.
create database hakase_db;
exitMariaDB mysql 셸 컨테이너에 액세스할 수 있으며 새 데이터베이스 hakase_db를 만들었습니다.
다음으로 포트 8080(http://serverip-address:8080/)에서 PHPMyAdmin에 액세스합니다.
PHPMyAdmin 로그인 페이지가 표시되면 사용자 이름 root를 입력하고 암호는 hakase-labs123입니다.
PMA_HOST 환경 변수에 정의된 mysql 컨테이너에 자동으로 연결됩니다.
이동을 클릭하면 mysql 컨테이너에 연결된 phpmyadmin 대시보드가 표시됩니다.
성공! LEMP 스택은 4개의 컨테이너로 구성된 docker-compose 설정에서 실행됩니다.
참조
- https://hub.docker.com/r/bitnami/nginx/
- https://hub.docker.com/r/bitnami/php-fpm/
- https://hub.docker.com/_/mariadb/
- https://hub.docker.com/r/phpmyadmin/phpmyadmin/
- https://docs.docker.com/compose/
- https://github.com/yuzukiseo/hakase-labs/tree/master/lemp-compose
- https://linux-console.net/tutorial/how-to-create-docker-images-with-dockerfile/