[Docker] 3tier Web service Docker compose

hugingstar·2026년 2월 11일

Docker

목록 보기
16/19
post-thumbnail

Ohchestration :여러개의 Container를 정의하고 배포한다.

  • Dockerfile + yaml
  • compose.yml
    • service
    • volume
    • network

Docker compose 설치

curl -L "https://github.com/docker/compose/releases/download/1.27.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 권한 확인
ls -l /usr/local/bin/docker-compose

# 실행 권한을 준다.
chmod a+x /usr/local/bin/docker-compose

# 버전 확인
docker-ompose --verion

Build

  • Dockerfile을 생성
mkdir compose01

# Dockerfile 생성
vi build_image

# 작성한 내용
FROM rockylinux:9.3.20231119

RUN dnf update -y && dnf install -y httpd
  • 이미지 Build
# 실행
docker image build -t httpd:1.0 -f build_image .

  • 컨테이너의 history 확인
docker image history httpd:1.0

  • 여기까지 했으면 httpd를 설치해 놓은 컨테이너를 만들었다. 실행은 아직 안되었으므로 실행을 한다.
  • 실행용으로 새로운 Dockerfile을 하나 만든다. 위에서 만든 httpd:1.0 이미지를 사용해서 만든다.
vi Dockerfile

# 작성한 내용
FROM httpd:1.0

VOLUME ["/var/www/html/files"]

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
  • 도커 컴포즈
vi docker-compose.yaml

# 작성한 내용
version: '2.0'

services:
  webserver_80:
    build: .
    ports:
      - "80:80"
    volumes:
      - "/root/htmldata:/var/www/html"

  webserver_8080:
    build: .
    ports:
      - "8080:80"
    volumes:
      - "/root/htmldata:/var/www/html"

networks:
  compose_network:
    driver: bridge
  • html 파일을 만들어준다. 안에 들어간 내용은 간단히 작성했다.
mkdir ~/htmldata

echo "docker-compose" > ~/htmldata/index.html
  • docker compose up
# 컴포즈 실행 (compose 파일이 있는 곳)
docker compose up

# 컴포트 프로세스
docker-compose ps

  • 크롬에서 80번 포트와 8080번 포트 둘 다 접속이된다.
10.17.0.150:80
10.17.0.150:8080

  • 컴포즈 실행한 것 다운한다. 모든 애들의 이미지를 지우면서 다운한다.
docker-compose down --rmi all
  • 백그라운드 실행은 d 옵션, 프롬프트를 입력할 수 있다.
docker-compose up -d

MariaDB

  • 컴포즈로 데이터베이스 컨테이너도 만들 수 있다.
version: '2.0'

services:
  mariadb:
    image: mariadb:latest
    container_name: mariadb-server
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: P@ssw0rd
      MYSQL_DATABASE: testDB
      MYSQL_USER: kedu
      MYSQL_PASSWORD: P@ssw0rd
    volumes:
      - mariadb_data:/var/lib/mysql

volumes:
  mariadb_data:
    driver: local
    
# 백그라운드 실행
docker-compose up -d

# bash 실행하면서 접속
docker container exec -it mariadb-server /bin/bash

# 마리아DB 접속
mariadb -u root -p

# 데이터베이스 조회
SHOW DATABASES;

# 테이블 조회
SELECT User, Password, Host FROM mysql.user;

#DB 나가기, 컨테이너 종료
exit

# 컴포즈 실행되었던거 내리기
docker-compose down --rmi all

# 마운트 정보 확인하기
docker container inspect mariadb-server

  • 마운트 잘 된 것이 보인다.

  • 볼륨 경로로 들어가보면 데이터베이스 관련된 파일들을 모두 볼 수 있다.
cd /var/lib/docker/volumes/compose02_mariadb_data/_data

# 디렉토리 지정해서 파일 
unzip fastapi_3tier_v3.zip -d 3tier/

# 파일 정리
mkdir static
mkdir dynamic

# 동적파일 정리
mv *.py dynamic
mv board/ dynamic/
mv member/ dynamic/

# 정적파일 정리
mv *.html static/
mv favicon.ico static/
mv js/ static/
mv css/ static/

  • 정리 후

여기서 WEB/WAS/DB 3Tier로 잡는다.

