< 도커 기본 명령어 차례 >

● 시스템 명령

docker version

docker system info

docker system df

docker system prune

docker login

locker logout

 

● 이미지 관리 명령

docker pull

docker image ls

docker images

docker image inspect

docker image tag

docker push

docker search

docker image rm

docker image prune

docker container commit

 

● 컨테이너 실행 및 조작 관련 명령

docker container create

docker container run

docker container attach

docker container exec

 

● 컨테이너 정보 확인 명령

docker container ps

docker container stats

docker container inspect

docker container top

docker container port

docker container diff

docker container logs

docker container ls

 

● 컨테이너 관리 명령

docker container stop

docker container start

docker container kill

docker container restart

docker container prune

docker container pause

docker container unpause

docker container rename

docker container cp

 

● 컨테이너/이미지 백업 명령

docker container export

docker container import

docker image save

docker image load

 

● 네트워크 명령

docker network ls

docker network create

docker network connect

docker network disconnect

docker networkinspect

docker network rm

brctl show

 

● 볼륨 명령 
docker volume create 
docker volume ls 
docker volume rm 
docker volume prune 
docker volume inspect

 


 

 

 

docker pull

설명

- docker pull [옵션] 이미지명[:태그명]

- 기본적으로 hub.docker.com 에서 이미지를 다운받는다.

- 레드햇이나 다른 업체들도 허브가 있고, 직접 private하게 구축할수도 있다.

- 아무 태그도 안쓰면, :latest 태그를 쓴 것처럼 자동으로 최신을 받는다.

- 다운받을때 여러개가 나오면서 pull complete라고 나오는데, 유니온 파일시스템이라 레이어별로 받기 때문임.

- 이미지명 대신, 주소를 넣을 수 있음. 주소는 http:// 을 제외한다.

 

옵션

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

 

예시

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을 지정해서 접속. 단, https:// 이런거 제외)
docker pull utyk/goodi: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 : 지정된 형식만 보여줌

 

예시

- 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가 동일하다. 말그대로 알리아스만 추가한 것.

- 태그는 일반적으로 식별하기 쉬운 버전명을 붙인다.

- 내가 작성한 이미지를 도커 허브 등 레포지토리에 올리는(push) 경우, 규칙에 맞춰서 이미지에 사용자명을 만들어야 한다.

- 해당 이름이 도커 허브 레포지토리 안의 경로가 되기 때문에, push 하는 경우 업로드하려는 위치에 맞춰 이미지에 tag 명령을 통해 이름을 설정한다.

- 규칙 : 도커허브사용자명/이미지명:[태그명]

- 도커허브 등의 레포지토리에서, 사용자명/이미지명 의 형식을 따르지 않는 그냥 centos, apache 이런것들은 도커 오피셜 이미지이다. (사용자명이 없는 이미지)

 

옵션

- 미확인

 

예시

- docker image tag 이미지명:태그 바꿀이미지명:태그 

- 여기서 / 는 오해하지 말아야 할 것이, "바꿀이미지명"에 포함되는 것임.

- /를 쓰는 이유는 도커허브에 올리는 형식을 맞추기 위해서이다.

- 예를들어 어떤 이미지가 있는데, 그 이미지에 대해 사용자명이 loaden이고 컨테이너명이 nginx-test이고 태그버전정보가 latest이라면, 아래처럼 사용한다.

docker image tag nginx:latest loaden/nginx-test:latest

- 아래처럼 원래 있는 nginx의 IMAGE ID와 utyk/nginx-test의 IMAGE ID가 동일하다.

 

docker push

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

옵션
- 미확인

예시

업로드 후, 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 : 태그가 없는 부모 이미지를 삭제하지 않음

예시

# docker image rm utyk/nginx-test

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

 

 

 

 

docker container commit

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

옵션
--author, -a : 작성자를 지정함. 예를들어, "Choe Sung Kyu <utyk@naver.com>"
--message, -m : 메시지를 작성
--change, -c : 커밋 시 Dockerfile 명령을 지정한다.
--pause, -p : 컨테이너를 일시 정지하고 커밋한다.

예시
현재 실행된 컨테이너 상태. 이 컨테이너를 이미지로 만든다.

컨테이너로 이미지 생성

결과 확인

+ Recent posts