웹사이트 검색

Ubuntu에서 Docker-Compose로 LEMP 스택 Docker화


이 페이지에서

  1. 1단계 - Docker 설치
  2. 2단계 - Docker-Compose 설치
  3. 3단계 - Docker 환경 생성 및 구성\n
  4. 4단계 - docker-compose.yml 파일 구성
  5. 5단계 - Docker-Compose 실행\n
  6. 6단계 - 테스트
    1. 참조

    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 docker

    Docker 서비스가 실행 중입니다.

    다음으로 아래 명령과 함께 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;
    exit

    MariaDB 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/