rockylinux:9.3.20231119

WEB

  • httpd Package 설치
  • httpd (ProxyPass)

WAS

  • Python3, pip package
  • database.py에 DB 주소 변경
  • Python3 main.py

DB

  • mariaDB Package 설치
  • maridb-secure-installation
  • User 추가, sql로 Restore
# Dockerfile
touch web_config
touch was_config
touch db_config

# web_config
FROM rockylinux:9.3.20231119
RUN dnf update -y && dnf install -y httpd

# was_config
FROM rockylinux:9.3.20231119
RUN dnf update -y
RUN dnf install python3 python3-devel gcc -y
RUN pip3 install --user fastapi uvicorn sqlalchemy pymysql cryptography python-multipart


# db_config
FROM FROM rockylinux:9.3.20231119
RUN dnf update -y && dnf install -y mariadb-server
  • docker-compose.yml 작성한 내용 : 이미지 빌드부터 시작할 수 있다.
root@docker-00:~/3tier# vi docker-compose.yml
version: '2.0'

services:
  web:
    build:
      dockerfile: web_config
      context: .
    container_name: web_server
    ports:
      - "80:80"
    networks:
      - 3tier
  was:
    build:
      dockerfile: was_config
      context: .
    container_name: was_server
    networks:
      - 3tier

  db:
    build:
      dockerfile: db_config
      context: .
    container_name: db_server
    ports:
      - "3306:3306"
    networks:
      - 3tier
  • 용량이 모자란 경우에는 추가해줘야한다. 아래 로그로 fdisk 적용하는 방법

root@docker-00:~# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x58ae295c.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (1-4, default 1):
First sector (2048-83886079, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-83886079, default 83886079):

Created a new partition 1 of type 'Linux' and of size 40 GiB.

Command (m for help): p
Disk /dev/sdb: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x58ae295c

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 83886079 83884032  40G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
  • 파일시스템 적용하는 과정 : mkfs를 사용해서 파일시스템을 적용한다.
root@docker-00:~# mkfs.
mkfs.bfs     mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.ntfs
mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.vfat
root@docker-00:~# mkfs.ext4
.Xauthority           .docker/              3tier/                htmldata/
.bash_history         .lesshst              compose01/            mountpoint/
.bashrc               .profile              compose02/            requirement.txt
.cache/               .viminfo              docker/               snap/
.config/              2.txt                 fastapi_3tier_v3.zip  webapp/
root@docker-00:~# mkfs.ext4
.Xauthority           .docker/              3tier/                htmldata/
.bash_history         .lesshst              compose01/            mountpoint/
.bashrc               .profile              compose02/            requirement.txt
.cache/               .viminfo              docker/               snap/
.config/              2.txt                 fastapi_3tier_v3.zip  webapp/
root@docker-00:~# mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 10485504 4k blocks and 2621440 inodes
Filesystem UUID: f3d9b4ab-e948-42a5-8d82-2ddb8ae2ed49
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
  • 파일시스템을 마운트한다.
root@docker-00:~# mkdir /docker_data
root@docker-00:~# mount /dev/sdb1 /docker_data/
root@docker-00:~# df -h
파일 시스템     크기  사용  가용 사용% 마운트위치
tmpfs           387M  2.0M  385M    1% /run
/dev/sda3        20G   18G  980M   95% /
tmpfs           1.9G     0  1.9G    0% /dev/shm
tmpfs           5.0M     0  5.0M    0% /run/lock
/dev/sda2       512M  6.1M  506M    2% /boot/efi
tmpfs           387M   96K  387M    1% /run/user/1000
tmpfs           387M   64K  387M    1% /run/user/0
/dev/sdb1        40G   24K   38G    1% /docker_data
  • UUID 확인 과정 : blkid
root@docker-00:~# blkid | grep sdb1
/dev/sdb1: UUID="f3d9b4ab-e948-42a5-8d82-2ddb8ae2ed49" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="58ae295c-01"
  • fstab에 UUID를 등록한다.

  • 재부팅 한 번 해준다.
init 6
  • daemon.json
vi /etc/docker/daemon.json

# 작성한 내용
{
  "data-root": "/docker_data"
}

# 도커 재시작
systemctl restart docker

