본문 바로가기

도커

도커 명령어 정리 (2)

링크 : https://docs.docker.com/reference/cli/docker/

 

거의 대부분(아마도 전부)의 도커 명령어는 `docker`가 앞에 붙는다. 보통 도커 명령어의 기본은 `docker 커멘드 (옵션) 대상 (인자)` 이며 이 때 커맨드는 상위 커멘드와 하위 컨멘드로 나뉜다. 가장 기초적인 컨테이너 실행은 `docker container run image1` 이다. 또한 생략가능한 커맨드들도 있다. 앞서 컨테이너를 실행하기 위한 명령어에서 container 부분을 생략할 수 있다.

상위 커맨드 : container

이름 그대로 컨테이너 실행, 종료, 목록 출력을 위한 커맨드이다. 특이하게도 대부분의 경우 container 명령어를 생략하고 하위 커맨드만 사용해도된다. 하위 커맨드와 각 주요 옵션은 다음과 같다.

 

1. create : 컨테이너 생성 ( container 생략가능 )

이미지에서 컨테이너를 생성한다. 따라서 대상은 이미지명. 때문에 옵션이 많다.

  • --dns (1.1.1.1) : 사용자 정의 DNS 서버 설정
  • -e, --env : 환경 변수 설정, 이미지 별로 필요되는 환경 변수를 설정할 수 있다.
  • --restart : 컨테이너가 종료되었을 때 다시 시작 정책. --restart=no 와 같은 식으로 사용한다.  자세히
    • no :  재시작 안함 ( 디폴트 )
    • on-failure:숫자 : 컨테이너가 정상 종료가 아닐경우 (오류로 인한 종료경우) 해당 '숫자'만큼 재시작한다.
    • always : 컨테이너가 중지되면 재시작한다. 수동 종료시 도커 데몬이 다시 시작되거나 컨테이너를 수동으로 시작하면 재시작된다.
    • unless-stopped : always와 비슷하지만 도커 데몬이 다시 시작해도 자동 재시작하지 않는다.
  • --rm : 컨테이너 종료시 자동 삭제
  • -v --volume 디스크:컨테이너 디렉토리 : 볼륨, 바인드 마운트 (호스트 시스템의 파일 혹은 경로:컨테이너에서의 마운트 위치)의 형태 
  • --mount : -v 와 유사하다.  하지만 모든 옵션을 하나의 필드에 두는 -v와 다르게 좀 더 명확하게 지정할 수 있다. 키-값 구조로 되어있다. 공식문서에서는 -v보다 --mount 사용을 권장한다. 다른 차이로는 -v는 해당 경로가 존재하지 않는다면 디렉토리를 생성하지만 --mount는 오류 발
    • type (bind 혹은 volume) : 바인드 마운트 혹은 볼륨 마운트 
    • source : 파일, 디렉토리 경로 ( -v의 ':' 앞에 오는 내용 )
    • destination, dst, target : 컨테이너에 파일이나 디렉터리가 마운트되는 곳 ( -v의 ':' 뒤에 오는 내용 )
    • readonly : 바인드 마운트가 읽기 전용이 된다.
  • -p 호스트 포트번호:컨테이너 포트번호 : 컨테이너의 포트를 호스트에 게시한다. 즉 8080:3306으로 설정시 물리 서버 8080으로 들어온 포트는 해당 컨테이너의 3306으로 들어간다. (포트포워딩과 비슷하다.) 따라서 호스트 포트번호는 컨테이너끼리 곂치지 않아야한다.
  • --network : 컨테이너를 네트워크에 연결
  • --name : 컨테이너 이름 지정
  • --privileged : 이 컨테이너에 확장 권한 부여 ( 리눅스 커널까지 접근 가능한 권한 휙득 )
  • -d : 백그라운드 실행
  • -i : 컨테이너 터미널에 키보드 연결
  • -t : 특수키 사용

2. start  : 컨테이너 실행 (container 생략가능)

 이 명령어는 컨테이너를 생성하는 것이 아닌 정지된 컨테이너를 실행해주는게 목적이다. 따라서 create 이후에 쓰거나 run 명령어로 인해 건너뛰는 일도 있다. 사용되는 옵션은 그다지 없는 것으로 보인다. 그나마 -i 옵션은 STDIN 연결한다고 한다. 이를 통해 실행과정을 볼 수 있긴 하지만 백그라운드에서 실행되어야 하니 중요도는 낮아보인다.

 

