Docker 명령어 알기

고은정·2021년 5월 22일
8

Docker

목록 보기
2/2
post-thumbnail

이 포스팅은 Advenoh 블로그에서 많은 도움을 받아 작성했습니다.
더 많은 명령어의 종류 및 설명은 공식문서를 참고해주세요.

명령어

Docker에서 개발하기 전에, 명령어에 대해서 먼저 알아보겠습니다.

지난 포스팅에서 도커의 개념을 익히며 컨테이너, 이미지의 개념도 함께 정리했습니다. 명령어를 더 쉽게 이해하고, 암기(?)하기 위해 컨테이너 명령어이미지 명령어로 나누어서 알아보겠습니다.

컨테이너 명령어

1. 컨테이너 실행

$ docker container run [옵션] 이미지명[:태그] [명령] [명령인자...]

옵션
-d 👉 백그라운드로 실행합니다.
-p 👉 외부포트:컨테이터포트 (ex. 9000:8080). 포트를 지정하지 않는 경우 임의의 포트가 자동으로 할당됩니다.
-t 👉 유닉스 터미널 연결을 활성화합니다.
-i 👉 옵션과 같이 많이 사용되어 -it 옵션으로 합쳐서 실행합니다.
-i 👉 컨테이너 쪽 표준 입력(stdout)과 연결을 유지합니다. 컨테이너 쪽 셀에 들어가려면 이 옵션을 추가해야 합니다.
-rm 👉 컨테이터가 종료시 컨테이너를 파기합니다.
—name 👉 컨테이너에 원하는 이름을 붙일 수 있습니다. 이름으로 조회하거나 삭제할 수 있습니다.

명령인자로 실행
컨테이너 실행 명령어(docker container run)에 명령 인자를 추가해서 실행하면 Dockerfile에 정의된 CMD 인스트럭션은 무시되고 명령 인자로 넘어온 값으로 실행됩니다.

2. 실행중인 컨테이너 조회

$ docker container ls

필터링
--filter 옵션을 사용해서 컨테이너 목록을 필터링해서 조회할 수 있습니다.

$ docker container ls --filter "필터명=값"

예를들어 '이름에 redis가 포함된 컨테이너'를 조회하고 싶다면 아래와 같이 입력합니다.

$ docker container ls --filter "name=redis"

종료된 컨테이너 목록

$ docker container ls -a

3. 실행중인 컨테이너 정지

$ docker container stop 컨테이너ID_OR_컨테이너명

4. 정지된 컨테이너 재실행

$ docker container restart 컨테이너ID_OR_컨테이너명

5. 실행중인 컨테이너 삭제

$ docker container rm 컨테이너ID_OR_컨테이너명

컨테이너를 정지시키면 정시된 시점의 상태를 계속 유지한 채 디스크에 남아 있습니다. 완전히 파기하려면 rm 명령어를 추가하여 삭제합니다.

6. 컨테이너의 stdout(표준 출력)를 호스트 stdout으로 출력

$ docker container logs [옵션] 컨테이너ID_OR_컨테이너명

-f 옵션을 사용하면 출력하는 로그를 계속 화면에 출력합니다.

7. 실행중인 컨테이너에서 명령 실행

$ docker container exec [옵션] 컨테이너ID_OR_컨테이너명 실행할_명령

8. 파일 복사

컨테이너에서 호스트로 복사하는 명령어는 다음과 같습니다.

$ docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH 

호스트에서 컨테이너로 복사하는 명령어는 다음과 같습니다.

$ docker container cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH 

이미지 명령어

1. 이미지 검색

$ docker search 이미지명

이미지 검색 명령어를 입력하면 Docker Hub 레지스트리에서 도커 이미지를 검색합니다. 검색된 결과는 깃허브의 스타순으로 정렬해서 출력됩니다.

예를들어, 이미지명으로 redis를 검색하면 네임스페이스/redis로 출력되는데, 공식 리포지토리의 경우 네임스페이스가 library며 생략가능합니다.

2. 이미지 다운로드

$ docker image pull [옵션] 리포지토리명[:태그명]

태그명을 생략하면 기본적으로 latest 태그가 적용되어 다운로드됩니다.

3. 이미지 빌드

$ docker image build -t 이미지명[:태그명] Dockerfile 파일의 경로

위 명령어의 -t 옵션은 이미지명과 태그명을 같이 붙이는 옵션이다. 거의 필수 옵션으로 쓰입니다.

참고로 이미지가 한번 다운로드되어 있으면 로컬에 저장된 이미지를 사용하는데, —pull =true 옵션을 추가하면 매번 베이스 이미지를 강제로 새로 다운로드합니다.

4. 이미지 목록 조회

$ docker image ls

Docker Hub에서 내려받은 이미지나 이미지를 빌드해서 현재 보유하고 있는 이미지들이 출력됩니다.

5. 이미지에 태그 붙이기

$ docker image tag 기반이미지[:태그] 새이미지명[:태그]

6. 이미지 공유

$ docker image push [옵션] 이미지명:[:태그]

이미지 공유 명령어를 이용해서 도커 허브 등의 레지스트리에 등록할 수 있습니다.

기타 명령어

1. 축약 명령어

긴 명령어 때문에 축약 명령어를 제공하기도 하는데, full 명령어를 사용하는 것을 추천하는 분위기입니다.

  • docker container run 👉 docker run
  • docker image pull 👉 docker pull
  • docker image build 👉 docker build

2. 도커 운용 - 컨테이너 및 이미지 파기

현재 실행 중이 아닌 모든 컨테이너를 삭제하는 명령어는 다음과 같습니다.

$ docker container prune

현재 실행 중이 아닌 모든 이미지를 삭제하는 명령어는 다음과 같습니다.

$ docker image prune

이미지, 컨테이너, 볼륨, 네트워크 등 모든 리소스를 일괄적으로 삭제하는 명령어는 다음과 같습니다.

$ docker system prune

사용하지 않는 것은 점차 누적되어 디스크 용량을 차지 하기 때문에 정기적으로 삭제해주면 좋습니다.

3. 도커 운용 - 컨테이너 시스템 리소스 사용 현황 확인

$ docker container stats [옵션] [컨테이너ID ...]

현재 실행 중인 컨테이너 시스템 리소스 사용 현황을 확인할 수 있습니다. Linux의 top 명령어처럼 실시간으로 현환을 업데이트해서 보여줍니다.


정리

개발에 앞서 명령어 정리를 하니 '이런 명령어들을 사용하는구나'하면서 감이 오다가도, 실무에서처럼 사용해보지 않아서 그런지 '언제 사용한다는거지'하고 헷갈리기도 합니다. 위의 명령어들이 얼마나 자주 사용되는지, 명령어 사용시 출력결과는 무엇인지 다음 포스팅부터 본격적인 개발을 하면서 몸에 익히고 알아갈 예정입니다.

profile
개발이 하고싶어요

0개의 댓글