DevOps/Docker

[Docker] Docker Compose를 이용해 Wordpress 배포하기

TTOII 2022. 5. 15. 21:45
728x90

✔️ Docker Compose이용해 Wordpress를 배포하기

docker-compose.yaml

version: "3" # 버전 지정
services: # DB, Wordpress 서비스 구성
  wp-db: 
    image: mysql:5.7 # 사용할 이미지 지정
    restart: always # 재시작 정책 지정 
    environment: # DB 환경 변수 설정(필수) - 자동으로 권한 설정된다.
      MYSQL_ROOT_PASSWORD: P@ssw0rd
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpadm 
      MYSQL_PASSWORD: P@ssw0rd
    volumes: # 볼륨 지정 (wp-db-vol이라는 볼륨을 만들어줘야한다.)
      - wp-db-vol:/var/lib/mysql
    networks: # 컨테이너를 생성할 네트워크 
      - wp-net # 별도로 옵션을 지정하지 않을 시 bridge type 생성

  wp-web: 
    depends_on: # wp-web, wp-db의 생성 순서는 랜덤하므로
      - wp-db # wp-db가 먼저 생성되도록 명시적 의존성을 지정한다.
    image: wordpress:5-apache # 사용할 이미지 지정
    restart: always # 재시작 정책 지정
    environment: # 환경 변수 설정
      WORDPRESS_DB_HOST: wp-db # Docker Compose의 장점: 이름으로 가리킴
      WORDPRESS_DB_USER: wpadm
      WORDPRESS_DB_PASSWORD: P@ssw0rd
      WORDPRESS_DB_NAME: wordpress
    ports: # 외부에 노출시키기 위해 포트 포워딩 지정 
      - "80:80" # 호스트의 포트 : 컨테이너의 포트(이미지에 이미 지정됨)
    volumes:
      - wp-web-vol:/var/www/html
    networks:
      - wp-net

volumes:
  wp-db-vol:
  wp-web-vol:

networks:
  wp-net:

 

 vagrant@docker  ~  cd compose
 vagrant@docker  ~/compose  ls
example1  example2  example3  example4

 vagrant@docker  ~/compose  mkdir wp
 vagrant@docker  ~/compose  cd wp
 vagrant@docker  ~/compose/wp  vi docker-compose.yaml

 vagrant@docker  ~/compose/wp  docker compose up -d
[+] Running 5/5
 ⠿ Network wp_wp-net       Created                                                                                 0.0s
 ⠿ Volume "wp_wp-db-vol"   Created                                                                                 0.0s
 ⠿ Volume "wp_wp-web-vol"  Created                                                                                 0.0s
 ⠿ Container wp-wp-db-1    Started                                                                                 0.5s
 ⠿ Container wp-wp-web-1   Started                                                                                 0.9s

docker compose run을 실행하면
yaml 파일에서 명시적 의존성을 지정했기 때문에 db가 항상 먼저 만들어지는 것을 확인할 수 있다.

 

 vagrant@docker  ~/compose/wp  docker compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
wp-wp-db-1          "docker-entrypoint.s…"   wp-db               running             33060/tcp
wp-wp-web-1         "docker-entrypoint.s…"   wp-web              running             0.0.0.0:80->80/tcp, :::80->80/tcp
 vagrant@docker  ~/compose/wp  docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                               NAMES
93d03e473024   wordpress:5-apache     "docker-entrypoint.s…"   44 seconds ago   Up 43 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   wp-wp-web-1
6da8f8423342   mysql:5.7              "docker-entrypoint.s…"   44 seconds ago   Up 44 seconds   3306/tcp, 33060/tcp                 wp-wp-db-1

docker ps 또는 docker compose ps로 생성된 컨테이너를 확인 가능하다.

 

 

✔️ docker compose down 시 주의점

 vagrant@docker  ~/compose/wp  docker compose down
[+] Running 3/3
 ⠿ Container wp-wp-web-1  Removed                                                                                                                                            1.2s
 ⠿ Container wp-wp-db-1   Removed                                                                                                                                            1.6s
 ⠿ Network wp_wp-net      Removed                                                                                                                                            0.2s

 vagrant@docker  ~/compose/wp  docker network ls
NETWORK ID     NAME                DRIVER    SCOPE
5ce93a18aa8e   bridge              bridge    local
f82faa7d09e2   example2_web-net    bridge    local
4159dc8b15f3   host                host      local
42eb99a7c805   none                null      local
dd8cb6c53e9b   wordpress-network   bridge    local

 vagrant@docker  ~/compose/wp  docker volume ls
DRIVER    VOLUME NAME
local     wp_wp-db-vol
local     wp_wp-web-vol

docker compose down 해도 볼륨은 자동으로 삭제되지 않는다.

 

만약 필요 옵션을 빠뜨려 옵션을 추가한 뒤 다시 docker compose를 하면

볼륨이 자동으로 삭제되기 않기 때문에 해당 볼륨을 그대로 사용하게 되고, 오류가 발생할 가능성이 있다.

DB에서 세팅했던 환경 변수를 바꾸더라도 볼륨에 저장되어 있던 기존의 정보를 유지하기 때문이다.

 

 vagrant@docker  ~/compose/wp  docker compose down -v
[+] Running 2/2
 ⠿ Volume wp_wp-web-vol   Removed                                                      0.0s
 ⠿ Volume wp_wp-db-vol    Removed                                                      0.1s

volume을 수동으로 삭제하던지 docker compose down -v 명령으로 볼륨까지 삭제한다.

k8s를 사용하면 Docker Compose를 거의 사용할 필요가 없으며

개발자들이 로컬에서 App을 개발해서 이미지를 생성할 때나 간단하게 컨테이너를 테스트하는 용도로 종종 사용한다.

728x90