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
컨테이너를 삭제해도, 볼륨은 그대로 남아있게 된다.
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"
}
rapa@rapa:~$ docker container inspect centos03 -f "{{.Config.Labels.color}}"
blue
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 소스코드가 필요하다.
하지만 컨테이너를 이용하게 되면 이를 두개의 컨테이너에 구성할 수 있다.
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
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를 가지고 접속
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
쿠버네티스
볼륨의 경우 도커에서는 현재 로컬에 있는 볼륨을 사용하고 있다. 클라우드 환경에서는 외부에 있는 별도의 스토리지의 볼륨을 마운트 하여 사용해야 영구적으로 볼륨을 사용할 수 있다. 이러한 볼륨을 영구볼륨(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