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 및 컨테이너 저장공간을 제한할 수 있다.
'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 |