# 디스크 사용량 확인 
df -h

  • 새로운 디스크 용량 추가 완료후에 다시 시작 (한참걸린다.)
docker-compose -f docker-compose.yml run -d

  • 볼륨 설정 부분을 보면 주석을 풀고 경로를 바꾼다.
vi /etc/containerd/config.toml

17 root = "/docker_data/containerd"

systemctl restart containerd.service
systemctl restart docker
  • /dev/sdb1 에 용량을 추가하고 있다.
# 완료 전
root@docker-00:~# df -h
파일 시스템     크기  사용  가용 사용% 마운트위치
tmpfs           387M  2.0M  385M    1% /run
/dev/sda3        20G   19G     0  100% /
tmpfs           1.9G     0  1.9G    0% /dev/shm
tmpfs           5.0M     0  5.0M    0% /run/lock
/dev/sda2       512M  6.1M  506M    2% /boot/efi
/dev/sdb1        40G  356K   38G    1% /docker_data
tmpfs           387M   96K  387M    1% /run/user/1000
tmpfs           387M   64K  387M    1% /run/user/0

# 완료 후 
root@docker-00:~/3tier# df -h
파일 시스템     크기  사용  가용 사용% 마운트위치
tmpfs           387M  2.0M  385M    1% /run
/dev/sda3        20G   19G     0  100% /
tmpfs           1.9G     0  1.9G    0% /dev/shm
tmpfs           5.0M     0  5.0M    0% /run/lock
/dev/sda2       512M  6.1M  506M    2% /boot/efi
/dev/sdb1        40G  253M   37G    1% /docker_data
tmpfs           387M   96K  387M    1% /run/user/1000
tmpfs           387M   64K  387M    1% /run/user/0

왜 이런 현상이 발생?

  • Docker 위에 여러개의 컨테이너가 있는데, 지금 상황은 도커가 중간에 Container runtime=Containerd를 따로 사용하고 있어서, Containerd의 경로도 바꿔줘야 한다.
  • 웬만하면 디스크 크기를 처음 시작할 때 키워주는게 좋다.
  • stdin_open: true, tty: true 옵션을 추가해줬다.

root@docker-00:~/3tier# vi docker-compose.yml
      - 3tier
    stdin_open: true
    tty: true

  was:
    build:
      dockerfile: was_config
      context: .
    container_name: was_server
    networks:
      - 3tier
    stdin_open: true
    tty: true

  db:
    build:
      dockerfile: db_config
      context: .
    container_name: db_server
    ports:
      - "3306:3306"
    networks:
      - 3tier
    stdin_open: true
    tty: true

networks:
  3tier:
    driver: bridge
docker container exec -it web_server /bin/bash
systemctl status httpd

rpm -qa | grep httpd

vi /etc/httpd/conf/httpd.conf

# 변경한 내용
...
124 ProxyPass /api http://was-server:8000/api
125 ProxyPassReverse /api http://was-server:8000/api
126 DocumentRoot "/var/www/html"
저장 

# ping test
dnf install -y iputils
ping was-server

  • static 파일과 dynamic 파일들을 정리해준다.
# Static file
docker container cp static/. web_server:/var/www/html

# 확인
docker container exec -it web_server /bin/bash
ls -l /var/www/html/

# BACKGROUD 설정
ps -ef
ps aux
 /usr/sbin/httpd -D BACKGROUND

# 파일 내용 확인
curl localhost

# service 파일 확인
ls -l /etc/systemd/system

  • 여기까지 왔으면 정적 파일은 접속이 가능하다.

  • 이제 부터는 WAS 처리를 해줘야한다.
# was 컨테이너 접속
docker container exec -it was_server /bin/bash

# dynamic file 모두 넣기
docker container cp dynamic/. was_server:/root

# 확인
cd ~
ls -l

# db_server로 핑테스트
dnf install -y iputils

  • database.py 파일에서 HOST 이름을 변경한다.

  • 터미널이 종료되어도 프로그램을 강제로 종료하지 말라는 처리를해준다.
  • 원래 화면에 출력되어야 할 내용(결과값)을 out.log라는 이름의 파일에 저장하라는 뜻이다.
  • 2>&1: 에러 메시지(Standard Error)도 정상 출력(Standard Output)과 똑같이 out.log 파일에 다 같이 기록하라는 아주 중요한 설정이다.
  • &: 이 명령어를 '백그라운드'에서 실행하라는 뜻입니다
