IT Technology/Cloud

Docker 기본 명령어(기본시스템, 이미지 관리)

by빵수 2021. 7. 31. 19:54
728x90
반응형

기본시스템 관리 명령어

 

docker version

 

 

  • 설치한 도커의 버전 정보 확인
  • root로 실행해야 함
  • 도커 데몬이 내려간 경우, Server: Docker Engine 부분이 제대로 나오지 않는다.
  • Client 엔진은 도커 명령어를 쓰는 환경 같은 것이며, Server가 실제 도커 데몬이다.
  • Version: 19.03.8 은 연월일과 동일하다. (19년 3월 8일)
  • Go version : go라는 언어로 도커를 만들었다.

 

 

docker system info

 

  • 도커 실행환경 정보 확인 
  • 아래에 wrning 등의 메시지가 나올 수 있는데, 확인해서 해결해 줘야 한다.

Containers: 0 - 컨테이너 수 

Images: 1 - 이미지 수 

Server Version: 19.03.8 - 도커 버전 

Storage Driver: overlay2 - 스토리지 드라이버 종류 

Volume: local - 로컬 파일시스템 /루트를 사용한다는 것 

Network: bridge host ipvlan macvlan null overlay - 여러종류의 네트워크들 

Swarm: inactive - 도커 스웜은 안쓰고 있음 

OSType: linux - 운영체제 종류 

Architecture: x86_64 - 아키텍쳐 

CPUs: 4 - 호스트OS의 코어 수 

Total Memory: 3.844GiB - 호스트OS의 메모리 양

 

 

docker system df 

 

  • 도커 디스크 사용 상태 확인

옵션

-v : 이미지별, 컨테이너별, 볼륨별 정보 등을 상세히 확인

 

 

 

docker system prune

 

  • 사용하지 않는 이미지, 컨테이너, 볼륨, 네트워크 등을 일괄 삭제한다.

옵션

--all, -a 사용하지 않는 리소스를 모두 삭제
--force, -f 강제적으로 삭제

 

 

 

docker login

 

  • 도커 허브 레포지토리를 사용하기 위해 로그인이 필요하다. 
  • docker login [옵션] [서버] 
  • 옵션을 지정하지 않으면 사용자명과 비번을 물어본다.
  • 서버명을 지정하지 않으면 도커 허브에 자동으로 액세스된다.

옵션

--password, -p 비밀번호
--username, u 사용자명

 

 

 

docker logout

 

 

  • 도커 허브 로그인한 것을 로그아웃한다.
  • docker logout [옵션] [서버]
  • 서버명을 지정하지 않으면 도커 허브에 자동으로 액세스된다.

옵션

--password, -p 비밀번호 
--username, u 사용자명

 

 

 

 

이미지 관리 명령어

 

docker pull

 

  • docker pull [옵션] 이미지명[:태그명]
  • 기본적으로 hub.docker.com 에서 이미지를 다운받는다.
  • 레드햇이나 다른 업체들도 허브가 있고, 직접 private하게 구축할수도 있다.
  • 아무 태그도 안쓰면, :latest 태그를 쓴 것처럼 자동으로 최신을 받는다.
  • 다운받을때 여러개가 나오면서 pull complete라고 나오는데, 유니온 파일시스템이라 레이어별로 받기 때문이다.
  • 이미지명 대신, 주소를 넣을 수 있다. 주소는 http:// 을 제외한다.

 

옵션 

-a : 해당 이미지의 모든 태그를 가져온다.

 

 

Etc)

#docker pull 옵션 이미지명:태그명 

#docker pull -a centos (entos의 모든 태그의 이미지 다운로드)

#docker pull 192.168.56.100:5000/mybuild:1.0 (해당 아이피를 가진 프라이빗 레지스트리에서 mybuild 1.0을 받음)

#docker pull registry.asia.tesorflow/tensorflow (이런 url을 지정해서 접속. 단, hh단, https:// 이런거 제외)

#docker pull korea/good:mysql_v2 (도커허브에서 특정 유저의 이미지를 받을 때. "유저명/이미지명:태그" 형식)

 

 

docker image ls

 

  • docker images 와 동일하다. 
  • docker image ls [옵션] [레포지토리명]

