보통 커맨드 라인 명령어인 docker run을 이용해서 container를 생성/실행한다. plex로 예를 들면,

docker run -d \
  --name=<container name> \
  --net=host \
  --restart=always \
  -p 32400:32400 \
  -v /video:/video \
  -e VERSION=latest
  <image name> <additional command>

실행 후에 멈추고자 하면,

docker stop <container name or ID>

지우려면,

docker rm <container name or ID>

이미지까지 지우려면,

docker rmi <image name or ID>

docker-compose를 사용하면 조금 더 정돈된 규칙으로 컨테이너를 정의할 수 있고 이걸 통해서 대부분의 컨트롤을 할 수 있다. 짐작컨대 docker을 연결해주는 파이썬 기반의 스크립트 인터페이스라고 하면 좋을 것 같다.

먼저 docker-compose.yml 파일을 에디터로 만든다. 예제부터,

version: '2'
  services:
    plex:
      container_name: plex
      image: linuxserver/plex:latest
      restart: always
      network_mode: "host"
      ports:
        - '32400:32400'
      volumes:
        - /volume1/video:/volume1/video
        - /volume1/docker/plex/config:/config
        - /volume1/docker/plex/transcode:/transcode
      environment:
        - PUID=0
        - PGID=0
        - TZ=Asia/Seoul
        - VERSION=latest

    plexpy:
      ...
      ...

yml 문법은 아는 사람은 알겠지만 띄어쓰기 두번으로 다른 카테고리를 표현하니 참고. 가끔 indent를 맞추기 위해서 에디터에서 자동 탭이 먹히는 경우가 있으니 유의.

활발하게 개발되고 있는 중이라 version이 1부터 2, 2.3, 3 등등 많고 거기에 따라 문법이 조금 다른데 version 2가 가장 널리 쓰이는 것 같다. 마치 파이썬 같은…

각각의 서비스를 명명하고 컨테이너 이름 각종 옵션 등을 yml 문법에 맞게 써주면 된다.

이제 생성/실행(docker run에 대응하는 명령어)하려면

docker-compose up -d <service name, e.g. plex>

뒤에 서비스 이름이 지정되지 않으면 몽땅 다 적용된다. -d 옵션은 백그라운드로 보내라는 것. demonize의 약자인 듯. 이미 실행되어 있을 때 또 up을 하면 기반 이미지가 달라졌을 때 자동으로 업데이트도 된다.

멈추고 싶으면,

docker-compose stop <service name>

마치 컴퓨터에 전원 버튼을 눌러서 정상적으로 끄는 것처럼 프로세스를 하나하나 종료하고 끈다. 반대로 그냥 전원을 내리려면, kill을 쓴다.

지우려면,

docker-compose rm <service name>

뭐 이정도면 알면 되겠다.

20180406 추가

docker ps와 달리 docker stats는 docker container에 대한 CPU 사용률, 메모리 사용량, Network IO를 보여주는 명령어인데 아래와 같이 컨테이너 이름이 SHA1로 나와서 알아보기 어렵게 되어 있다.

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
1f13cd899e63        0.31%               520.2 MiB / 7.796 GiB   6.52%               2.86 GB / 33.3 MB   16.8 GB / 636 MB    38
5e5fb3f0166b        0.26%               163.5 MiB / 7.796 GiB   2.05%               4.27 GB / 3 GB      388 MB / 68.8 MB    38
44d0bdc0b730        0.02%               33.44 MiB / 7.796 GiB   0.42%               0 B / 0 B           127 MB / 29.8 MB    31
7002a1492b11        0.25%               43.64 MiB / 7.796 GiB   0.55%               0 B / 0 B           121 MB / 5.83 GB    30
2b70edaba352        37.04%              14.39 MiB / 7.796 GiB   0.18%               26.7 MB / 2.93 MB   58.1 MB / 7.66 GB   10
1fb1c6babf88        0.00%               5.297 MiB / 7.796 GiB   0.07%               24 MB / 5.62 MB     63.4 MB / 90.1 kB   10
c33bd07cab2c        0.11%               77.56 MiB / 7.796 GiB   0.97%               76.1 MB / 20.6 MB   386 MB / 264 MB     41
eab5d1f7189b        0.26%               380.9 MiB / 7.796 GiB   4.77%               0 B / 0 B           3.05 GB / 4.8 GB    78
7c86675bceda        0.65%               17.36 MiB / 7.796 GiB   0.22%               1.39 GB / 47.9 MB   480 MB / 590 kB     26
9c7510f0131d        0.00%               20.75 MiB / 7.796 GiB   0.26%               2.98 GB / 2.69 GB   361 MB / 32.6 MB    4
390ea85dbb1e        1.18%               324.4 MiB / 7.796 GiB   4.06%               134 MB / 91.2 MB    7.95 GB / 295 kB    43
55ce49ce6948        0.00%               2.128 GiB / 7.796 GiB   27.29%              677 MB / 244 MB     3.36 GB / 1.38 GB   18
af91bea81b3b        0.03%               37.11 MiB / 7.796 GiB   0.46%               47.3 MB / 990 kB    389 MB / 52.4 MB    31
9c9670292c5f        3.15%               28.92 MiB / 7.796 GiB   0.36%               80.3 MB / 60.3 MB   439 MB / 81.9 kB    10

아래 명령어는 container name을 human readable하게 고쳐준다.

docker stats $(docker ps --format=)