nohup python3 main.py > out.log 2>&1 &

  • out.log를 보면 로그가 아래에 순차적으로 기록되려고 준비하고 있다.
vi out.log

# 컨테이너를 나온다.
exit

  • 여기서부터는 db_server 부분을 설정한다.
# sql 파일 넣기
docker container cp webtest_DB.sql db_server:/root

# 데이터베이스 서버 접속
docker container exec -it db_server /bin/bash

# 백그라운드로 실행한다는 의미
mariadbd-safe --user=mysql &

  • 유저와 경로를 설정하면서 데이터베이스를 만든다.
# 데이터베이스 경로 설정
mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql/

# 백그라운드로 실행
mariadbd-safe --user=mysql &

# MariaDB ping test
mariadb-admin ping

  • 올바르게 실행되었을 때 출력창

  • 마리아 DB 보안 설정
# 명령어
mariadb-secure-installation

# 설정한 내용
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

설치 완료!
  • MariaDB 실행 및
# 로그인
mariadb -u root -p

# 모든 권한 주면서 유저 만들기
GRANT ALL PREVILEGES ON *.* TO 'kedu'@'%' IDENTIFIED BY 'P@ssw0rd';

FLUSH PRIVILEGES;

exit

  • 이제 kedu 라는 아이디로 sql 파일을 적용한다.
# sql 파일 적용 해서 데이터베이스
mariadb -u kedu -p < webtest_DB.sql

# 데이터베이스 조회
mariadb -u kedu -p

  • DB용 Configuration에서 bind-address 설정을 해줘야한다.
vi /etc/my.cnf.d/mariadb-server.cnf

# 추가한 내용
21 bind-address=0.0.0.0

# db shutdown
mariadb-admin -u root -p shutdown

# safe 모드로 실행
mariadbd-safe --user=mysql &

  • 완료 화면

설정까지 자동화

  • DB는 mariadb:latest를 베이스로 사용한다.

  • Web config

  • ProxyPass/ProxyPassReverse 내용을 /etc/httpd/conf/httpd.conf라는 파일 안에 자동으로 작성한다.

  • COPY ./static/ /var/www/html은 정적 파일을 경로 내로 위치시킨다.

  • CMD 명령어로 컨테이너 시작과 동시에 httpd가 실행되도록 설정

FROM rockylinux:9.3.20231119
RUN dnf update -y && dnf install -y httpd
RUN dnf install -y iputils
COPY ./static/ /var/www/html
RUN echo -e "\n\
LoadModule proxy_module modules/mod_proxy.so\n\
LoadModule proxy_http_module modules/mod_proxy_http.so\n\
\n\
ProxyPass /api http://was_server:8000/api\n\
ProxyPassReverse /api http://was_server:8000/api\n" >> /etc/httpd/conf/httpd.conf
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
  • Was config
  • WORKDIR를 사용하여 작업 경로를 설정한다.
  • COPY ./dynamic /root는 동적 파일을 /root로 넣는다.
  • CMD python3 main.py > out.log 2>&1 컨테이너 실행과 동시에 main.py 페이지가 실행된다. 그리고 out.log 파일을 생성해서 로그를 남긴다.
  • 컨테이너 작동시에 계속 유지되도록 설정해야 한다.
FROM rockylinux:9.3.20231119
RUN dnf update -y
RUN dnf install python3 python3-devel gcc -y
RUN dnf install -y iputils
RUN pip3 install --user fastapi uvicorn sqlalchemy pymysql cryptography python-multipart
WORKDIR /root
COPY ./dynamic /root
CMD python3 main.py > out.log 2>&1
  • Docker compose
  • db 부분에서 초점 : /webtest_DB.sql을 어떤 곳으로 마운팅할 것인가를 고려한다.
  • /docker-entrypoint-initdb.d/webtest_DB.sql:ro 이 경로는, 컨테이너 시작과 동시에 docker-entrypoint-initdb.d라는 폴더에 있는 SQL 파일을 자동으로 실행하여 데이터베이스를 초기화한다.
  • /var/lib/docker/volumes/mariadb_data/_data 이 경로로 들어가면 리눅스에서 실제 데이터베이스 파일 위치를 볼 수 있다.
  • 3tier 네트워크를 만들어서 컨테이너간 동일한 네트워크에 있도록 만든다.
  • MARIADB_ROOT_HOST: "%" 부분은 로컬 환경뿐만 아니라 외부에서도 루트 계정으로 접속할 수 있다.
  • stdin_open: true와 tty: true는 터미널을 통해 컨테이너 내부로 들어가 명령어를 입력하기 용이하게 만든다.
