- docker container 와 volume(mount)를 연결해줄 폴더를 생성해주기
# server1
mkdir -p docker/airflow && cd docker/airflow
mkdir dags logs config plugins temp
# server2
mkdir -p docker/datalake && cd docker/datalake
mkdir data
# server3
mkdir -p docker && cd docker
mkdir -p elasticsearch/config
mkdir -p logstash/config logstash/pipeline
mkdir -p kibana/config
- 폴더에 존재하는 서버에 맞게 각각 파일을 생성
server1 |
server2 |
server3 |
|
|
|
dag안에 폴더 혹은 logs 안에 폴더는 따로 설정하지 않아도 됨. |
-- |
-- |
- airflow와 datalake의 image는 커스텀해서 생성해줘야 함.
- 컨테이너를 띄우고싶은 각 서버에 커스텀한 이미지가 있어야지만 swarm을 통해서 한 서버에서 컨테이너 관리가 가능함.
- 혹은, docker image를 docker hub에 넣어놓기.
# server1
cd ~/docker/airflow
## airflow_custom이라는 이름으로 이미지를 생성
sudo docker build -t airflow_custom .
# server2
cd ~/docker/datalake
sudo docker build -t datalake .
# image 확인
sudo docker images
# server1
cd ~/docker
chmod 744 swarm_start.sh
./swarm_start.sh
-----
# 실행결과
...
Since --detach=false was not specified, tasks will be created in the background.
In a future release, --detach=false will become the default.
Creating service seoul_api_elasticsearch
Creating service seoul_api_logstash
Creating service seoul_api_kibana
# service 확인 - server1에서만 가능
## 명령어 실행시 replicas에 1/1이 뜨면 되는것
## init은 실행되고 죽는 컨테이너라 0이 되더라도 괜찮음.
sudo docker service ls
# container 확인 - 각 서버에서 확인 가능
sudo docker container ls