<aside> 💡 VM Router에 bridge 만들어서 통신하기

master | node1 | node2 | node3 | node4 | unode1 | unode2

Untitled

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

Untitled

systemctl restart network
# 기존 default gateway address 삭제
ip route del default 
또는 
ip route del default via [지울 Gateway IP]

# default gateway address 추가
route add default gw [게이트웨이주소] [장치명]
netstat -rn :네트워크 확인

Untitled

# IP 확인
ifconfig

Untitled

Untitled

<aside> 💡 바뀐 IP로 nfs서버를 이용해서 volume으로 데이터 공유하기

master

vi /etc/hosts 

Untitled

# node1, node2에 파일복사
scp /etc/hosts node1:/etc/hosts
scp /etc/hosts node2:/etc/hosts
vi /etc/sysconfig/selinux

Untitled

# 방화벽 상태 확인
systemctl status firewalld

# 방화벽 끄기
systemctl disable firewalld --now

<aside> 🌐 nfs서버설정 [From. node1]

# 최상위에 shared directory 만듬
mkdir /shared

# shared directory 에 welcome.msg 파일 만듬
touch /shared/welcome.msg

# 권한설정
chmod 777 /shared

# 공유된 파일 확인
ls -l /shared
# 공유하는 파일 경로설정
vi /etc/exports

Untitled

# 적용
exportfs -a

# 현재 공유된 파일보기
exportfs -v
# nfs 시스템 재시작
systemctl restart nfs

# 서버돌리고 있을땐
reload

</aside>

<aside> ⚙️ local서버설정 [From. master]

#nfs-utils 다운

yum install nfs-utils -y
# shared 폴더가 공유됨 

showmount -e node1

Untitled

# local 서버에 /mnt 폴더에 node1:/shared 폴더를 마운트
mount -t nfs node1:/shared /mnt

# 잘 mount 되었는지 확인
ls -l /mnt

# mount 풀기
umount -a

Untitled

# mount 확인
df -h

Untitled

# local에서 volume 만들기
docker volume create --name [volume이름] --driver local --opt type=[서버타입] --opt o=addr=[nfs서버주소],rw --opt device=:/[mount한 폴더]
docker volume create --name nfsvol --driver local --opt type=nfs --opt o=addr=**192.168.0.32**,rw --opt device=:/shared

Untitled

# container 만들기
docker run -it --name con100 -v nfsvol:/data centos:7

# container 안에 들어가서 welcome.msg 확인
docker exec -it con100 bash

# 공유된 파일 확인
ls -l /data

Untitled

<aside> 🚨 오류정리

Untitled

**# Error response from daemon: error while mounting volume '/var/lib/docker/volumes/nfsvol/_data': failed to mount local volume: mount :/consharedvol:/var/lib/docker/volumes/nfsvol/_data, data: addr=10.0.2.12: no route to host 
문제 해결

# nfsvol 삭제**
docker volume rm nfsvol

**# --opt o=addr=[nfs서버 IP주소] 다시확인**
docker volume create --name nfsvol --driver local --opt type=nfs --opt o=addr=**192.168.0.32**,rw --opt device=:/shared

**# volume 확인**
docker volume ls

</aside>

<aside> 💡

HTML 파일 volume 사용법

**# 홈 디렉토리 확인**
docker run -d --name myweb nginx
docker exec myweb find / -name "index.html"

**#** **-v [volume이름]:[nginx 홈디렉토리]** 
docker run -d --name web80 -p 80:80 -v webvol:/usr/share/nginx/html/ nginx

Untitled

</aside>

<aside> 🌐 실행중인 container volume 공유하기 :

# con-a 일반 alpine container 생성
docker run -itd --name con-a -v /root:/data alpine

# con-a와 volume을 공유한 con-b busybox container 생성
docker run -itd --name con-b --volumes-from con-a busybox

<aside> 🚨 con-a 사망

# con-b 확인
**docker exec -it con-b sh

cd data
ls -l**

Untitled

</aside>

<aside> ✨ -v 여러개도 가능

mkdir test1 test2 test3
touch /test1/ha1.txt /test2/ha2.txt /test3/ha3.txt

# con100 -> con200 -> con300
docker run -itd --name con100 -v /test1:/data -v /test2:/secret -v /test3:/imsi alpine
docker exec -it con200 ls -l /test1

</aside>

</aside>

<aside> ➕ .sh파일 만들기

**vi rm-container.sh

# 실행 권한 주기
chmod +x rm_container.sh
./rm_container.sh 로 실행가능**

Untitled

</aside>

<aside> 💡 Ansible로 container 관리하기

Untitled

# Ansible 설치
yum install ansible -y

Untitled

Untitled

# ansible의 hosts파일 수정
vi /etc/ansible/hosts

Untitled

# ping 확인
ansible servers -m ping

# ping 확인 비밀번호입력
ansible servers -m ping -k

Untitled

# node1, node2 동시 container 만들기
ansible servers -m shell -a "docker run -itd --name con100 -v convol:/data alpine"

Untitled

# node1, node2 container 확인
ansible servers -m shell -a "docker ps -a"

Untitled

# volume data 확인
ansible servers -m shell -a "docker exec con100 ls -l /data"

Untitled

# 환경변수룰 이용해서 운영
ansible servers -m shell -a "docker exec con100 touch /data/${HOSTNAME}-good.news"

Untitled

# 확인
ansible servers -m shell -a "docker exec con100 ls -l /data"

Untitled

</aside>

<aside> 💡 다른 docker host로 docker volume 이전하기

# convol volume 생성
docker volume create convo

# convol volume으로 busybox mycon100 container 생성
docker run --name mycon100 -it -v convol:/data busybox

# file_from_container.txt 생성
touch /data/file_from_container.txt

Ctrl+p, Ctrl+q

# convol 경로 복사
docker volume inspect convol

# 경로로 이동
cd /var/lib/docker/volumes/convol/_data

# 크기가 10m인 big.file 만들기
fallocate -l 100m big.file

# 현재 디렉토리에 있는 파일들을 backup.tar로 압축
tar cvf backup.tar .

cd 

ls -l

# node2로 복사
scp backup.tar node2:/root/

</aside>

</aside>