도커 컨테이너에 문제가 생겨 실패한 상태가되면 도커 데몬이 컨테이너를 재시작하게 하면 좋을 것 같아요. 이럴 때 사용하는 게 --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>
...
➜  ~

 

 

일단 컨테이너는 이만큼만 알아보고 다음엔 도커 이미지에 대해서 좀 알아보아요