[클라우드/Docker 기본(6) - Docker 볼륨과 네트워크]

SooYeon Yeon·2022년 8월 30일
0

클라우드 Docker

목록 보기
7/24

볼륨의 종류

  1. nfs(binding)
    • 호스트의 특정 디렉토리와 컨테이너의 특정 디렉토리를 마운트
    • /root/test:/var/www/html
  2. isci(volume)
    • 별도의 볼륨을 생성하고 해당 볼륨을 컨테이너의 특정 디스크로 활용하는 방법
    • testvolume:/root
    • /root는 /dev/sda3과 같이 특정 파티션이 된다.
  3. tmpfs
    • 디스크/스토리지의 특정 공간을 사용하는 것이 아니라 메모리를 사용하는 방법
    • 속도가 빠른 대신 영구 보관은 불가능하다.

Docker 실습

  • centos 컨테이너 생성
  • 이 centos 컨테이너는 우분투의 커널을 사용하는 것임
apa@rapa:~$ docker container run -it --name centos1 --hostname test centos:7 /bin/bash
[root@test /]# hostname
test
[root@test /]# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	test
[root@test /]# uname -a
Linux test 5.15.0-46-generic #49~20.04.1-Ubuntu SMP Thu Aug 4 19:15:44 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[root@test /]# rapa@rapa:~$ 
rapa@rapa:~$ docker container ls
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS              PORTS     NAMES
5d1e25b8568a   centos:7   "/bin/bash"   2 minutes ago   Up About a minute             centos1

볼륨을 생성하고 붙이기

  • 먼저 기존 볼륨 삭제
rapa@rapa:~$ docker volume rm $(docker volume ls -q)
03e1a0c43686b027ea2c1505224baf1b124b578c7234eeb565a06f2beac3a9e2
5b5f726af39b789fa674b939e20c91adefbb2d0724a6a15b50f1d3e7ae0488a2
5e38da4e5d2c64628b443da426013e90ee42f5b2cd5ee1189a053e823275bed1
6ec7c92901ecc2082ceb0df35f213ce7d5a4c439bf84fe9996419ce76b391fee
290cfd1867ba0a4e92cb2bdb033e0a9f6f1ceafae111c2f5dc5da5a2e3d506cf
435cd5e302cade39d8684381ab1d5309e1e442c1aa7dd52874a9e9a3df106f9a
0911f8995b9652cdf4adb452e18bc2fefaef392f855a8d4e3c06f85011652f38
49399bd71ce98ed3730eb47afaab8fd2ac5c836f4c24d90534d2e6ba1d1c69b8
  • 볼륨 생성
rapa@rapa:~$ docker volume create testvol1
testvol1
  • 생성한 볼륨과 연결
rapa@rapa:~$ docker container run -it --name centos01 -v testvol1:/root centos:7 /bin/bash 
[root@9c6cd6fe4a84 /]#
[root@9c6cd6fe4a84 /]# df -h | grep /root
/dev/sda5        20G  9.4G  8.8G  52% /root

[root@9c6cd6fe4a84 /]# touch /root/test.txt
[root@9c6cd6fe4a84 /]# ls /root/
anaconda-ks.cfg  test.txt
[root@9c6cd6fe4a84 /]# exit
exit

위와 같이 호스트에 있는 여유 공간을 사용할 수 있다. 만약 볼륨의 크기를 지정하여 사용하고 싶다면 외부 플러그인을 활용해야 한다.

rapa@rapa:~$ docker container rm centos01
centos01
rapa@rapa:~$ docker volume ls
DRIVER    VOLUME NAME
local     testvol1

컨테이너를 삭제해도, 볼륨은 그대로 남아있게 된다.

  • 기존 볼륨을 새로운 컨테이너 centos02에 연결해 생성
rapa@rapa:~$ docker container run -it --name centos02 -v testvol1:/root centos:7 /bin/bash 
[root@729c773a3bee /]# ls /root/
anaconda-ks.cfg  test.txt

앞에서 volume에 넣어둔 test.txt파일이 그대로 있는 것을 확인할 수 있다.

  • 라벨을 포함한 컨테이너 생성