옵션 

--all, -a : 모든 이미지 표시 

--all=false 이런식 

--digests : 다이제스트 값 표시 여부 

--digests=false : 이미지고유식별자를 출력하지 않음. 넘 길어서. 

--no-trunc : 결과를 모두 표시 --no-trunc=false 

--quiet, -q : 도커 이미지 ID만 표시 --quiet=false

 

 

  • REPOSITORY : 이미지의 이름
  • IMAGE ID : 는 고유한 이미지 ID이다. 랜덤문자열이다.
  • CREATED : 해당 이미지가 "생성된" 날짜. 다운받은 날짜가 아닌것으로 보인다.
  • DIGEST : --digests 옵션을 넣으면 보이고, 이것은 레지스트리에 업로드한 이미지를 고유하게 식별하기 위해 sha로 암호화된 식별자

 

docker image inspect

  • 이미지에 대한 상세 정보를 확인한다. 
  • docker image inspect 이미지명 
  • json 구조의 데이터 구조를 가지며, 이 구조로 정보를 보여준다. (json : JavaScript Object Notation : 텍스트 기반 데이터 포맷) 
  • 컨테이너의 모든 정보 확인 가능 (빌드옵션, 네트워크정보, 유니온파일시스템, 이름, ID 등 기타 모든 자세한 정보들)
  • json에서 특정 값을 확인할때는 아래 옵션처럼 --format 옵션을 사용하여 json 형식 데이터의 계층 구조를 지정한다.
  • 이 구조는 레벨 구조이다. Id, Parent, DockerVersion 같은 것들이며, 그 하위는 .으로 구분하여 표현한다. 

 

옵션 

--format : 지정된 형식만 보여줌

 

 

Ex)

  • ContainerConfig 아래의 Image를 출력 : docker image inspect --format="{{ .ContainerConfig.Image }}" mysql
  • OS 상세정보확인 docker inspect --format="{{.Os}}" centos:7 
  • CPU 아키텍쳐 정보 docker inspect --format="{{.Architecture}}" centos:7
  • IMAGE 상세정보 docker inspect --format="{{.ContainerConfig.Image}}" centos:7

 

  • 아래 예시는 전체를 보여주며, 각 항목이 계층화되어 있다. 
  • ID, RepoTags 는 같은 계층이고, RepoTags 밑에 nginx:latest는 그 아래 계층이다.

 

  • ID : 이미지의 ID 
  • Created : 작성일 
  • DockerVersion : 도커 버전 
  • Architecture : cpu 아키텍쳐 
  • volume : 호스트os와 연동된 path 
  • workingdir : 홈디렉토리같은곳. 예를들어 아파치면 아파치 설정파일이 있는곳을 여기로 잡는다. 
  • 유니온파일시스템 mergedir, upperdir, workdir 외에 여러가지 정보가 있다.

 

docker image tag

 

  • 명령어로서의 tag는 현재 존재하는 image에 대해 새로운 이름과 태그를 추가하는 것이다. 
  • 이미지를 새로 만드는 것이 아니므로, 원본과 tag본은 image ID가 동일하다. 말그대로 alias만 추가한 것.
  • 태그는 일반적으로 식별하기 쉬운 버전명을 붙인다.
  • 내가 작성한 이미지를 도커 허브 등 레포지토리에 올리는(push) 경우, 규칙에 맞춰서 이미지에 사용자명을 만들어야 한다.
  • 해당 이름이 도커 허브 레포지토리 안의 경로가 되기 때문에, push 하는 경우 업로드하려는 위치에 맞춰 이미지에 tag 명령을 통해 이름을 설정한다.
  • 규칙 : 도커허브사용자명/이미지명:[태그명]
  • 도커허브 등의 레포지토리에서, 사용자명/이미지명 의 형식을 따르지 않는 그냥 centos, apache 이런것들은 도커 오피셜 이미지이다. (사용자명이 없는 이미지)

 

