✊ 필오의 개발일지
Back to Posts
2022년 2월 20일

도커 볼륨, 네트워킹, 로깅

도커 볼륨, 네트워킹, 로깅

왜 우린 도커를 써야하나요? 

  1. 지속가능한 데이터를 활용하기 위해 볼륨을 사용할 수 있으며, 호스트볼륨을 공유하거나, 볼륨컨테이터를 만들어 활용하거나, 도커 볼륨을 활용할 수 있다.
  2. 도커는 컨테이너 내부IP를 순차적으로 할당하며,(컨테이너 별로 내부망이 생성) veth 인터페이스로 접근가능하다. 도커가 자체적으로 제공하는 5가지 네트워크 드라이버가 존재한다.
  3. 도커는 컨테이너의 표준출력과 에러출력을 별도로 메타데이터 파일로 저장하며, 이를 확인가능하도록 한다. 로깅을 도와주는 써드파티 드라이버들도 존재한다.

도커 볼륨?


1. 호스트 볼륨을 공유하는 방법

복사개념으로 컨테이너 directory를 host directory에 마운트한다.

예시 컨테이너 2가지 생성

  1. mysql DB container
  2. 워드프레스 웹 서버 container

1. mysql DB container

❯ docker run -d \ --name wordpressdb_hostvolume \ -e MYSQL_ROOT_PASSWORD=password \ -e MYSQL_DATABASE=wordpress \ -v /home/wordpress_db:/var/lib/mysql \ mysql:5.7

2. 워드프레스 웹 서버 container

❯ docker run -d \ -e WORDPRESS_DB_PASSWORD=password \ --name wordpress_hostvolume \ --link wordpressdb_hostvolume:mysql \ -p 80 \ wordpress

fyi; -v [호스트 공유 디렉토리]:[컨테이너의 공유 디렉터리]

2. 볼륨 컨테이너를 활용하는 방법 (-volumes-from)

docker run -i -t \ > --name volumes_from_container \ > --volumes-from volume_overide \ #volume_overide가 공유하는 > ubuntu:14.04

볼륨 컨테이너

3. 도커가 관리하는 볼륨을 생성할 수 있다.

도커 자체에서 제공하는 볼륨기능을 활용해, 데이터를 보존할 수도 있다.

1. 볼륨 생성

docker volume create --name myvolume
docker run -i -t \ > --name myvolume_auto \ > -v /root/ \ > ubuntu:14.04
[볼륨의 이름]:[컨테이너의 공유 디렉토리]

2. 볼륨 삭제

fy; Stateless 설계

도커 네트워크 구조

root@75308a74b2c2:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:18 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1532 (1.5 KB) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

도커 네트워크 기능

컨테이너 생성시

도커가 자체적 제공하는 네트워크 드라이버

써드파티 플러그인 솔루션

docker network ls NETWORK ID NAME DRIVER SCOPE 2013d2e38a9f bridge bridge local 9ce30268dbf6 host host local c325e2a4437b none null local

브릿지 bridge

docker network create --driver bridge mybridge
docker run -i -t --name mynetwork_container \ --net mybridge \ ubuntu:14.04

--net-alias

docker run -i -t -d --name network_alias_container1 \ > --net mybridge \ > --net-alias alicek106 ubuntu:14.04 616982dd067988f1e76a04709ad74287dceb73410f886f1630b8364634fe4565 ~ docker run -i -t -d --name network_alias_container2 \ --net mybridge \ --net-alias alicek106 ubuntu:14.04 4d56a82ace82cc8118e9ef8d5502db76497fce0f7499960f5dcb624c8a006eaf ^[[A ~ docker run -i -t -d --name network_alias_container3 \ --net mybridge \ --net-alias alicek106 ubuntu:14.04 d90963f31e42595264165839fbff2d78f8075640f5a4cea6e6782481636edbf9

Docker DNS, Round-Robin 방식

호스트 네트워크

docker run -i -t --name mynetwork_host \ --net host \ ubuntu:14.04

none 네트워크

말그대로 아무런 네트워크를 쓰지 않는 것.

docker run -i -t --name mynetwork_none \ --net none \ ubuntu:14.04

container 네트워크

docker run -i -t --name mynetwork_none \ --net container:network_container_1 \ ubuntu:14.04

Container Logging

json-file 로그 사용하기

docker logs --tail 2 mysql 2022-02-20T11:18:41.976679Z 0 [Note] mysqld: ready for connections. Version: '5.7.36' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
docker logs -f -t mysql # 전체 출력

위와같은 컨테이너 로그는 JSON형태로 도커 내부저장

cat /var/lib/docker/container/${CONTAINER_ID}/${CONTAINER_ID}-json.log
  1. syslog
  2. jornald
  3. fluentd
  4. awslogs

1. syslog 로그

2. fluentd 로그

3. 아마존 클라우드워치 로그

도커 환경으로 구성된 인프라들을 최근들어 자주 접하게 되고, 프론트 리소스도 도커, 쿠버네티스 환경에서 운영됨에 따라, 프론트 개발자도 이에 대한 지식이 필요하다고 느껴 스터디를 진행합니다. 스터디는 “시작하세요 도커/쿠버네티스” 책으로 진행합니다.


참고

Previous레거시를 잘 만들기, 해석하기 (feat. 프로그래머의 뇌 🧠)
Next도커 개념과 컨테이너

Related

© 2025 Felix