[데이터 엔지니어링] 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)

https://docs.docker.com/engine/install/centos/

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

https://docs.docker.com/compose/install/

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


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 nodesdosshcopyidroot@nodes do ssh-copy-id root@

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

좋은 웹페이지 즐겨찾기