Docker compose(도커 컴포즈)란?

복수 개의 컨테이너를 실행시키는 도커 애플리케이션을 정의하기 위한 툴이다.

 

도커 컴포즈를 이용해, DB와 Wordpress 두개의 컨테이너를 만들어 실행해서 워드프레스를 설치해보도록 하겠다.

시작 전에 도커 컴포즈가 설치되어 있어야 한다. https://docs.docker.com/compose/install/

 

프로젝트 정의

1. 빈 프로젝트 디렉토리를 생성한다.

디렉토리 명은 편한것으로 만들면 된다. 이 디렉토리 안에 docker-compose.yml 파일을 저장할 것이다.

 

2. 방금 만든 디렉토리 안으로 이동한다.

예를 들어, my_wordpress라는 폴더를 만들었다면 아래 명령으로 해당 디렉토리 안으로 이동 가능하다 :

$ cd my_wordpress/

 

3. 아래의 내용으로 docker-compose.yml 파일을 생성한다. (워드프레스 블로그와, 볼륨 마운드를 한 별도의 MySQL 인스턴스를 생성할 수 있는 스크립트이다.)

services:
  db:
    # We use a mariadb image which supports both amd64 & arm64 architecture
    image: mariadb:10.6.4-focal
    # If you really want to use MySQL, uncomment the following line
    #image: mysql:8.0.27
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  wordpress:
    image: wordpress:latest
    ports:
      - 80:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
volumes:
  db_data:

 

프로젝트 빌드

프로젝트 디렉토리 안에서 아래 명령을 실행한다.

$ docker compose up -d

위 명령은 docker compose up 을 detached mode로 실행하고, 도커 이미지를 가져오고, 워드프레스와 데이터베이스 컨테이너를 시작한다. 

브라우저에서 워드프레스 접속 및 설치

이제, 워드프레스가 도커 호스트의 80 포트에서 동작한다. 브라우저로 접속해보면, 설지 시작 화면을 볼 수 있다.

도커가 로컬호스트에 설치되어 있다면, 브라우저 주소창에 http://localhost  를 입력하면 접속 가능하다.

원격 서버에 설치되어 있다면, localhost 대신 서버의 ip 주소나, 도메인명을 입력하면 된다.

종료 및 삭제

컨테이너와 기본 네트워크를 종료하지만 워드프레스 데이터베이스를 남기고 싶다면 docker compose down 명령을 입력한다.

컨테이너, 기본 네트워크, 데이터베이스까지 모두 삭제하고 싶다면 docker compose down --volumes 명령을 입력한다.

 

참고

https://docs.docker.com/samples/wordpress/

 

워드프레스 사이트에 접속 시(브라우저에서 url 호출 시), 워드프레스에서 일어나는 일련의 작업들을 간략히 정리한 가이드

 

첫 로딩 파일

사용자인 경우 : index.php (별로 하는 일 없음. 상수 정의하고 wp-blog-header.php를 로딩함)

어드민인 경우 : wp-admin/index.php

 

wp-blog-header.php

3가지 일을 함

- wp-load.php를 로딩 : wordpress 환경 전체를 셋업함

- wp() 함수 실행 : wp-includes/functions.php 안에 존재, query를 로딩함

- template-loader.php : 어떤 템플릿이 불려야 할지 결정함

 

wp-load.php

- wp-config.php를 체크해서 환경 설정을 계속함

- 마지막에 wp-settings.php 로딩하여, 실제 setup process를 진행함

 

wp-settings.php

아래 3개 파일 로딩함

- load.php (wp-includes 폴더 안에 존재) : 워드프레스가 필요한 첫 함수들 제공

- default-constants.php  (또한 wp-includes 폴더 안에 존재): 상수들 정의

- version.php  (이것도 wp-includes 폴더 안에 존재): 버전 정보 정의

 

functions.php, wp classes, plugin api

- compat.php : 옛날 php 버전 지원

- functions.php : 사이트 운영을 위한 기본적인 함수들

- class-wp.php :  쿼리 빌드

- class-wp-error.php : 에러 트래킹

- plugin.php : 액션, 필터 훅을 위해 필요한 함수들 제공

- mo.php : 번역 지원

 

Database class와 cache 설정

- require_wp_db() 와 wp_start_object_cache() 함수가 호출됨 (load.php 에서) : 데이터베이스 연결과 캐싱에 필요한 작업들 수행

 

default-filters.php

- 수많은 action과 filter 들을 설정함

 

multisite startup

- 멀티사이트가 설정된 경우, 필요한 작업들을 함

 

기본 로딩 마지막

- 워드프레스의 메인 함수 로딩이 끝났음

- 하지만 아직 워드프레스의 모든 기능이 사용 가능한 것은 아님(플러그인 등)

 

대부분의 워드프레스 로딩

- 긴 require 리스트를 로딩하면서 워드프레스의 코어 기능들을 위한 함수를 모두 로딩함

 

필수 플러그인 로딩

- 일반 플러그인 로딩 전, 필수 플러그인 로딩을 먼저 함

 

기본 taxonomies 와 post type

- Post, Page, Attachment, Category, Tag,… 등의 기본 taxonomies 와 post type 정의

 

Global object 생성

- wp, wp_query 등의 글로벌 object 생성하고 현재 쿼리 유지함

 

테마 선택

- 활성화된 테마를 체크하고, 테마의 functions.php 파일 로딩함

 

init hook

- init 훅에 걸린 액션들을 수행함

- 이 훅을 사용하는 플러그인과 테마들을 로딩함

 

wp_loaded hook

- 멀티사이트라면, wp_loaded 훅에 걸린 액션들을 수행 함

 

WP()

- 이 시점에는, 워드프레스의 모든 코어 함수들이 사용 가능함 (wp-includes/functions.php에 존재)

- url을 체크하고, 필요한 쿼리를 빌드하고 페이지에 필요한 데이터를 가져옴

 

template-loader.php

- 어떤 템플릿이 로딩되어야 하는지 체크함 

- template_redirect 체크

- http head request 체크

- robot이나 rss-feed, trackback인지 체크

- 위의 셋 중 하나가 아니면, 가능한 템플릿 리스트를 훓으면서 조건에 맞는 템플릿 선택함 > 현재 테마에 템플릿이 있는지 체크 > 있으면 $template 변수에 저장됨

- 매칭되는게 없으면, 기본 index 템플릿이 변수에 저장됨

- 마지막 filter (template_include) 불리고 결과가 브라우저에 표시됨

 

참고

https://medium.com/@dendeffe/wordpress-loading-sequence-a-guided-tour-e077c7dbd119

'개발 > 워드프레스' 카테고리의 다른 글

[워드프레스] 사이트 최적화  (0) 2022.07.02

+ Recent posts