Intro::
42 μμΈ Inception κ³Όμ μ 리μ λλ€.
Subject
- docker-compose μ¬μ©
- κ° λ컀 μ΄λ―Έμ§λ κ·Έμ μμνλ μλΉμ€ μ΄λ¦κ³Ό κ°μμΌ νλ€.
- 컨ν μ΄λλ Alpine or Debian μ λλ²μ§Έ μμ ν λ²μ μ μ¬μ©ν΄μΌνλ€.
- κ° μλΉμ€ λ³λ‘ λ컀νμΌμ΄ μμ΄μΌν¨
- makefileμ ν΅ν΄ docker-compseλ₯Ό ν΅ν΄ dockerfiles κ° λΆλ €μΌνλ€.
- NGINX with TLSv1.2 or TLSv1.3 컨ν μ΄λ
- WordPress + php-fpm 컨ν μ΄λ
- MariaDB 컨ν μ΄λ
- WordPress λ°μ΄ν°λ₯Ό μμ©νλ volume
- WordPress website files λ₯Ό κ°μ§λ λλ²μ§Έ λ³Όλ₯¨
- κ° μ»¨ν μ΄λλ λ컀 λ€νΈμν¬λ‘ μ΄μ΄μ Έ μλ€.
- 컨ν μ΄λκ° crash λ€λ©΄ μ¬μμν΄μΌνλ€.
- WordPress database μ λ μ μ κ° μμ΄μΌνλ€.
- administrator β X (e.g., admin, administrator, Administrator, admin-123, and so forth).
- λ³Όλ₯¨μ /home/login/data ν΄λμμ μ¬μ©ν μ μμ΅λλ€.
- domain name β jahlee.42.fr 리λ€μ΄λ νΈν΄μ ipμ£Όμλ‘
- latest tag μ¬μ©κΈμ§
- λ컀νμΌμ λΉλ°λ²νΈ κΈμ§
- νκ²½λ³μλ₯Ό μ¬μ©ν΄μΌ νλ€.
- .env νμΌμ μ¬μ©νλκ²μ κΆμ₯νλ€. /srcs/.env
- 443 ν¬νΈλ§ μ¬μ©
Β
docker-compose
Version
- Docker Compose νμΌμ λ²μ μ λͺ μν©λλ€. μ΄ λ²μ μ μ¬μ©ν μ μλ κ΅¬μ± μ΅μ κ³Ό λ컀 μμ§μ νΈνμ±μ κ²°μ ν©λλ€.
Services
- μ΄ νμΌμμ μ μνκ³ μ νλ μλΉμ€λ€μ μμμ μ λλ€.
MariaDB (Service μμ)
mariadb:
: MariaDB μλΉμ€μ μμμ λνλ λλ€.container_name: mariadb
: μ΄ μλΉμ€μ 컨ν μ΄λ μ΄λ¦μmariadb
λ‘ μ€μ ν©λλ€.build: requirements/mariadb
:requirements/mariadb
λλ ν 리μ μλDockerfile
μ μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό λΉλν©λλ€.restart: always
: 컨ν μ΄λκ° μ€ν¨νκ±°λ λμ»€κ° μ¬μμλ λλ§λ€ μλμΌλ‘ μ¬μμν©λλ€.env_file: .env
: νκ²½ λ³μλ₯Ό.env
νμΌμμ λΆλ¬μ΅λλ€.volumes: - db-volume:/var/lib/mysql
:db-volume
λ³Όλ₯¨μ 컨ν μ΄λμ/var/lib/mysql
λλ ν 리μ λ§μ΄νΈν©λλ€.networks: - inception
: μ΄ μλΉμ€λ₯Όinception
λ€νΈμν¬μ μ°κ²°ν©λλ€.ports: - {host λ²νΈ}:{container λ²νΈ}
: νΈμ€νΈ ν¬νΈ λ²νΈλ₯Ό 컨ν μ΄λ ν¬νΈ λ²νΈμ λ°μΈλν©λλ€.depends_on: - other
μ΄ μλΉμ€κ° μμλκΈ° μ μother
μλΉμ€κ° λ¨Όμ μμλμ΄μΌ ν¨μ λͺ μν©λλ€.
Β
Volumes
volumes:
: μ¬μ©ν λ³Όλ₯¨λ€μ μ μνλ μΉμ μ λλ€.db-volume:
,wp-volume:
: κ° μλΉμ€μ μ¬μ©λ λ³Όλ₯¨μ μ μν©λλ€.(μμ mariadb, wordpress λ³Όλ₯¨)driver: local
: λ³Όλ₯¨μ λλΌμ΄λ²λ₯Ό λ‘μ»¬λ‘ μ€μ ν©λλ€.driver_opts:
: λ³Όλ₯¨ λλΌμ΄λ²μ λν μΆκ° μ΅μ μ μ€μ ν©λλ€.type: none
,device: /home/jahlee/data/db-data
λλ/home/jahlee/data/wp-files
: λ‘컬 νμΌ μμ€ν μ νΉμ κ²½λ‘λ₯Ό λ³Όλ₯¨μ λ°μ΄ν° μμ€λ‘ μ¬μ©ν©λλ€.o: bind
: μ§μ λ λλ°μ΄μ€λ₯Ό λ§μ΄νΈ μ΅μ μΌλ‘ λ°μΈλν©λλ€.
Networks
networks:
: μ¬μ©ν λ€νΈμν¬λ€μ μ μνλ μΉμ μ λλ€.inception:
:inception
λ€νΈμν¬λ₯Ό μ μν©λλ€.driver: bridge
: λ€νΈμν¬ λλΌμ΄λ²λ₯Όbridge
λ‘ μ€μ ν©λλ€. μ΄λ 컨ν μ΄λλ€μ΄ λ 립λ 곡κ°μμ μ€νλλ©΄μλ μλ‘ ν΅μ ν μ μκ² ν΄μ€λλ€.
Β
PID 1
PIDλ 'Process ID'μ μ½μλ‘, μ΄μ체μ μμ κ° νλ‘μΈμ€λ₯Ό μλ³νλ κ³ μ λ²νΈμ
λλ€. λͺ¨λ μ΄μ체μ μμ PID 1μ μμ€ν
μ΄ λΆν
λ λ κ°μ₯ λ¨Όμ μμλλ νλ‘μΈμ€λ₯Ό κ°λ¦¬ν€λ©°, μ΄λ μμ€ν
μ λ€λ₯Έ λͺ¨λ νλ‘μΈμ€μ λΆλͺ¨ νλ‘μΈμ€ μν μ ν©λλ€.
μ ν΅μ μΈ λ¦¬λ
μ€ μμ€ν
μμ PID 1μ μ£Όλ‘ init νλ‘μΈμ€κ° μ°¨μ§ν©λλ€. μ΄ νλ‘μΈμ€λ μμ€ν
μ΄ λΆν
λλ λμ νμν μλΉμ€μ νλ‘κ·Έλ¨μ μμνκ³ , μ’
λ£ μμλ μμ€ν
μ μμ νκ² μ’
λ£ν©λλ€. λν, μμ€ν
μ΄ μ μμ μΌλ‘ μλνλ λμμλ μ’λΉ νλ‘μΈμ€(μμ νλ‘μΈμ€κ° μ’
λ£λ νμλ μ¬μ ν μμ€ν
μμμ μ°¨μ§νλ νλ‘μΈμ€)λ₯Ό μ 리νλ μν μ ν©λλ€.
Docker PID 1
Docker 컨ν
μ΄λ λ΄μμμ PID 1μ 컨ν
μ΄λ λ΄μμ κ°μ₯ λ¨Όμ μμλλ νλ‘μΈμ€λ₯Ό μλ―Έν©λλ€. Docker 컨ν
μ΄λλ 격리λ νκ²½μμ λ¨μΌ νλ‘μΈμ€λ₯Ό μ€ννλ λ°©μμΌλ‘ μ€κ³λμκΈ° λλ¬Έμ, 컨ν
μ΄λ λ΄μμ μ€νλλ 첫 λ²μ§Έ νλ‘μΈμ€κ° PID 1μ κ°μ§κ² λ©λλ€. μ΄λ κ·Έ νλ‘μΈμ€κ° 컨ν
μ΄λ λ΄μμμ init νλ‘μΈμ€μ μ μ¬ν μν μ νκ² λ¨μ μλ―Έν©λλ€.
κ·Έλ¬λ Docker 컨ν
μ΄λμμ μ€νλλ PID 1 νλ‘μΈμ€λ μ ν΅μ μΈ λ¦¬λ
μ€ μμ€ν
μ init νλ‘μΈμ€μλ λ€λ₯΄κ², μλμΌλ‘ μ’λΉ νλ‘μΈμ€λ₯Ό μ 리νμ§ μμ΅λλ€. μ΄λ κ°λ°μκ° μ»¨ν
μ΄λλ₯Ό μ€κ³ν λ κ³ λ €ν΄μΌ ν μ€μν μ¬ν μ€ νλμ
λλ€. μ’λΉ νλ‘μΈμ€κ° κ³μ μμ΄κ² λλ©΄, μμ€ν
μμμ λΆνμνκ² μ¬μ©νμ¬ μ±λ₯ μ νλ₯Ό μΌμΌν¬ μ μμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄, Docker 컨ν
μ΄λμμλ tiniμ κ°μ μμ init μμ€ν
μ μ¬μ©νμ¬ PID 1μ μν μ 보μν μ μμ΅λλ€. Tiniλ μ’λΉ νλ‘μΈμ€λ₯Ό μ μ ν μ²λ¦¬νκ³ , μκ·Έλ μ λ¬κ³Ό κ°μ init νλ‘μΈμ€κ° ν΄μΌ ν μΌμ μνν¨μΌλ‘μ¨, 컨ν
μ΄λ λ΄λΆμμ λ³΄λ€ μμ μ μΈ νκ²½μ μ μ§ν μ μλλ‘ λμμ€λλ€.
Docker 컨ν
μ΄λμμμ PID 1 κ΄λ¦¬λ 컨ν
μ΄λμ μμ μ±κ³Ό μ±λ₯μ μ§μ μ μΈ μν₯μ λ―ΈμΉκΈ° λλ¬Έμ μ€μν©λλ€. λ°λΌμ κ°λ°μλ 컨ν
μ΄λλ₯Ό μ€κ³νκ³ κ΅¬μ±ν λ μ΄λ¬ν μ¬νμ κ³ λ €ν΄μΌ ν©λλ€.
Β
Tini
Tiniλ Docker 컨ν
μ΄λ λ΄μμ PID 1μ μν μ ν¨κ³Όμ μΌλ‘ μννκΈ° μν΄ λ§λ€μ΄μ§ μ΄κ²½λ μ νΈλ¦¬ν°μ
λλ€. Tiniλ 컨ν
μ΄λ λ΄μμ μ€νλλ 첫 λ²μ§Έ νλ‘μΈμ€λ‘ λμνμ¬, μ ν΅μ μΈ λ¦¬λ
μ€ μμ€ν
μ init νλ‘μΈμ€κ° νλ μΌμ λ΄λΉν©λλ€. μ£Όμ κΈ°λ₯μ μ’λΉ νλ‘μΈμ€μ μ²λ¦¬μ μκ·Έλμ μ μ ν μ λ¬μ
λλ€.
Tiniμ μ£Όμ κΈ°λ₯
- μ’λΉ νλ‘μΈμ€ μ²λ¦¬: 컨ν μ΄λ λ΄μμ μμ νλ‘μΈμ€κ° μ’ λ£λ λ, μ΄λ€μ΄ μ’λΉ νλ‘μΈμ€λ‘ λ¨μ§ μλλ‘ μ²λ¦¬ν©λλ€. μ’λΉ νλ‘μΈμ€λ μμμ ν΄μ νμ§ μκ³ μμ€ν μ λ¨μμλ μ’ λ£λ νλ‘μΈμ€λ₯Ό λ§ν©λλ€. Tiniλ μ΄λ¬ν νλ‘μΈμ€λ€μ΄ μμ€ν μμμ κ³μ μ μ νλ κ²μ λ°©μ§ν©λλ€.
- μκ·Έλ νΈλ€λ§: μκ·Έλμ μ΄μ체μ μμ νλ‘μΈμ€μ 보λ΄λ ν΅μ§ λ©μμ§μ λλ€. μλ₯Ό λ€μ΄, 컨ν μ΄λλ₯Ό μ μμ μΌλ‘ μ’ λ£νλ €κ³ ν λ 보λ΄λ SIGTERM μκ·Έλμ΄ μμ΅λλ€. Tiniλ μ΄λ¬ν μκ·Έλμ μ μ ν μμ νλ‘μΈμ€μ μ λ¬νμ¬, μλ₯Ό λ€μ΄ 컨ν μ΄λκ° μ μμ μΌλ‘ μ’ λ£λ μ μλλ‘ ν©λλ€.
Tini μ¬μ© λ°©λ²
Docker μ΄λ―Έμ§μ Tiniλ₯Ό ν¬ν¨μν€κ±°λ, Dockerμ
--init
νλκ·Έλ₯Ό μ¬μ©νμ¬ μ»¨ν
μ΄λλ₯Ό μ€νν λ Tiniλ₯Ό νμ±νν μ μμ΅λλ€.- Dockerfileμ Tini μΆκ°νκΈ°:
dockerfileCopy code FROM ubuntu:latest # Tini μ€μΉ ADD https://github.com/krallin/tini/releases/download/v0.19.0/tini /tini RUN chmod +x /tini ENTRYPOINT ["/tini", "--"] # μ€μ μ€νν λͺ λ Ήμ΄ CMD ["your_application", "argument1", "argument2"]
- Docker μ€ν μ
-init
νλκ·Έ μ¬μ©: Docker 1.13.0 μ΄μμμλdocker run
λͺ λ Ήμ΄μ-init
νλκ·Έλ₯Ό μΆκ°νμ¬ Tiniλ₯Ό νμ±νν μ μμ΅λλ€. μ΄ λ°©λ²μ μ¬μ©νλ©΄ λ³λλ‘ Tiniλ₯Ό μ€μΉν νμκ° μμ΅λλ€.
bashCopy code docker run --init -d your_image
Tiniμ μ¬μ©μ 컨ν
μ΄λκ° λ³΄λ€ μμ μ μΌλ‘ λμνλλ‘ νλ©°, νΉν μ¬λ¬ νλ‘μΈμ€λ₯Ό κ΄λ¦¬ν΄μΌ νλ 볡μ‘ν μ ν리μΌμ΄μ
μμ κ·Έ μ€μμ±μ΄ 컀μ§λλ€. Tiniλ μ νΈ μ λ¬κ³Ό μ’λΉ νλ‘μΈμ€ μ²λ¦¬λ₯Ό μλννμ¬, 컨ν
μ΄λμ μλͺ
μ£ΌκΈ° κ΄λ¦¬λ₯Ό λ¨μννκ³ , κ°λ°μκ° μ ν리μΌμ΄μ
λ‘μ§μ λ μ§μ€ν μ μλλ‘ λμ΅λλ€.
Β
WordPressμ PHP-FPM
WordPressλ μΈκ³μμ κ°μ₯ λ리 μ¬μ©λλ μ½ν
μΈ κ΄λ¦¬ μμ€ν
(CMS) μ€ νλλ‘, μ¬μ©μκ° λΈλ‘κ·Έ, κ°μΈ μΉμ¬μ΄νΈ, ν¬νΈν΄λ¦¬μ€, μ¬μ§μ΄λ μ μ μκ±°λ μ¬μ΄νΈμ κ°μ λ€μν μ νμ μΉμ¬μ΄νΈλ₯Ό μ½κ² λ§λ€κ³ κ΄λ¦¬ν μ μκ² ν΄μ€λλ€. WordPressλ PHPλ‘ μμ±λμμΌλ©° MySQL λλ MariaDB λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©ν©λλ€.
php-fpm
(PHP FastCGI Process Manager)μ PHP μ€ν¬λ¦½νΈλ₯Ό μ²λ¦¬νκΈ° μν κ³ μ±λ₯ λ°±μλ νλ‘μΈμ€ 맀λμ μ
λλ€. FastCGIμ ꡬν체 μ€ νλλ‘, λμ μ½ν
μΈ λ₯Ό μ 곡νλ μΉ μ ν리μΌμ΄μ
μ μν΄ μ€κ³λμμ΅λλ€. PHP-FPMμ μΉμλ²μ PHP μ€ν¬λ¦½νΈ μ¬μ΄μ μΈν°νμ΄μ€ μν μ νλ©°, μΉμλ²λ‘λΆν° PHP μ€ν¬λ¦½νΈ μ€ν μμ²μ λ°μ μ²λ¦¬ν©λλ€.WordPressμ PHP-FPMμ μ°λ
WordPress μΉμ¬μ΄νΈμμ PHP-FPMμ μ¬μ©νλ κ²μ μΉ μ¬μ΄νΈμ μ±λ₯κ³Ό μμ μ±μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. PHP-FPMμ κ°κ°μ μμ²μ λ
립λ μμ νλ‘μΈμ€λ‘ μ²λ¦¬νκΈ° λλ¬Έμ, μμ² μ²λ¦¬ μ λ°μν μ μλ λ¬Έμ κ° λ€λ₯Έ μμ²μ μν₯μ λ―ΈμΉμ§ μμ΅λλ€. λν, PHP-FPMμ μμ² μ²λ¦¬λμ λ°λΌ μλμΌλ‘ μμ νλ‘μΈμ€μ μλ₯Ό μ‘°μ ν μ μμΌλ©°, μ΄λ νΈλν½μ΄ λ§μ μκ°μλ μΉμ¬μ΄νΈκ° μμ μ μΌλ‘ μ΄μλ μ μλλ‘ λμ΅λλ€.
PHP-FPM μ€μ νκΈ°
PHP-FPMμ WordPressμ ν¨κ» μ¬μ©νκΈ° μν΄μλ λͺ κ°μ§ μ€μ μ΄ νμν©λλ€:
- PHP-FPM μ€μΉ: μλ²μ PHP-FPMμ μ€μΉν΄μΌ ν©λλ€. λλΆλΆμ Linux λ°°ν¬νμμλ ν¨ν€μ§ κ΄λ¦¬μλ₯Ό ν΅ν΄ μ½κ² μ€μΉν μ μμ΅λλ€.
- μΉ μλ² κ΅¬μ±: Apache λλ Nginx κ°μ μΉ μλ²λ₯Ό μ¬μ©νμ¬ PHP-FPMκ³Ό μ°λν΄μΌ ν©λλ€. κ° μΉ μλ²λ§λ€ μ€μ λ°©λ²μ΄ μ‘°κΈμ© λ€λ₯Ό μ μμΌλ, μλ² λ¬Έμλ₯Ό μ°Έκ³ νμ¬ μ¬λ°λ₯΄κ² μ€μ ν©λλ€.
- Nginxμ κ²½μ°,
location
λΈλ‘ λ΄μμfastcgi_pass
μ§μμ΄λ₯Ό μ¬μ©νμ¬ PHP-FPMκ³Ό ν΅μ ν©λλ€. - Apacheμ κ²½μ°,
mod_proxy_fcgi
λͺ¨λμ μ¬μ©νμ¬ PHP-FPMκ³Ό μ°λν μ μμ΅λλ€.
- PHP-FPM ν(pool) ꡬμ±: PHP-FPM μ€μ νμΌ(μΌλ°μ μΌλ‘
www.conf
)μμ νλ‘μΈμ€ νμ ꡬμ±ν μ μμ΅λλ€. μ΄ μ€μ μ ν΅ν΄ μμ νλ‘μΈμ€μ μ, μμ νλ‘μΈμ€ μ, μμ² λκΈ°μ΄μ ν¬κΈ° λ±μ μ‘°μ ν μ μμ΅λλ€.
μ΄μ
- μ±λ₯ ν₯μ: PHP-FPMμ μΉ μ ν리μΌμ΄μ μ μ²λ¦¬ μλμ μλ΅ μκ°μ κ°μ ν μ μμ΅λλ€.
- μμ ν¨μ¨μ±: μμ μ¬μ©μ λ μ κ΄λ¦¬νκ³ , νμμ λ°λΌ νλ‘μΈμ€λ₯Ό λμ μΌλ‘ μ‘°μ ν μ μμ΅λλ€.
- μμ μ±: κ° μμ²μ λ 립λ νλ‘μΈμ€μμ μ²λ¦¬νκΈ° λλ¬Έμ, νλμ μμ²μ΄ μ€ν¨ν΄λ μ 체 μμ€ν μ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
WordPressμ PHP-FPMμ μ‘°ν©μ νΉν λμ μ½ν
μΈ κ° λ§κ³ , λμ νΈλν½μ μ²λ¦¬ν΄μΌ νλ μΉμ¬μ΄νΈμ μ ν©ν ν΄κ²°μ±
μ μ 곡ν©λλ€.
VM μ€μ
Β
Loading Comments...