[데이터 엔지니어링] Docker 실습 (Ansible)
목적 : 도커 개념 이해 및 설치 실습
도커 개념
- 나중에 정리
Setup deploy-server.md
Prerequsites:
Centos7 with VMWare . 2 core, . 4g RAM, . 100g HDD, . Bridged Network Adapter
1. Install Docker Engine on CentOS (=deploy-server)
su -
cat >install-docker.sh<<EOF
yum remove -y docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine rm -rf /var/lib/docker rm -rf /var/lib/containerd
EOF
source .install-docker.sh
# 1. Yum-utils 최신 버전으로 업데이트
yum install -y yum-utils
# 2. Docker-ce 레포 추가
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
# 3. Docker 설치
yum list docker-ce --showduplicates | sort -r
# 4. Docker 시작 및 서비스 등록
systemctl start docker
systemctl enable docker.service
systemctl enable containerd.service
docker ps -a
systemctl status docker
# systemctl edit docker.service
systemctl daemon-reload
systemctl status docker
yum info net-tools
yum -y install net-tools
netstat -lntp | grep dockerd
docker
Add docker group, and sudoers
groupadd docker
usermod -aG docker centos # same id as windows user newgrp docker
usermod -aG wheel centos
cat >>/etc/sudoers<<EOF
user_name ALL=(ALL) ALL
EOF
2. Install docker-compose
cat >install-docker-compose.sh<<EOF
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
EOF
chmod u+x install-docker-compose.sh ./install-docker-compose.sh
sudo chmod -R 777 /usr/local/bin
docker-compose version
3. Install utils
yum install -y git which
Set hostname of deploy-server
cat >>~/.bashrc<<EOF
hostnamectl set-hostname deploy-server
EOF
4. Backup and restore in VMware Workstation Player
Copy folder and rename it
---------------------------------------
Setup containerized ansible cluster.md
Prerequsites:
Centos7 (=deploy-server)
Docker engine in deploy-server
References:
https://www.docker.com/blog/how-to-deploy-on-remote-docker-hosts-with-docker-compose/
1. Install Ansible using epel
https://www.snel.com/support/how-to-install-ansible-on-centos-7/
su -
yum -y update
yum search epel-release
yum install -y epel-release
yum -y update
yum -y install ansible
ansible --version
Prerequsites:
Centos7 (=deploy-server)
Docker engine in deploy-server
References:
https://www.docker.com/blog/how-to-deploy-on-remote-docker-hosts-with-docker-compose/
https://www.snel.com/support/how-to-install-ansible-on-centos-7/
su -
yum -y update
yum search epel-release
yum install -y epel-release
yum -y update
yum -y install ansible
ansible --version
2. Create linux cluster with the fixed IPs using docker
Download Docker Image
docker pull centos:centos7.9.2009
cat >setup-docker-4-hadoop.sh<<EOF
EOF
오류 발생 및 해결
기존에 있던 도커를 삭제 후 재설치 했더니 아래와 같은 오류 발생했음(이미지 pull error)
- 오류 해결 시도 1 (해결 X)
/var/lib/docker 제거
rm -rf /var/lib/docker/*
오류 해결 x
- 오류 해결 시도 2 (해결 O)
service docker stop
docker-compose build --no-cache
해결 (docker를 끈게 해결책이었나..?)
Set IPs
docker exec -it master /bin/bash
docker exec -it worker1 /bin/bash
docker exec -it worker2 /bin/bash
docker exec -it worker3 /bin/bash
cat >>~/.bashrc<<EOF
EOF
cat >/etc/hosts<<EOF
127.0.0.1 localhost
172.18.0.11 master
172.18.0.31 worker1
172.18.0.32 worker2
172.18.0.33 worker3
EOF
source ~/.bashrc
Create Docker Network
docker network create --subnet=172.18.0.0/16 netgroup
Create fixed IP containers
# privileged : root권한으로 실행
# volume : -v /sys .. volumen 그룹을 부팅해서 줘라
# src : local에 있을 것임
# local에 있는 걸 mapping하겠다
# 최초실행 command
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name master -h master --net netgroup --ip 172.18.0.11 centos:centos7.9.2009 /usr/sbin/init
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name worker1 -h worker1 --net netgroup --ip 172.18.0.31 centos:centos7.9.2009 /usr/sbin/init
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name worker2 -h worker2 --net netgroup --ip 172.18.0.32 centos:centos7.9.2009 /usr/sbin/init
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name worker3 -h worker3 --net netgroup --ip 172.18.0.33 centos:centos7.9.2009 /usr/sbin/init
Set hostnames
docker exec -it master /usr/bin/hostnamectl set-hostname master
docker exec -it worker1 /usr/bin/hostnamectl set-hostname worker1
docker exec -it worker2 /usr/bin/hostnamectl set-hostname worker2
docker exec -it worker3 /usr/bin/hostnamectl set-hostname worker3
Check hostnames
docker exec -it master /bin/hostname
docker exec -it worker1 /bin/hostname
docker exec -it worker2 /bin/hostname
docker exec -it worker3 /bin/hostname
EOFEOF
chmod u+x setup-docker-4-hadoop.sh ./setup-docker-4-hadoop.sh
3. Convert the containerized linux cluster into docker-compose.yml
clean up Containers
docker ps -a
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker network rm netgroup
Create docker-compose.yml
git clone https://github.com/jungfrau70/team2.git PySpark
cd PySpark/Step4_spark/2_Ansible/
ls -al docker-compose.yml
Instanciate docker-compose.yml
docker-compose up
4. Set Root's password for cluster nodes
cd ~
Set root passwd
docker exec -it master passwd
docker exec -it worker1 passwd
docker exec -it worker2 passwd
docker exec -it worker3 passwd
5. Install Openssh server for cluster nodes
cat >install-openssh.sh<<EOF
!/bin/bash
yum install -y openssh-server openssh-clients openssh-askpass
sed -i '/StrictHostKeyChecking/s/^#[ \t]*//g' /etc/ssh/ssh_config
sed -i 's/StrictHostKeyChecking ask/StrictHostKeyChecking no/g' /etc/ssh/ssh_config
sed -i 's/StrictHostKeyChecking True/StrictHostKeyChecking no/g' /etc/ssh/ssh_config
cat /etc/ssh/ssh_config | grep StrictHostKeyChecking
sed -i '/PermitRootLogin yes/s/^#[ \t]*//g' /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep PermitRootLogin
systemctl restart sshd
systemctl status sshd
systemctl enable sshd.service
EOF
chmod u+x install-openssh.sh
docker ps -a
nodes='master worker1 worker2 worker3' for node in $nodes do
docker cp install-openssh.sh $node:/root/
docker exec -it $node /bin/bash /root/install-openssh.sh
docker cp install-openssh.sh master:/root/
docker exec -it master /bin/bash /root/install-openssh.sh
docker cp install-openssh.sh worker1:/root/
docker exec -it worker1 /bin/bash /root/install-openssh.sh
docker cp install-openssh.sh worker2:/root/
docker exec -it worker2 /bin/bash /root/install-openssh.sh
docker cp install-openssh.sh worker3:/root/
docker exec -it worker3 /bin/bash /root/install-openssh.sh
done
-> 만약 위 명령어가 실행이 안되면 재부팅
7. Generate SSH keys for cluster in deploy-server
Generate ssh keys
su -
ssh-keygen
Copy to linux cluster nodes
for node in node done
ssh-copy-id root@master
ssh-copy-id root@worker1
ssh-copy-id root@worker2
ssh-copy-id root@worker3
8. Check if ansible cluster works
Set ansible hosts
cat >/etc/ansible/hosts<<EOF
[cluster]
master ansible_host=172.18.0.11 ansible_user=root
worker1 ansible_host=172.18.0.31 ansible_user=root
worker2 ansible_host=172.18.0.32 ansible_user=root
worker3 ansible_host=172.18.0.33 ansible_user=root
[master]
master ansible_host=172.18.0.11 ansible_user=root
[worker]
worker1 ansible_host=172.18.0.31 ansible_user=root
worker2 ansible_host=172.18.0.32 ansible_user=root
worker3 ansible_host=172.18.0.33 ansible_user=root
EOF
ansible -m ping all
9. Build the docker image for ansible cluster
docker ps -a
build custom docker image
docker commit master dockerHub_ID/centos7:ansible.1
push customer docker image
docker image ls
docker login
docker push dockerHub_ID/centos7:ansible.1 # 이름 변경
생성 확인
10. Clean up
docker ps -a
docker-compose down
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker network rm netgroup
docker system prune -a
cat >/etc/hosts<<EOF
127.0.0.1 localhost
EOF
cat >/etc/ansible/hosts<<EOF
EOF
11. Backup and restore in VMware Workstation Player
Copy folder and rename it
Author And Source
이 문제에 관하여([데이터 엔지니어링] Docker 실습 (Ansible)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yje876/데이터-엔지니어링-Docker-실습저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)