상담실

How to Setup a new WordPress Project with Docker

작성자 정보

  • 쓰디쓴향기 작성
  • 작성일

컨텐츠 정보

본문

Gnuboard용 Dockerfile을 만들어 보기 위해서 워드프레스관련 자료를 번역해 봤습니다.

How to Setup a new WordPress Project with Docker

그리 멀지 않은 과거에 개발자로서의 삶은 오늘날처럼 재미 있지 않았습니다. 많은 작업이 필요한 것보다 더 많은 시간이 걸렸으며 버그를 쫓는 데 많은 시간이 걸렸으며 새로 설치된 패키지가 로컬 개발 환경을 어지럽히는 것이 무엇인지 궁금하게 생각했습니다. 따라서 최악의 시간에 다시 시작해야합니다. 그러나 그 시절은 (적어도 나를 위해) 사라졌습니다. Docker를 워크 플로에 추가하면 개발자로서의 삶이 훨씬 더 건강해 졌고 컴퓨터가 더 행복해졌습니다. 요즘 컨테이너화 없이 요즘 프로젝트를 시작하는 것을 상상할 수 없습니다. 여러 클라이언트 프로젝트에서 작업하는 경우 컨테이너화를 통해 인생을 더 즐겁게 만들 수 있습니다. 처음에는 더 많은 복잡성과 시간이 추가될 수 있지만 기술에 익숙해 짐에 따라 눈이 멀어집니다.

Introduction to Isolation

이것은 Docker 에 관한 기사가 아닙니다. Docker 의 정의와 기능에 대해서는 자세하게 다루지 않겠습니다. 그러나 기술에 대한 몇 가지 사항을 작성하면 해결하려는 대상과 중요한 이유를 알 수 있다고 생각합니다.

내가 아는 대부분의 개발자는 일반적으로 단일 작업 시스템을 가지고 있지만 한 번에 여러 프로젝트에서 작업하는 경향이 있습니다. 이러한 각 프로젝트는 서로 다르고 충돌하는 소프트웨어 종속성이 있습니다. 한 프로젝트는 PHP 5.0 과만 호환되는 반면 다른 프로젝트는 PHP 7 의 최첨단에 있을 수 있습니다. 프로젝트마다 다른 버전의 MySQL이 필요한 데이터베이스 계층으로 확장될 수도 있습니다.

Docker 이전에 사용된 몇 가지 접근 방식이 있습니다. 프로그래밍 언어에는 프로젝트 당 하나의 가상 환경을 만들고 프로젝트에서 사용하는 소프트웨어 버전을 지정하는 가상 환경이 있습니다. 프로젝트의 모든 종속성은 해당 프로젝트에 로컬입니다. 즉, 프로젝트는 소프트웨어 패키지를 공유하지 않습니다. 또 다른 널리 사용되는 솔루션은 가상 머신을 사용하는 것이 었습니다. 가상 머신은 별도의 컴퓨터 역할을하는 소프트웨어 프로그램입니다. 또한 별도의 컴퓨터와 같은 자체 응용 프로그램 및 프로그램을 실행할 수 있습니다.

내가 가장 좋아하는 격리 방식은 컨테이너화입니다. 컨테이너화는 자체 운영 환경이 있는 컨테이너에 애플리케이션을 캡슐화하는 가상 머신의 간단한 대안입니다. 가상 시스템에는 전체 운영 체제가 포함되지만 컨테이너화 기술은 단일 호스트 운영 체제와 컨테이너에서 관련 바이너리, 라이브러리 또는 드라이버를 공유합니다. 가장 널리 사용되는 컨테이너화 기술은 Docker, Inc에서 만든 오픈 소스 Docker 입니다.

Now to create the project

가장 많이 사용되는 소프트웨어 패키지는 도커 이미지가 이미 패키지 되어 있으며 docker hub에서 다운로드 할 수 있습니다. 개발자는 또한 자체 응용 프로그램을 docker hub 또는 조직내 내부 배포를 통한 전역 배포를 위한 Docker 이미지로 패키지 할 수 있습니다. 이 자습서에서는 이미 패키지 된 이미지를 사용하려고 합니다.

터미널에서 명령을 작성하여 도커에서 직접 컨테이너를 만들고 구성할 수 있습니다. 그러나 Docker Compose (Docker, Inc 팀에서 개발)라는 도구를 사용하여 YAML 구성 파일에서 각 서비스/컨테이너에 대한 구성을 정의하고 싶습니다.

튜토리얼의 나머지 부분을 따르려면 Docker와 Docker Compose가 모두 있어야합니다.