rapa@rapa:~$ docker container run -it --name centos03 --label color=blue centos:7 /bin/bash 
[root@d58f469c7aab /]# rapa@rapa:~$ 
rapa@rapa:~$ docker container inspect centos03
"Labels": {
                "color": "blue",
                "org.label-schema.build-date": "20201113",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS",
                "org.opencontainers.image.created": "2020-11-13 00:00:00+00:00",
                "org.opencontainers.image.licenses": "GPL-2.0-only",
                "org.opencontainers.image.title": "CentOS Base Image",
                "org.opencontainers.image.vendor": "CentOS"
            }
  • value만 뽑아 출력 가능
rapa@rapa:~$ docker container inspect centos03 -f "{{.Config.Labels.color}}"
blue
  • ip만 뽑아내기
rapa@rapa:~$ docker container inspect centos03 -f "{{.NetworkSettings.IPAddress}}"
172.17.0.2

도커 네트워크

rapa@rapa:~$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
9039c3d8d0ca   bridge    bridge    local
3ead376f089f   host      host      local
39430d1f4412   none      null      local

bridge : NAT를 통해 외부와 연결

host : 호스트의 주소를 컨테이너와 동일하게 취급한다.

none : 네트워크 사용하지 않음

swarm같은 클러스터 환경에서는 “overlay” 드라이버가 생성된다.

도커 실습

워드프레스 구축하기

실제환경에서는 php설치, apache설치, mariadb(mysql) 설치, wordpress 소스코드가 필요하다.
하지만 컨테이너를 이용하게 되면 이를 두개의 컨테이너에 구성할 수 있다.

  1. mysql이미지 - 배포 -> DB 컨테이너
  2. wordpress 이미지 -> 배포 -> WP 컨테이너
  • db 컨테이너 생성
rapa@rapa:~$ docker container run -d --name wpdb -v wpdbvol:/var/lib/mysql --restart=always -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=wordpress mysql:5.7
f9e700c07291b9e755231081bc6846b21ab351b0db42a16fc993733530e13042
  • 볼륨 확인
rapa@rapa:~$ docker volume ls
DRIVER    VOLUME NAME
local     testvol1
local     wpdbvol
  • wordpress 컨테이너 생성
rapa@rapa:~$ docker container run -d --restart=always -p 8080:80 --name wp -e WORDPRESS_DB_PASSWORD=test123 -e WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USER=root --link wpdb:mysql -v wpvol:/var/www/html wordpress
8b27556f1e3aea77e765b1b5084d9b5de6d025cc63c42be072dde222aaa0e5e7

ip add로 확인한 IP를 가지고 접속

컨테이너 모니터링 도구 cAdvisor 컨테이너 실행

docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=9559:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

쿠버네티스

  • 컨테이너나 서비스를 직접 만드는 도구는 아니다. 컨테이너, 네트워크, 볼륨 등을 관리(오케스트레이션)하는 도구이다.
  • 실제 컨테이너를 만드는 역할은 runtime이 수행하게 된다.
  • 이 runtime으로 docker(containerd) , cri-o, podman, rocket 등을 사용할 수 있고, 쿠버네티스는 모든 런타임과 통신이 가능하다.
  • 이로 인해 사실상 컨테이너 오케스트레이션의 표준으로 불린다.

볼륨의 경우 도커에서는 현재 로컬에 있는 볼륨을 사용하고 있다. 클라우드 환경에서는 외부에 있는 별도의 스토리지의 볼륨을 마운트 하여 사용해야 영구적으로 볼륨을 사용할 수 있다. 이러한 볼륨을 영구볼륨(Persistent Volume)이라고 한다.

개발자가 요청하는 볼륨을 IP정보나 마운트 타입에 관계없이 조건만 부합한다면 자동으로 마운트될 수 있는 방법을 제공해야한다. 이를 kubernetes에서는 PVC(Persistent Volume Claim)이라고 한다.

개발자(PVC) ——————> 스토리지(PV)

필요할 때마다 그때그때 볼륨을 제공하는 방법은 storage class라는 방법을 사용하면 편리하다.

  • 최소 하나이상 연결되어있지않은 네트워크/볼륨을 삭제할 지 설정
rapa@rapa:~$ docker network prune
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
rapa@rapa:~$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
testvol1
wpdbvol
wpvol

Total reclaimed space: 287.2MB
  • 한번에도 가능
rapa@rapa:~$ docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

0개의 댓글