도커 컨테이너에 문제가 생겨 실패한 상태가되면 도커 데몬이 컨테이너를 재시작하게 하면 좋을 것 같아요. 이럴 때 사용하는 게 --restart라는 옵션이에요. 아래는 on-failure:3이라는 옵션을 줘서 3번까지만 재시작하도록 했어요. 그리고 docker container inspect 명령으로 RestartPolicy가 들어가 있는 걸 확인할 수 있어요
➜ ~ docker container run -d -p 80:80 --restart=on-failure:3 nginx:1.14
a40c4e4243037f3099bbb5aa0df825840e56f8d40ba5572fc48e90668fe2631c
➜ ~ docker container inspect a40c | grep -A 4 -B 4 on-failure
}
]
},
"RestartPolicy": {
"Name": "on-failure",
"MaximumRetryCount": 3
},
"AutoRemove": false,
"VolumeDriver": "",
다른 옵션으로는 이렇게 있어요.
Policy |
Result |
no |
기본설정. 자동으로 컨테이너를 재시작하지 않아요. |
on-failure[:max-retries] | 컨테이너가 non-zero exit status면 재시작해요. 리눅스 프로세스들은 종료할 때 exit status를 남기는데 정상적으로 종료되면 보통 0을 반납해요. 추가적으로 재시작을 시도하는 회수를 제한할 수 있어요. on-failure:[재시도할 회수] 이렇게요 |
always | 항상 재시작해요. 계속 재시작해요. 수동으로 멈추면 재시작하지 않아요. 수동으로 종료되었다면 도커 데몬이 재실행되거나 컨테이너가 수동으로 재시작되기 전까지는 재시작되지 않아요. |
unless-stopped | 명시적으로 이제 끌게 하고 종료하기 전까지는 계속 재시작해요. always와 다른 점은 컨테이너가 실패가 아니라 종료가 되었다면 도커 데몬이 재실행되어도 컨테이너는 재시작하지 않아요. |
container inspect
위에서도 잠깐 봤는데 container의 상태를 보는 명령어예요. 자세하게 볼 수 있어요. 어떤 IP를 할당받았는지 어떤 포트가 열려있는지 등등.
container cp
HOST의 파일을 컨테이너 안으로 복사해주는 명령어입니다.
➜ ~ docker container cp .ssh/id_rsa.pub ecstatic_benz:/root/
➜ ~ docker container exec ecstati_benz cat /root/id_rsa.pub
container exec
컨테이너에 새로운 명령을 실행하도록 할 수 있어요. ls, ps 등과 같은 명령어로 결괏값을 바로 받아볼 수도 있고 -i -t 옵션을 주고 bash 같은 쉘 명령을 실행해서 새로운 TTY에 쉘로 접속할 수 있어요
➜ ~ docker container exec ecstatic_benz cat /root/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDVuY5rm1qZ3FKHp3QYhqaBfKo1SkoKE....
➜ ~ docker exec -i -t ecstatic_benz sh
# whoami
root
container stats
컨테이너의 ID, name, CPU% , Memory usage / limit, MEM%, NET I/O 등과 같은 상태를 볼 수 있어요 거어의 실시간으로 보여주는 것 같아요.
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
cef7d40437fa ecstatic_benz 0.00% 1.371MiB / 7.638GiB 0.02% 14.3kB / 29.8kB 0B / 0B 2
도커 컨테이너를 생성할 때 이미지에서 열어놓는 포드들이 있어요 따로 지정해주지 않으면 컨테이너가 가지고 있는 IP의 포트번호로 접근 가능한데 이 포트를 HOST의 특정 포트와 매핑시켜서 HOST의 포트로 들어오는 패킷을 컨테이너의 포트로 보내줄 수 있어요.
대문자 P ( -P ) 옵션을 주면 특정 포트가 아니라 컨테이너의 모든 포트를 HOST의 임의의 포트로 열어요.
➜ ~ docker run -d -p 8080:80 nginx:1.14
befe4e081dc2beacedbb28ed1247e22e26f1c4aa98c5ef3c6fa58aa332ad3d99
➜ ~ curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
➜ ~
일단 컨테이너는 이만큼만 알아보고 다음엔 도커 이미지에 대해서 좀 알아보아요