[Vagrant] Docker Provisioning
▷ Docker Provisioning on Vagrant Environment
Vagrant 프로비저너는 vagrant up
과정 중에 자동으로 소프트웨어를 설치하거나 머신의 설정을 변경할 수 있도록 해준다.
vagrant ssh
로 박스에 들어가서 소프트웨어를 직접 설치할 수도 있으나, 프로비저닝 시스템을 이용하면 반복되는 과정을 자동화할 수 있다.
Vagrant는 기본적인 쉡스크립트를 이용하는 것부터 시작하여 좀 더 복잡한 형상관리시스템을 이용하여 머신을 프로비저닝할 수 있는 여러가지 옵션을 제공한다.
언제 프로비저닝이 일어날까?
프로비저닝은 Vagrant 환경 생애의 몇몇 지점에서 발생한다.
- 처음
vagrant up
에서 환경을 생성할 때 프로비저닝이 실행된다. 환경이 이미 생성되어 있고 단지 재개하거나 부트업하는 경우--provision
플래그를 명시하지 않으면 프로비저닝이 일어나지 않는다. - 동작중인 환경에서
vagrant provision
을 하였을 때, vagrant reload --provision
이 호출되었을 때,
환경을 올릴 때 --no-provision
을 명시하여 프로비저닝을 실행시키지 않을 수 있다.
▷ 프로비저너의 기본 용례
모든 프로비저너는 Vagrantfile
내에 config.vm.provision
메소드 호출을 사용한다. 다음은 shell 프로비저닝의 예시이다.
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "shell", inline: "echo hello"
end
▷ Docker 프로비저닝
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.provision :docker
end
Docker 프로비저닝을 위해서 Vagrantfile
을 수정하고 vagrant reload --provision
을 실행하면 사내에서는 실패한다. 추가로 박스내 인증서를 설치하도록 하자.
*나중에 bootstrap.sh
에서 자동 실행되도록 만들자
sudo mkdir -p /usr/share/ca-certificates/dungeon
sudo cp -f /vagrant/dungeon.crt /usr/share/ca-certificates/dungeon/dungeon.crt
sudo sed -i "/dungeon/d" /etc/ca-certificates.conf
echo "dungeon/dungeon.crt" | sudo tee -a /etc/ca-certificates.conf
sudo update-ca-certificates
▷ Docker Compose 프로비저닝
# vagrant plugin install vagrant-docker-compose
Installing the 'vagrant-docker-compose' plugin. This can take a few minutes...
Fetching vagrant-docker-compose-1.5.1.gem
Installed the plugin 'vagrant-docker-compose (1.5.1)'!```
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.provision :docker
config.vm.provision :docker_compose, compose_version: "1.29.1"
end
▷ Airflow on Docker
초기 환경 설정
mkdir -p ./dags ./logs ./plugins # /vagrant 밑에 마운트 시킴
echo -e "AIRFLOW_UID=$(id -u)" > .env
데이터 베이스 초기화
# docker-compose --file /vagrant/docker-compose.yaml up airflow-init
몇 번의 시행 착오로 compose_version
을 1.29.1
로 설정한 후 실행하면 또 아래의 오류를 만나게 된다.
ERROR: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
docker 명령어로 로그인을 한 후 다시 시도해 보면 Docker 이미지가 정상적으로 설치가 된다.
vagrant@vagrant:~$ docker login --username xxxxxxxxx --password xxxxxxxx
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/vagrant/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
airflow-init_1 | [2021-12-04 03:48:24,241] {manager.py:214} INFO - Added user airflow
airflow-init_1 | User "airflow" created with role "Admin"
airflow-init_1 | 2.2.2
vagrant_airflow-init_1 exited with code 0
Airflow 실행하기
# docker-compose --file /vagrant/docker-compose.yaml up
여러가지 에러를 만나고 있다. 메모리를 우선 늘리도록 하자. 최소 4G에서 8G를 권장하고 있다.
config.vm.provider "virtualbox" do |v|
v.memory = "4096"
end
메모리 증설 이후 정상적으로 Airflow UI 가 뜨는 것을 확인할 수 있다.
(update)
logs가 정상적으로 기록되지 않아서 DAG이 모두 fail 되는 문제가 발생하였다. airflow가 Task 로그를 기록할 때 dag_id를 폴더 이름으로 사용하는데 호스트 머신의 Windows 파일이름으로 사용 불가능한 특수기호가 포함되어서이다.
docker-compose.yaml
의volumes
설정에서 DAG 파일 배포 편의를 위한dags
폴더만 호스트 머신에 마운트시키도록 수정하면 정상동작한다.volumes: - /vagrant/dags:/opt/airflow/dags - ./logs:/opt/airflow/logs - ./plugins:/opt/airflow/plugins
Enjoy Airflow!!!!
▷ 참고 자료
- https://www.vagrantup.com/docs/provisioning
- https://github.com/leighmcculloch/vagrant-docker-compose
- https://docs.docker.com/engine/reference/commandline/login/
- https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html
Author And Source
이 문제에 관하여([Vagrant] Docker Provisioning), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jaytiger/Vagrant-Docker-Provisioning저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)