Ex)

 

  • docker image tag 이미지명:태그 바꿀이미지명:태그
  • 여기서 / 는 오해하지 말아야 할 것이, "바꿀이미지명"에 포함되는 것임.
  • /를 쓰는 이유는 도커허브에 올리는 형식을 맞추기 위해서이다.
  • 예를들어 어떤 이미지가 있는데, 그 이미지에 대해 사용자명이 admin이고 컨테이너명이 nginx-test이고 태그버전정보가 latest이라면, 아래처럼 사용한다.
  • docker image tag nginx:latest admin/nginx-test:latest

원래 있는 nginx의 IMAGE ID와 Tag로 생성한 utyk/nginx-test의 IMAGE ID가 동일하다.

 

 

docker push

 

  • docker push 사용자명/이미지명[:태그] 
  • 내가 만든 이미지를 도커 허브 등의 레포지토리에 업로드한다. 
  • push를 하려면, 내가 올리려는 이미지가 어디로 올려야 할지 명시하기 위해서 이미지의 이름을 정확히 지정해야 한다. docker image tag 명령 참고 
  • 즉 예를 들어서, 내 계정에 특정 이미지를 올리려고 한다면, 아래와 같이 내계정명/이미지명 을 tag로 만들어야 한다. 
  • 도커허브에는 내계정/레포지토리/태그 구조이고, push로 올릴때는 내계정/이미지명/태그 형식으로 올린다. 
  • 도커허브에서 미리 레포지토리를 생성해두고 push로 올려도 되고, 그냥 push 로 올려도 도커허브에서 레포지토리가 자동으로 생성된다.

Docker Push Upload
docker hub에서 확인할 수 있다.

 

docker search

 

  • 기본적으로 도커허브에 공개된 이미지를 검색한다. 
  • docker search [옵션] 키워드
  • 도커 허브에 공개된 이미지가 모두 안전하지 않으므로, 도커 이미지를 사용할때는 안전을 위해 공식 이미지 또는 dockerfile이 제대로 공개된것을 선택하여 확인해야 한다.

 

옵션 

--no-trunc : 결과를 모두 표시 

--no-trunc=false : 모든 결과 표시 

--linit : n 건의 검색 결과를 표시 

--filter=stars=n : 즐겨찾기(별표)의 수 n개 이상만 검색함 (docker search --filter=stars=10 nginx) 

--automated=false : automated build만 표시

 

AUTOMATED : github 등의 외부 소스 저장소에 있는 소스를 도커허브에서 자동으로 빌드해서 만든것인지 여부를 알려줌.

 

 

docker image rm

 

  • 도커 이미지를 삭제 (docker rm은 컨테이너 삭제이다) 
  • docker image rm [옵션] 이미지명 [이미지명 ...]
  • 해당 이미지로 만들어놓은 컨테이너가 존재한다면, 이미지는 삭제되지 않음. (컨테이너가 살아있든 중단되었든 , docker ps -a 로 보이면)
  • 이름(REPOSITORY항목) 또는 Image ID를 명시한다.

옵션 

--force, -f : 이미지를 강제로 삭제. 컨테이너도 죽는다. 강제는 별로 좋지않으므로 권고되지 않는다. 

--no-prune=false : 태그가 없는 부모 이미지를 삭제하지 않는다.

 

Ex)

# docker image rm utyk/nginx-test

 

이미지 전체 삭제 : docker rmi $(docker images -q)

 

 

docker container commit

 

  • docker container commit 옵션 컨테이너명 이미지명:태그명 
  • 이미지에서 컨테이너를 만들지만, 컨테이너에서 이미지를 만들 수도 있다.
  • 컨테이너로부터 이미지를 작성한다.
  • 내가 이미지를 가져와서 여러가지 수정 후, commit 하면 내가 수정한 정보를 그대로 가진 이미지를 생성할 수 있다.

 

옵션

--author, -a : 작성자를 지정함. 예를들어, Gildong Hong <ghh@live.co.kr>

--message, -m : 메시지를 작성 

--change, -c : 커밋 시 Dockerfile 명령을 지정한다. 

--pause, -p : 컨테이너를 일시 정지하고 커밋한다.

 

 

현재 실행된 컨테이너 상태. 이 컨테이너를 이미지로 만든다.
컨테이너로 이미지 생성
결과 확인

 

 

반응형