3. stop : 컨테이너 정지 (container 생략가능)

 실행중인 컨테이너를 중지시킨다. 옵션은 그다지 없지만 -t 옵션은 컨테이너를 삭제하기까지 기다려야할 시간을 정해둘 수는 있다.

 

4. rm : 컨테이너 삭제 (container 생략가능)

 중지된 컨테이너를 삭제한다. 이때 대상은 역시 컨테이너명.

  • -f, --force : 실행중인 컨테이너 강제 삭제

5. run : 컨테이너 생성 및 실행(container 생략가능)

  create와 start가 합쳐진 명령어이다. 대상은 이미지명이다. 이때 해당 이미지가 없다면 도커 허브(혹은 기타 레지스리)에서 image pull 하여 이미지까지 생성한다. 옵션을 기본적으로 create 와 비슷하다.

  • --nave : 컨테이너 이름 지정
  • -e, --env : 환경 변수 설정, 이미지 별로 필요되는 환경 변수를 설정할 수 있다.
  • --restart : 컨테이너가 종료되었을 때 다시 시작 정책. --restart=no 와 같은 식으로 사용한다. (create의 restart와 유사)
  • --pull : 컨테이너 생성시 이미지 가져오기 정책 설정. --pull=missing 같은 형태로 지정
    • missing : 기본값, 이미지를 찾을 수 없을 때 이미지를 가져오고 그렇지 않으면 존재하는 이미지 사용
    • never : 이미지 누락된 경우 해당 이미지를 가져오지 않고 오류발생
    • always : 컨테어너 생성시 항상 이미지 가져오기 수행
  • --dns (1.1.1.1) : 사용자 정의 DNS 서버 설정
  • --mount : create --mount 와 동일
  • -v : create -v 와 동일
  • --network : 컨테이너를 네트워크에 연결
  • -p : create -p 와 동일
  • --rm : 컨테이너 종료시 자동 삭제
  • --privileged : 이 컨테이너에 확장 권한 부여 ( 리눅스 커널까지 접근 가능한 권한 휙득 )
  • -d : 백그라운드 실행
  • -i : 컨테이너 터미널에 키보드 연결
  • -t : 특수키 사용

6. exec : 실행중인 컨테이너에 명령 실 (container 생략가능)

  기본적인 구조는 docker exec (옵션) 컨테이너명 (명령어), 예) docker exec -it container_name sh -c "ls". 

  run 명령어 실행하면서 뒤에 exec 를 수행할 수 있다. 예)docker run --name container_name -d -i -t alpine /bin/sh

  • privileged : 명령에 확장 권한 부여 
  • -e : 환경 변수 설정
  • -d : 백그라운드 실행
  • -w : 실행 프로세스의 작업 디렉토리 설정  예) docker exec -it -w /direct container_name pwd , /direct 출력

6. ls : 컨테이너 목록 출력 ( 생략 커멘드 : docker ps )

 기본적으로 실행중인 컨테이너만 출력한다. 

  • -a : 모든 컨테이너 목록 출력
  • -f : 제공된 조건에 따라 필터링
  • --format : 출력 형식 지정 기본적으로 'table' 
    • table : 테이블 형태
    • table 탬플릿 : 지정된 Go 템플릿 사용하여 테이블 형태 출력
    • json : json형태

7. cp : 호스트와 컨테이너 간에 파일 복사 ( container 생략가능 )

 컨테이너 부분은 명시할 수 있다. 예) docker cp CONTAINER:/var/logs/ ./filename

 상대경로와 절대경로 둘다 가능하다. 

 

8. commit : 컨테이너를 이미지로 변환 ( container 생략가능 ) 

 이 명령어를 통해 컨테이너를 개조하고 이를 다시 이미지로 변환이 가능하다. 

  • -c : 생성된 이미지에 Dockerfile 명령 적용 

9. inspect : 자세한 컨테이너 정보 출력 

 

상위 커맨드 : image

컨테이너를 생성하는 일종에 설계도인 이미지에 대한 명령어이다. 보통 pull이나 dockerfile과 함께 build가 자주 쓰인다. 이때 pull은 container run 명령어에 의해 생략될 수 있다.

 

1. pull : 이미지 가져오기 ( image 생략 가능 )

 도커 허브 혹은 레지스트리에서 이미지를 가져온다. http://, https://로 원격 위치에서 가져올 수도 있다.

 

