Docker
컨테이너 관리
수색…
통사론
- docker rm [선택 사항] CONTAINER [CONTAINER ...]
- 도커 부착 [OPTIONS] CONTAINER
- docker exec [옵션] CONTAINER COMMAND [ARG ...]
- 도커 ps [옵션]
- 도커 로그 [옵션] CONTAINER
- docker inspect [옵션] 컨테이너 | 이미지 [컨테이너 | 이미지 ...]
비고
- 위의 예에서 container가 docker 명령의 매개 변수이면
<container>
또는container id
또는<CONTAINER_NAME>
언급됩니다. 이 모든 장소에서 컨테이너를 지정하기 위해 컨테이너 이름이나 컨테이너 ID를 전달할 수 있습니다.
컨테이너 나열
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
docker ps
는 현재 실행중인 컨테이너 만 인쇄합니다. 모든 컨테이너 (중지 된 컨테이너 포함)를 보려면 -a
플래그를 사용하십시오.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago berserk_wozniak
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
특정 상태의 컨테이너를 나열하려면 -f
명령 행 옵션을 사용하여 결과를 필터링하십시오. 다음은 빠져 나간 모든 컨테이너를 나열한 예입니다.
$ docker ps -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago
-q
스위치를 사용하여 컨테이너 ID 만 나열 할 수도 있습니다. 이렇게하면 다른 유닉스 유틸리티 (예 : grep
및 awk
)로 결과를 조작하는 것이 매우 쉽습니다.
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
docker run --name mycontainer1
을 사용하여 컨테이너를 시작할 때 임의의 이름 (예 : nostalgic_stallman과 같은 mood_famous 형식)이 아닌 특정 이름을 지정하면 이러한 명령으로 쉽게 찾을 수 있습니다
docker ps -f name=mycontainer1
컨테이너 참조
컨테이너의 이름을 사용하는 도커 명령은 다음 세 가지 형식을 허용합니다.
유형 | 예 |
---|---|
전체 UUID | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
짧은 UUID | 9cc69f11a0f7 |
이름 | berserk_wozniak |
docker ps
를 사용하여 시스템의 컨테이너에 대한이 값을보십시오.
UUID는 Docker에 의해 생성되며 수정할 수 없습니다. 컨테이너를 시작할 때 docker run --name <given name> <image>
하면 컨테이너에 이름을 제공 할 수 있습니다. 컨테이너를 시작할 때 Docker를 지정하지 않으면 Docker가 컨테이너에 임의의 이름을 생성합니다.
주 : UUID의 값 (또는 '짧은'UUID)은 주어진 값이 하나의 컨테이너에 대해 유일하다면 임의의 길이가 될 수 있습니다
컨테이너 시작 및 중지
실행중인 컨테이너를 중지하려면 다음과 같이하십시오.
docker stop <container> [<container>...]
이것은 컨테이너의 주 프로세스를 SIGTERM으로 보내고, 유예 기간 내에 멈추지 않으면 SIGKILL을 보낸다. 각 컨테이너의 이름은 중지 될 때 인쇄됩니다.
중지 된 컨테이너를 시작하려면 다음을 수행하십시오.
docker start <container> [<container>...]
이렇게하면 백그라운드에서 전달 된 각 컨테이너가 시작됩니다. 각 컨테이너의 이름이 시작될 때 인쇄됩니다. 포 그라운드에서 컨테이너를 시작하려면 -a
(- --attach
) 플래그를 전달하십시오.
사용자 정의 형식으로 컨테이너 나열
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
특정 컨테이너 찾기
docker ps --filter name=myapp_1
컨테이너 IP 찾기
컨테이너의 IP 주소를 찾으려면 다음을 사용하십시오.
docker inspect <container id> | grep IPAddress
도커 검사를 사용하거나
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
도커 컨테이너 다시 시작
docker restart <container> [<container>...]
옵션 --time : 컨테이너를 죽이기 전에 멈출 때까지 기다리는 초 수 (기본값 10)
docker restart <container> --time 10
컨테이너 제거, 삭제 및 정리
docker rm
을 사용하면 다음과 같은 특정 컨테이너를 제거 할 수 있습니다.
docker rm <container name or id>
모든 컨테이너를 제거하려면 다음 표현식을 사용할 수 있습니다.
docker rm $(docker ps -qa)
기본적으로 도커는 실행중인 컨테이너를 삭제하지 않습니다. 실행중인 컨테이너는 경고 메시지를 생성하고 삭제되지 않습니다. 다른 모든 컨테이너는 삭제됩니다.
또는 xargs
를 사용할 수 있습니다.
docker ps -aq -f status=exited | xargs -r docker rm
docker ps -aq -f status=exited
는 "Exited"상태의 컨테이너 ID를 반환합니다.
경고 : 위의 모든 예제는 '중지 된'컨테이너 만 제거합니다.
컨테이너가 제거되었는지 여부에 관계없이 컨테이너를 제거하려면 force 플래그 -f
:
docker rm -f <container name or id>
상태에 관계없이 모든 컨테이너를 제거하려면 :
docker rm -f $(docker ps -qa)
사용 dead
상태의 컨테이너 만 제거하려면 다음을 수행하십시오.
docker rm $(docker ps --all -q -f status=dead)
exited
상태의 컨테이너 만 제거하려면 다음을 수행하십시오.
docker rm $(docker ps --all -q -f status=exited)
컨테이너를 나열 할 때 사용되는 필터의 모든 순열입니다.
버전 1.3 이후에 공간을 사용하는 원치 않는 컨테이너와 매달린 이미지를 모두 제거하려면 다음을 사용하십시오 (Unix 도구 df
와 유사).
$ docker system df
사용되지 않는 모든 데이터를 제거하려면 :
$ docker system prune
이미 존재하는 도커 컨테이너에서 명령을 실행하십시오.
docker exec -it <container id> /bin/bash
이미 실행중인 컨테이너에 로그인하여 빠른 테스트를하거나 응용 프로그램이 수행하는 작업을 확인하는 것이 일반적입니다. 흔히 로그 및 변경된 파일로 인해 컨테이너 사용에 대한 잘못된 사용이 나타납니다. 이 예제에서는 컨테이너에 로그인 할 수 있습니다. 컨테이너에서 / bin / bash를 사용할 수 있다고 가정하면 / bin / sh 또는 다른 것일 수 있습니다.
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
이 예는 데이터 디렉토리의 내용을 타르에 보관합니다. 그런 다음 docker cp
검색 할 수 있습니다.
컨테이너 로그
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, --follow=false Follow log output
--help=false Print usage
--since= Show logs since timestamp
-t, --timestamps=false Show timestamps
--tail=all Number of lines to show from the end of the logs
예 :
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ff9716dda6cb nginx "nginx -g 'daemon off" 8 days ago Up 22 hours 443/tcp, 0.0.0.0:8080->80/tcp
$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
데몬으로 실행중인 인스턴스에 연결
이를 달성하는 데에는 두 가지 방법이 있으며 가장 먼저 알려진 것은 다음과 같습니다.
docker attach --sig-proxy=false <container>
이것은 문자 그대로 컨테이너 bash에 bash를 붙입니다. 즉, 실행중인 스크립트가 있으면 결과를 볼 수 있습니다.
분리하려면 다음을 입력하십시오. Ctl-P Ctl-Q
그러나 더 친숙한 방법이 필요하고 새로운 bash 인스턴스를 만들려면 다음 명령을 실행하십시오.
docker exec -it <container> bash
컨테이너에서 파일 복사하기
컨테이너에서 호스트로
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
호스트에서 컨테이너로
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
jess / transmission을 사용하면
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
컨테이너의 파일은 / 전송 / 다운로드에 있습니다.
호스트의 현재 디렉토리는 / home / $ USER / abc입니다.
docker cp transmission_id_or_name:/transmission/download .
나는 파일을 복사 할 것이다.
/home/$USER/abc/transmission/download
당신은 docker cp
사용하여 하나의 파일만을 복사 할 수 없습니다. 디렉토리 트리와 파일들을 복사 할 수 없습니다.
도커 볼륨 제거, 삭제 및 정리
컨테이너가 중지되면 고정 장치 볼륨이 자동으로 제거되지 않습니다. 컨테이너를 중지 할 때 연관된 볼륨을 제거하려면 다음과 같이하십시오.
docker rm -v <container id or name>
-v
플래그가 지정되지 않으면, 볼륨은 디스크에 'dangling volume'으로 남아 있습니다. 매달려있는 모든 볼륨을 삭제하려면 다음과 같이하십시오.
docker volume rm $(docker volume ls -qf dangling=true)
docker volume ls -qf dangling=true
필터는 컨테이너에 연결되지 않은 태그가없는 볼륨을 포함하여 도커 볼륨 이름의 목록을 반환합니다.
또는 xargs
를 사용할 수 있습니다.
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
Docker 컨테이너 파일 시스템 내보내기 및 가져 오기
Docker 컨테이너의 파일 시스템 내용을 tarball 아카이브 파일에 저장할 수 있습니다. 예를 들어 데이터베이스 컨테이너에 중요한 변경 사항이 있고 다른 곳에서 변경 사항을 복제 할 수없는 경우와 같이 컨테이너 파일 시스템을 다른 호스트로 이동하는 경우에 유용합니다. 사용하여 업데이트 된 이미지에서 완전히 새로운 컨테이너를 생성하는 것이 바람직하다주의하시기 바랍니다 docker run
명령 또는 docker-compose.yml
대신 수출 및 컨테이너의 파일 시스템을 이동하는 파일을. Docker의 장점 중 하나는 이미지 및 컨테이너를 만드는 선언적 스타일의 감사 성과 책임 성입니다. docker export
와 docker import
를 사용함으로써 컨테이너의 파일 시스템 내부에서 원래 상태로 변경된 내용이 난독 화 되었기 때문에이 힘은 억제되었습니다.
docker export -o redis.tar redis
위의 명령은 빈 이미지를 만든 다음 redis
컨테이너의 파일 시스템을이 빈 이미지로 내 보냅니다. tarball 아카이브에서 가져 오려면 다음을 사용하십시오.
docker import ./redis.tar redis-imported:3.0.7
이 명령은 컨테이너를 만들 수있는 redis-imported:3.0.7
오기 redis-imported:3.0.7
이미지를 만듭니다. 커밋 메시지를 설정할뿐만 아니라 가져 오기에서 변경 사항을 만들 수도 있습니다.
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
-c
명령 행 옵션과 함께 사용할 수있는 Dockerfile 지정 문은 CMD
, ENTRYPOINT
, ENV
, EXPOSE
, ONBUILD
, USER
, VOLUME
, WORKDIR
입니다.