기본시스템 관리 명령어
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
docker push
- docker push 사용자명/이미지명[:태그]
- 내가 만든 이미지를 도커 허브 등의 레포지토리에 업로드한다.
- push를 하려면, 내가 올리려는 이미지가 어디로 올려야 할지 명시하기 위해서 이미지의 이름을 정확히 지정해야 한다. docker image tag 명령 참고
- 즉 예를 들어서, 내 계정에 특정 이미지를 올리려고 한다면, 아래와 같이 내계정명/이미지명 을 tag로 만들어야 한다.
- 도커허브에는 내계정/레포지토리/태그 구조이고, push로 올릴때는 내계정/이미지명/태그 형식으로 올린다.
- 도커허브에서 미리 레포지토리를 생성해두고 push로 올려도 되고, 그냥 push 로 올려도 도커허브에서 레포지토리가 자동으로 생성된다.
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만 표시
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 : 컨테이너를 일시 정지하고 커밋한다.
'IT Technology > Cloud' 카테고리의 다른 글
[GCP] Google Cloud Platform 브라우저 사용 없이 SSH 접속하기 (0) | 2022.10.14 |
---|---|
AWS ALB와 Network NLB 차이점 (1) | 2022.09.20 |
Docker Network 개요 (0) | 2021.07.30 |
Docker 기본 명령어 목록 (0) | 2021.06.30 |
컨테이너 기술과 도커 개념 (Container, Docker) (0) | 2021.05.31 |