2. inspect : 이미지에 대한 자세한 정보 출력

3. load : tar 아카이브 혹은 파일에서 이미지 로드

4. ls : 이미지 목록 출력

 기본적으로 container의 ls의 image 버전이다.

 

5. prune : 도커 이미지 정리

 사용하지 않는 이미지를 제거한다. 

 

6. push : 이미지 업로드 ( image 생략 가능 )

 도커 허브나 자체 레지스트리에 이미지를 공유하는데 사용한다. 기본 형식은 docker image push (옵션) 이미지명:태그

 예) docker tag (이미지명):latest (허브사용자명)/(이미지명):(태그), docker image push (허브사용자명)/(이미지명):(태그)

 

7. build : Dockerfile에서 이미지 빌드

 도커파일을 사용하여 이미지를 빌드 한다. 이 도커 파일을 통해 외부 라이브러리를 설치하거나 호스트 파일을 복사시킨 후 이미지를 제작할 수 있다.

  • --pull : 항상 최신 버전의 이미지 가져오도록 한다.
  • -f : Dokerfile 이름 설정 ( 기본값은 PATH/Dockerfile ) 

상위 커맨드 : volume

여기서 볼륨은 볼륨 마운트에 필요한 볼륨을 생성 삭제 한다.

 

1. create : 볼륨 생성

2. inspect : 볼륨 정보 반환 

3. ls : 볼륨 목록 출력

4. prune : 볼륨 정리

 image의 prune와 비슷하게 사용하지 않는 볼륨들을 제거한다.

5. rm : 하나 이상의 볼륨 제거

  • -f, --force : 강제 제거

상위 커맨드 : network

도커의 네트워크는 마치 별도의 물리적 서버처럼 작동할 수 있게 해준다. 따라서 각 컨테이너 별로 ip를 할당하고 지정된 포트를 이용해 서비스를 제공할 수 있다. 기본 네트워크 드라이버는 다음과 같다.

  • Bridge : 기본 네트워크 드라이버, 도커가 설치된 호스트 내의 컨태이너들 끼리 통신을 가능하게 한다. 
  • host : 컨테이와 도커 호스 간의 네트워크 격리를 제거하고 호스트의 네트워크를 직접 사용한다. 즉 자체 ip를 가지지 않는다.
  • overlay : 스웜 서비스에서 사용한다고 한다. 여러 도커 데몬과 함께 노드간 통신이 가능하다.
  • macvlan : 컨테이너에 Mac 주소를 할당하여 네트워크에서 물리적 장치로 표시시킨다.
  • none : 완전히 호스트와 분리된 네트워크를 사용한다.스웜에서는 사용할 수 없다고 한다.

 

1. connect : 컨테이너를 도커 네트워크에 연결

 이 명령어 외에도 docker run --network를 통해 네트워크에 연결시키며 컨테이너를 실행시킬 수 있다. 기본 구조는 docker network connection 네트워크명 컨테이너명.

 

2. create : 도커 네트워크 생성

 기본적인 구조는 docker network create (옵션) (네트워크명). 기본적으로 사용하는 네트워크 드라이버는 bridge이다. 

  • -d, --driver : 네트워크를 관리하는 드라이버 설정
  • --ipv6 : IPv6 네트워킹 활성화

3. disconnect : 컨테이너와의 도커 네트워크 연결 해제

  • -f : 강제 연결 해제

4. inspect : 네트워크에 대한 자세힌 정보 출력

 위 다른 inspect 명령어의 네트워크 버전

 

5.  ls : 네트워크 목록 출력

 기본적으로 다른 ls 명령어와 유사하다.

  • -f, --filter : 필터 값 제공 예) -f driver=bridge

6. prune : 네트워크 정리

 사용하지 않는 모든 네트워크를 삭제한다.

  • -f : 확인 메세지 표시하지 않음

7. rm : 네트워크 제거

  •  -f : 네트워크가 존재하지 않는 경우 오류 발생시키 않게 한다.

그외

login : 도커 레지스트리에 로그인

logout : 도커 레지스트리에 로그아웃

search : 도커 레지스트리 검색

checkpoint : 현재 상태 일시적 저장 후, 나중에 해당 시점의 상태로 되돌리 수 있다.

 

 

 

 

'도커' 카테고리의 다른 글

도커 기초 공부 (1)  (0) 2024.03.22