# docker-compose.yml
version: '2.0'

services:
  web:
    build:
      dockerfile: web_config
      context: .
    container_name: web_server
    ports:
      - "80:80"
    networks:
      - 3tier
    stdin_open: true
    tty: true

  was:
    build:
      dockerfile: was_config
      context: .
    container_name: was_server
    networks:
      - 3tier
    stdin_open: true
    tty: true

  db:
    image: mariadb:latest
    container_name: db_server
    ports:
      - "3306:3306"
    networks:
      - 3tier
    stdin_open: true
    tty: true
    environment:
      MARIADB_ROOT_PASSWORD: "P@ssw0rd"
      MARIADB_ROOT_HOST: "%"
      MARIADB_USER: "kedu"
      MARIADB_PASSWORD: "P@ssw0rd"
      MARIADB_DATABASE: "WebTest"
    volumes:
      - ./webtest_DB.sql:/docker-entrypoint-initdb.d/webtest_DB.sql:ro
      - mariadb_data:/var/lib/mysql

volumes:
  mariadb_data:

networks:
  3tier:
    driver: bridge
  • volume 부분을 보면 /docker_data/volumes/3tier_mariadb_data/_data 안에 볼륨이 생성되었다.
  • 디스크 설정을 바꾸면서 위에서 경로를 변경해두었기 때문에 원래 자리는 /var/lib/docker/volumes/ 안에 생성된다.

  • ifconfig로 현재 연결된
root@docker-00:~/3tier# ifconfig
br-4ad66b551a60: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.19.0.1  netmask 255.255.0.0  broadcast 172.19.255.255
        ether f2:5a:83:e9:c6:7b  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-73de6fd4db8b: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 06:28:82:56:99:c8  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-a965985ee5f1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.20.0.1  netmask 255.255.0.0  broadcast 172.20.255.255
        ether 5a:1c:d6:89:20:83  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-ff4c694ac537: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.21.0.1  netmask 255.255.0.0  broadcast 172.21.255.255
        inet6 fe80::a802:55ff:fe66:30d0  prefixlen 64  scopeid 0x20<link>
        ether aa:02:55:66:30:d0  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::d860:acff:fed1:588a  prefixlen 64  scopeid 0x20<link>
        ether da:60:ac:d1:58:8a  txqueuelen 0  (Ethernet)
        RX packets 283022  bytes 16741483 (16.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 354318  bytes 1173448548 (1.1 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.17.0.150  netmask 255.0.0.0  broadcast 10.255.255.255
        ether 00:0c:29:85:5f:29  txqueuelen 1000  (Ethernet)
        RX packets 1730210  bytes 2487588625 (2.4 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 473795  bytes 39635785 (39.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2680  bytes 448962 (448.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2680  bytes 448962 (448.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth628ce65: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::c00:3fff:fe22:5244  prefixlen 64  scopeid 0x20<link>
        ether 0e:00:3f:22:52:44  txqueuelen 0  (Ethernet)
        RX packets 102  bytes 10765 (10.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 249  bytes 26071 (26.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethc3e9abc: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::c48f:a8ff:fe6b:e98f  prefixlen 64  scopeid 0x20<link>
        ether 8a:2c:bf:6b:00:7c  txqueuelen 0  (Ethernet)
        RX packets 54  bytes 5114 (5.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 199  bytes 19863 (19.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethf4c44f4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::78c2:adff:fe80:e685  prefixlen 64  scopeid 0x20<link>
        ether 7a:c2:ad:80:e6:85  txqueuelen 0  (Ethernet)
        RX packets 84  bytes 7434 (7.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 227  bytes 25649 (25.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • docekr 로그 1초마다 보는 방법
watch -n 1 docker logs was-server

0개의 댓글