본문 바로가기
반응형

 

1. 로그 확인하기

root@k8s-node1:~# docker run -d --name mysqlLog mysql:5.7
8f37e29812aa841912489edfdcf3203d7b85e2d13a4faa2caab418df8936aa14
root@k8s-node1:~# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@k8s-node1:~# docker logs mysqlLog
2022-10-25 05:04:42+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.39-1.el7 started.
2022-10-25 05:04:44+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2022-10-25 05:04:44+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.39-1.el7 started.
2022-10-25 05:04:44+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
    You need to specify one of the following:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_ALLOW_EMPTY_PASSWORD
    - MYSQL_RANDOM_ROOT_PASSWORD

(-d 옵션은 백그라운드에서 실행시키는 옵션)

docker run 명령어로 mysql을 실행시켰음에도 docker ps 에 잡히지 않는다.

어떤 문제인지 확인하려면 log를 봐야한다.

docker logs [컨테이너이름] 으로 로그를 확인해보니 옵션 MYSQL_ROOT_PASSWORD 가 빠져있다고 나온다.

 

그외 로그 확인 옵션으로

root@k8s-node1:~# docker logs -f -t mysqlLog
2022-10-25T05:04:42.698621380Z 2022-10-25 05:04:42+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.39-1.el7 started.
2022-10-25T05:04:44.080222242Z 2022-10-25 05:04:44+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2022-10-25T05:04:44.135981835Z 2022-10-25 05:04:44+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.39-1.el7 started.
2022-10-25T05:04:44.374349339Z 2022-10-25 05:04:44+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
2022-10-25T05:04:44.374373615Z     You need to specify one of the following:
2022-10-25T05:04:44.374378147Z     - MYSQL_ROOT_PASSWORD
2022-10-25T05:04:44.374381909Z     - MYSQL_ALLOW_EMPTY_PASSWORD
2022-10-25T05:04:44.374385658Z     - MYSQL_RANDOM_ROOT_PASSWORD
root@k8s-node1:~# ^C

root@k8s-node1:~# docker logs --tail 3 mysqlLog
    - MYSQL_ROOT_PASSWORD
    - MYSQL_ALLOW_EMPTY_PASSWORD
    - MYSQL_RANDOM_ROOT_PASSWORD

 

docker logs -f (실시간 스트림확인) -t (타임스탬프 표시) 옵션 및

--tail 3 (리눅스 테일과 동일, 아래서부터 짤라줌) 등을 활용할 수 있다.

--since [유닉스타임] 으로 해당시간 이후의 로그만 확인도 가능하다.

 

root@k8s-node1:/var/lib/docker/containers/8f37e29812aa841912489edfdcf3203d7b85e2d13a4faa2caab418df8936aa14# ls -al
total 44
drwx--x--- 4 root root 4096 10월 25 14:19 .
drwx--x--- 3 root root 4096 10월 25 14:04 ..
-rw-r----- 1 root root 1099 10월 25 14:04 8f37e29812aa841912489edfdcf3203d7b85e2d13a4faa2caab418df8936aa14-json.log
drwx------ 2 root root 4096 10월 25 14:04 checkpoints
-rw------- 1 root root 2903 10월 25 14:04 config.v2.json
-rw-r--r-- 1 root root 1489 10월 25 14:04 hostconfig.json
-rw-r--r-- 1 root root   13 10월 25 14:04 hostname
-rw-r--r-- 1 root root  174 10월 25 14:04 hosts
drwx--x--- 2 root root 4096 10월 25 14:04 mounts
-rw-r--r-- 1 root root  615 10월 25 14:04 resolv.conf
-rw-r--r-- 1 root root   71 10월 25 14:04 resolv.conf.hash
root@k8s-node1:/var/lib/docker/containers/8f37e29812aa841912489edfdcf3203d7b85e2d13a4faa2caab418df8936aa14# cat 8f37e29812aa841912489edfdcf3203d7b85e2d13a4faa2caab418df8936aa14-json.log 
{"log":"2022-10-25 05:04:42+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.39-1.el7 started.\n","stream":"stdout","time":"2022-10-25T05:04:42.69862138Z"}
{"log":"2022-10-25 05:04:44+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'\n","stream":"stdout","time":"2022-10-25T05:04:44.080222242Z"}
{"log":"2022-10-25 05:04:44+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.39-1.el7 started.\n","stream":"stdout","time":"2022-10-25T05:04:44.135981835Z"}
{"log":"2022-10-25 05:04:44+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified\n","stream":"stderr","time":"2022-10-25T05:04:44.374349339Z"}
{"log":"    You need to specify one of the following:\n","stream":"stderr","time":"2022-10-25T05:04:44.374373615Z"}
{"log":"    - MYSQL_ROOT_PASSWORD\n","stream":"stderr","time":"2022-10-25T05:04:44.374378147Z"}
{"log":"    - MYSQL_ALLOW_EMPTY_PASSWORD\n","stream":"stderr","time":"2022-10-25T05:04:44.374381909Z"}
{"log":"    - MYSQL_RANDOM_ROOT_PASSWORD\n","stream":"stderr","time":"2022-10-25T05:04:44.374385658Z"}

이 로그는 /var/lib/docker/containers/${컨테이너ID}/${컨테이너ID}-json.log

형태로 저장된다.

이 로그는 끊임없이 쌓이기때문에 후에 용량 문제를 생각했을 때 아래와 같이 json로그 파일을 조절할 수 있다.

 

root@k8s-node1:~# docker run -t -i --log-opt max-size=10k --log-opt max-file=3 --name jsonLogTest ubuntu:14.04

 

--log-opt max-size = 로그사이즈 크기 지정

--log-opt max-file 로그파일 갯수 지정 

 

그 외에 syslog 를 이용하거나, 

오픈소스 도구인 fluentd, AWS CloudWatch 등을 이용하여 로그를 저장할수 있다고 한다.

 

2. 컨테이너 자원 할당

 

어떠한 옵션 없이 기동 시킬 경우 제한 컨테이너는 호스트의 자원을 제한없이 쓸 수 있기에 어떤 일이 발생할지 알 수 없다.

root@k8s-node1:~# docker run -i -t -d --name LimitContainer --memory="1g" --cpu-shares 1024 ubuntu:14.04
dd8c712f3c4d3e7a1c7cede84ce378ab18fabf20766d1026234a6ff8e1bcf072

root@k8s-node1:~# docker inspect LimitContainer | grep \"Memory\"
            "Memory": 1073741824,

 

--memory 로 해당 컨테이너의 메모리 용량을 지정할 수 있다.

--cpu-shares 로 cpu를 어떻게 나눠쓸지를 지정하는 옵션이다. 1024는 CPU할당에서 비중 1을 뜻한다.

 

이후 inspect 로 할당된 메모리를 살펴보니 약 1g만큼 할당됨을 알 수 있다.

 

CPU의 경우 high CPU 를 측정하기 위한 애플리케이션을 돌려보거나 stress 를 이용하여 테스트 해보자.

 

 

 

그 외의 제한으로 Block I/O 및 컨테이너 저장공간을 제한할 수 있다.

728x90
반응형

'IT 공부 > PaaS' 카테고리의 다른 글

[Docker] DockerFile 도커파일 1  (0) 2022.10.26
[Docker] 도커 이미지 관리  (0) 2022.10.26
[Docker] 도커 네트워크 기본  (1) 2022.10.25
[Docker] 명령어 및 기초 1  (0) 2022.10.20
[Docker] 도커 설치 및 기본 정리용  (0) 2022.02.22

한걸음 한걸음

개인적인 기록