[AWS 실습] EFS(Elastic File System) 사용해보기

<NFS설정>

-도커가 1개가 아닌 swarm으로 구성되어있기에 전체에 적용을 위해 공유 디렉터리를 생성하여 마운트

-AWS 보안그룹에 2049 TCP포트 개방해주기

sudo apt-get -y install nfs-kernel-server 
#위는 ubuntu, 아래는 Amazon Rinux
#sudo yum -y install nfs-utils

sudo systemctl restart nfs-server
#위는 ubuntu, 아래는 Amazon Rinux
#sudo systemctl restart nfs-utils

sudo mkdir /shared
sudo chmod -R 777 /shared/

sudo vi /etc/exports
/shared            *(rw,no_root_squash,no_subtree_check)
#임시로..전체 대역대로해둠주의 

sudo exportfs -r
sudo showmount -e

#출력 화면
#Export list for NFS:
#/shared *

sudo systemctl restart nfs-server
sudo apt-get -y install nfs-common
#위는 ubuntu, 아래는 Amazon Rinux
#sudo yum -y install nfs-utils

sudo showmount -e 10.20.30.100

#출력화면
#Export list for 10.20.30.100:
#/shared *

sudo mkdir /remote
sudo mount -t nfs  10.20.30.100:/shared /remote

<web.yml 내용 수정>

#Manager 노드의 Docker-compose 파일 수정

vi web.yml

volumes: 
  - /remote/wordpress:/var/html/www

#=>wordpress컨테이너의 volumes를 위의 내용으로 수정 , 
#worker에 있는 remote/wordpress 디렉터리를 컨테이너의 /var/html/www 디렉터리에 마운트

sudo docker stack deploy --compose-file=web.yml web
#=>수정한 내용으로 web.yml을 재배포한다 

#docker-swarm에 wordpress 설치

#외부 데이터베이스 연결

version: '3'
services:
  wordpress:
    image: wordpress
    deploy:
      replicas: 3
      placement:
        constraints: [node.role != manager]
      restart_policy:
        condition: on-failure
        max_attempts: 3
    volumes:
      - /remote/wordpress:/var/www/html
    environment:
      SERVICE_PORTS: 80
      WORDPRESS_DB_HOST: database-1.cgmf5deyqagt.us-east-1.rds.amazonaws.com
      WORDPRESS_DB_USER: admin
      WORDPRESS_DB_PASSWORD: test1234
      WORDPRESS_DB_NAME: wpdb
    networks:
      - web

  proxy:
    image: dockercloud/haproxy
    depends_on:
      - wordpress
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 80:80
    networks:
      - web
    deploy:
      mode: global
      placement:
        constraints: [node.role == manager]

  visual:
    image: dockersamples/visualizer
    ports:
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      mode: global
      placement:
        constraints: [node.role == manager]

networks:
  web:
    external: true