본문 바로가기
Docker

Docker 최종 연습

by 손영진 2023. 8. 6.
728x90

#1 servera ~ c 세대의 인스턴스를 생성하고 각 서버에 도커를 설치하세요.

더보기
<servera, b, c>
sudo -i
hostnamectl set-hostname servera.example.com   // hostname 변경
bash   // 변경한 hostname으로 전환
dnf install docker -y

systemctl enable --now docker
systemctl status docker

#2 3대의 서버를 이용하여 docker swarm mode를 구성하고 Wordpress를 설치하되 DB서버는 manager 노드에, wordpress 서버는 worker 노드에 설치하세요.

더보기
<servera>
docker swarm init --advertise-addr=172.31.45.48   // servera의 사설 ip를 작성하여 swarm leader로 생성

<serverb, serverc>
docker swarm join --token SWMTKN-1-0xamdwc65v745utfwfyji3gpkbldy3gqfkf9zq56cfluafzatk-870x7tfnwq8x694ocfe9rypsa 172.31.45.48:2377
   // servera에서 작성한 명령어에 의해 생긴 docker 명령어를 작성하여 worker를 생성

<servera>
openssl rand -base64 20 | docker secret create root_db_password -
openssl rand -base64 20 | docker secret create wp_db_password -
docker network create -d overlay wp
   // 각 db의 권한에 맞는 password 생성 후 overlay의 driver를 가지는 wp network 생성

docker service create --name mariadb \
> --replicas 1 --network wp --constraint=node.role==manager \
> --secret source=root_db_password,target=root_db_password \
> --secret source=wp_db_password,target=wp_db_password \
> -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_db_password \
> -e MYSQL_PASSWORD_FILE=/run/secrets/wp_db_password \
> -e MYSQL_USER=wp -e MYSQL_DATABASE=wp mariadb:10.1
// mariadb 생성

docker service create --name wp \
> --constraint=node.role==worker --replicas 1 \
> --secret source=wp_db_password,target=wp_db_password,mode=0400 \
> --publish 80:80 --network wp \
> -e WORDPRESS_DB_USER=wp \
> -e WORDPRESS_DB_PASSWORD_FILE=/run/secrets/wp_db_password \
> -e WORDPRESS_DB_HOST=mariadb \
> -e WORDPRESS_DB_NAME=wp wordpress:4.7
// wp 생성

#3 Prometheus 모니터링 서버를 구성하되 serverc에 prometheus 를 설치하고 servera, serverb에서 그 데이터를 입력 받아 grafana로 전송하세요.

더보기
<servera, serverb>
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw \
> --volume=/sys:/sys:ro --volume=/var/lib/docker:/var/lib/docker:ro \
> --volume=/dev/disk:/dev/disk:ro \
> -p 8080:8080 --detach=true \
> --name=cadvisor gcr.io/cadvisor/cadvisor

docker run --name node-exporter -p 9100:9100 \
> --restart=unless-stopped prom/node-exporter:v0.14.0
   // 해당 명령어는 종료되지 않기에 다른 터미널로 다시 접속하여 실행 하는 것을 권장

<serverc>
vim prometheus-cadvisor.yml
{
scrape_configs:
 - job_name: 'prometheus'
 static_configs:
 - targets: ['localhost:9090']
 - job_name: cadvisor
 scrape_interval: 5s
 static_configs:
 - targets: ['[servera의 사설IP]:8080','[serverb의 사설IP]:8080']
 - job_name: 'node-exporter'
 scrape_interval: 5s
 static_configs:
 - targets: ['[servera의 사설IP]:9100','[serverb의 사설IP]:9100']
}

docker run -d --name prometheus \
> -h prometheus -p 9090:9090 \
> -v $(pwd)/prometheus-cadvisor.yml:/etc/prometheus/prometheus.yml \
> prom/prometheus:v1.7.0
     -> 웹브라우저에 serverc공인ip:9090을 통해 prometheus 확인

docker run -d --name grafana -h grafana \
> -e GF_SECURITY_ADMIN_PASSWORD=admin \
> -p 3000:3000 --link prometheus:prometheus grafana/grafana:4.4.3
     -> 웹브라우저에 serverc공인ip:3000을 통해 prometheus 확인

#4 각 서버에 linux 사용자를 생성하고 master의 nana 사용자의 공개키를 각 서버에 복사한 후 master의 nana 사용자의 개인키로 각 서버에 접속하세요.

더보기
<master>
useradd nana
su - nana
ssh-keygen -t rsa
> /home/nana/.ssh/만들고 싶은 키의 이름
> 다시 enter를 통해 넘어감

<servera, b, c>
useradd son
passwd son
>qwer1234

vim /etc/ssh/sshd_config
> 65번째 줄 : PasswordAuthentication yes

systemctl restart sshd

<master>

ssh-copy-id -i .ssh/konan-key.pub son@[각 서버 공인ip 주소]
ssh -i .ssh/konan-key son@공인ip

#5 servera 에 registry 서버를 생성하고 serverb의 nana 사용자로 nginx:v11.0 이미지를 servera에 업로드하세요.

더보기
<servera>
docker run --name registry -d -p 5000:5000 -v /var/lib/registry:/var/lib/registry:Z registry:2

<serverb에서 root계정>
vim /etc/docker/daemon.json
> { "insecure-registries":["servera.example.com:5000"] }
vim /etc/group
> 11번째 줄 : wheel:x:10:ec2-user, yeong[사용자 이름 추가]
systemctl restart docker
su - yeong

<serverb에서 yeong 계정>
sudo docker pull nginx
sudo docker image tag nginx servera.example.com:5000/nginx:v11.0
sudo docker push servera.example.com:5000/nginx:v11.0

sudo docker rmi -f nginx
sudo docker rmi -f servera.example.com:5000/nginx:v11.0

sudo docker pull servera.example.com:5000/nginx:v11.0

<servera>
ls /var/lib/registry/docker/registry/v2/repositories/nginx/_layers/sha256/
// serverb에서 업로드된 images 확인 : image id를 비교하여 확인

'Docker' 카테고리의 다른 글

Docker Swarm & Monitoring & Podman  (0) 2023.08.06
Docker Network  (0) 2023.08.03
Docker Registry  (0) 2023.08.02
다양한 Container 생성  (0) 2023.08.01
Docker의 기본개념  (1) 2023.07.31