Project Structure

이 프로젝트의 목표는 WordPress 플러그인 및 테마에서 작업할 수있는 환경을 설정하는 것입니다. 이 환경은 컨테이너를 다시 시작하지 않고도 변경 사항을 신속하게 테스트 할 수 있는 샌드 박스 역할을 합니다. 또한 프로젝트를 다른 기계로 옮기는 것이 매우 쉽습니다.

|__ docker-compose.yml
|__ plugins
|  |__ name-of-plugin
|  |__ ...
|__ themes
|  |__ name-of-theme
|  |__ ...

docker-compose.YAM에서 컨테이너를 정의합니다.

Now to the docker-compose configuration file

제목에서 알 수 있듯이 프로젝트를위한 세 개의 컨테이너를 만들 예정입니다.

  1. 워드 프레스
  2. MySQL
  3. phpmyadmin

이들은 모두 YAML 구성 파일의 서비스 필드에 정의됩니다.

WordPress container

이것은 WordPress 응용 프로그램을 보관할 컨테이너입니다. 이것을 별도의 독립형 기계라고 생각하십시오. 이것은 또한 WordPress 사이트에 액세스하기 위해 누르는 기계입니다.

services:  
wordpress:  
image: wordpress:5.2.1  
restart: always  
ports:  
- 8081:80  
environment:  
WORDPRESS_DB_PASSWORD: example  
…

먼저 서비스 이름을 wordpress로 정의합니다. 다음으로 이미지를 지정하면 docker 가 docker hub 에 다운로드 할 이미지를 알려줍니다. 다시 시작 필드는 Docker 가 컨테이너가 실패할 때마다 컨테이너를 다시 시작하려고 한다고 말합니다. 포트에서 Docker 에게 이 포트를 호스트 포트 8081 에 노출시키고 WordPress 컨테이너의 포트 80 에 터널링하도록 지시합니다. 즉, 포트 8081 에서 호스트 컴퓨터를 치는 사람은 WordPress 컨테이너의 포트 80 으로 터널링됩니다. 마지막으로 환경 필드에서 컨테이너에 공급해야 하는 모든 환경 변수를 정의합니다. WORDPRESS_DB_PASSWORD 변수는 WordPress 이미지에 필요합니다. 이것은 MySQL 컨테이너에 연결하는 데 사용할 비밀번호입니다.

MySQL container

우리 데이터베이스는 이 컨테이너에 있습니다. WordPress 컨테이너와 같이 세상에 노출되지는 않지만 WordPress 컨테이너에서 도달할 수 있기를 바랍니다. Docker Compose 는 달리 지정하지 않는 한 파일에 정의된 모든 컨테이너가 서로 통신할 수 있도록 하여 처리합니다. 포트 3306 이 MySQL 이미지에 의해 이미 노출되어 있으므로 여기서 노출시킬 포트 번호를 지정하지 않았습니다.

services:
...
  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - mysql-data:/var/lib/mysql
...
volumes:
  mysql-data:

워드 프레스 서비스에서 다루는 용어에 대해서는 설명하지 않습니다. 또한 환경 변수 MySQL_ROOT_PASSWORD도 정의합니다. MySQL_ROOT_PASSWORD 값은 루트 사용자의 비밀번호로 사용됩니다. 다음으로 데이터를 보유하는 데 사용할 볼륨을 지정합니다. Docker 컨테이너는 상태 비 저장으로 설계되었으며 한 세션에서 다음 세션까지 상태에 대한 정보를 읽거나 저장하지 않습니다. 따라서 도커 설정을 중단/파괴 할 때마다 해당 세션에서 수집한 모든 정보가 손실됩니다. 데이터베이스의 경우 데이터베이스의 정보를 잃고 싶지 않습니다. MySQL 서비스에서 정의한 명명된 볼륨은 Docker 에게 컨테이너에서 호스트 시스템으로 데이터를 유지하도록 지시합니다. 위의 스니펫에서는 Docker 에게 컨테이너의 /var/lib/mysql 디렉토리에서 호스트 컴퓨터로 데이터를 유지하도록 지시합니다. 이 데이터를 유지해야 하는 호스트 시스템의 실제 위치를 지정할 필요는 없습니다. 우리는 이름을 부여하여 볼륨을 식별하기만 합니다. 이런 식으로 여러 컨테이너가 동일한 영구 볼륨을 공유하도록 할 수 있습니다.

phpmyadmin container

이 서비스는 WordPress 를 설치하고 실행하는 데 필요하지 않지만 데이터베이스와 쉽게 상호 작용할 수있는 방법을 제공하므로 "유용합니다".

services:  
...  
  phpmyadmin:  
    image: phpmyadmin/phpmyadmin  
    restart: always  
    environment:  
      PMA_HOST: mysql  
    ports:  
      8082:80

다시, 우리는 반복되는 아이디어를 다루지 않고 우리가 본 새로운 아이디어나 변형에 중점을 둡니다. 이번에는 PMA_HOST라는 또 다른 새로운 환경 변수를 정의합니다. 이것은 phpmyadmin 이미지에 필요하며 데이터베이스 컨테이너의 호스트 이름을 알려줍니다. Docker-compose 는 서비스의 이름을 컨테이너의 호스트 이름으로 사용하므로 MySQL을 PMA_HOST의 값으로 지정합니다. WordPress 컨테이너를 노출한 방식과 유사하게 이 컨테이너를 컴퓨터의 포트 8082 에 노출합니다.

Making our plugin directory available on Docker

마지막 단계는 플러그인을 WordPress 컨테이너에 노출시키는 것입니다. 이를 위해 호스트 머신의 플러그인 위치와 WordPress 컨테이너 내의 플러그인 위치 등 몇 가지 사항을 알아야 합니다. 위에서 설명한 프로젝트 구조에 따라 플러그인은 프로젝트의 plugins 디렉토리에 있어야합니다. 상대적으로 또는 전체 경로를 제공하여 두 가지 방식으로 소스 위치를 지정할 수 있습니다. 우리는 호스트 머신의 플러그인 위치에 대한 상대적인 접근 방식과 docker 내의 플러그인 위치에 대한 절대적인 접근 방식을 사용할 것입니다.

플러그인 볼륨이 정의 된 WordPress 서비스를 살펴보십시오.

services:  
  wordpress:  
    image: wordpress:5.2.1  
    restart: always  
    ports:  
      - 8081:80  
    environment:  
      WORDPRESS_DB_PASSWORD: example  
    volumes:  
      - ./plugins/new-plugin:/var/www/html/wp-content/plugins/new-plugin  
...

플러그인의 이름은 new-plugin입니다. 그리고 이것은 호스트 컴퓨터와 WordPress 컨테이너 모두에서 이름이 됩니다.

Tying it all together

version: '3.1'~~~~
services:
  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - mysql-data:/var/lib/mysql
  wordpress:
    image: wordpress:5.2.1
    restart: always
    ports:
      - 8081:80
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_PASSWORD: example
    volumes:
      - ./plugins/new-plugin:/var/www/html/wp-content/plugins/new-plugin
    
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    restart: always
    environment:
      PMA_HOST: mysql
    ports:
      - 8082:80
volumes:
  mysql-data:

구성이 완료되면 docker-compose 명령으로docker-compose up -d를 사용하여 docker 클러스터를 시작할 수 있습니다. 이 명령은 모든 이미지를 가져와 컨테이너를 시작합니다. 그래서 다음과 같이 입력할 때

http://localhost:8081/wp-admin

새 WordPress 인스턴스를 설정하라는 메시지가 표시되는 WordPress 의 설정 페이지로 이동하는 것을 알 수 있습니다. 브라우저에서 *http://localhost:8082*를 열어 phpmyadmin 사이트를 방문할 수도 있습니다. 아래의 자격 증명을 사용하여 phpmyadmin 서버에 액세스하십시오.

username — root  
password — example

데모 목적 이외의 목적으로 위의 비밀번호를보다 안전한 버전으로 업데이트해야합니다.

Conclusion

일단 중단되면 Docker 를 사용하면 짧은 시간 안에 프로젝트를 쉽게 시작하고 실행할 수 있습니다. 그러나 그 매력은 (적어도 나를 위해), 충돌하는 의존성에 대해 걱정하지 않고 프로젝트를 옮기고 여러 프로젝트에서 더 쉽게 작업 할 수 있게 한다는 것입니다.

이 게시물은 Docker 의 기능에 대해 다루지 않았습니다. 나의 주요 목표는 Docker 를 사용하여 WordPress 개발 환경을 쉽게 설정하는 방법을 보여주는 것이 었습니다. docker 및 docker-compose 에 대한 자세한 내용은 해당 사이트의 documentation을 확인하십시오. Docker, Inc 에서도이 리소스를 시작할 수도 있습니다.

관련자료

댓글 0
등록된 댓글이 없습니다.

상담실

최근글


새댓글


  • 댓글이 없습니다.
알림 0