본문 바로가기
Docker

Docker 기본명령어

by 혀눅짱 2023. 9. 19.

docker 기본 명령어

docker version
   ⁃ docker 버전이나 Go 언어, 버전 OS, 아키텍처를 확인

docker system info
  - docker 실행환경의 상세 설정을 표시

docker system df
  - 디스크의 이용 상황을 표시 (상세 내용은 -v 추가)

docker image pull
  - Docker Hub에서 이미지를 다운받음

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

$ docker image pull centos:7 <= 7버전을 선택하여 저장 $ docker image pull -a centos <= 전체 목록을 저장

docker image ls [ == docker images ]
  - Docker Hub에서 이미지를 다운받은 목록을 확인

docker image ls [옵션] [레파지토리명]

$ docker image ls

[옵션]
—all, -a : --digests : --no-trunc : --quiet, -q :

모든 이미지를 표시
다이제스트를 표시할지 말지 [이미지를 고유하게 식별하기 위한 값] 결과를 모두 표시
Docker 이미지 ID만 표시

[docker image ls 명령 결과]

- REPOSITORY : - TAG : - IMAGE ID : - CREATED : - SIZE :

이미지 이름 이미지 태그명 이미지 ID 작성일

이미지 크기

docker image inspect

  - 이미지 상세 정보 확인

docker image inspect 이미지명[:태그명] $ docker image inspect centos:7

docker image tag
  - 이미지에 표식이 되는 태그를 붙일 때 사용

docker image tag <Docker Hub 사용자명>/이미지명:[태그명] $ docker image tag nginx batstorm0530/webserver:1.0

docker search
  - Docker Hub에 공개되어 있는 이미지를 검색할 때 사용

docker search [옵션] <검색 키워드>
$ docker search --filter=stars=1000 nginx [옵션]

 

docker image rm ( = docker rmi ) - 작성한 이미지를 삭제

docker image rm [옵션] 이미지명 [이미지명] $ docker image rm nginx
[옵션]

--force, -f : 이미지를 강제로 삭제 --no-prune : 중간 이미지를 삭제하지 않음

 

docker image prune [옵션] $ docker image prune [옵션]

--all, -a : 사용하지 않은 이미지를 모두 삭제 --force-f : 이미지를 강제로 삭제

docker login
  - Docker 레파지토리에 업로드를 하기 위한 로그인

docker login [옵션] [서버] $ docker login
[옵션]

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

docker image push
  - Docker Hub
에 이미지를 업로드

docker image push 이미지명[:태그명]
$ docker image push batstorm0530/webserver:1.0

docker logout
  - Docker Hub
에서 로그아웃

docker logout [서버명] $ docker logout

• docker container run
  - 컨테이너 생성 및 시작

docker container run [백그라운드 실행 옵션] 이미지명[:태그명] [인수]

$ docker container run -it —name “test1” centos /bin/cal

[옵션]
--attach, -a

--cidfile --detach, -d --interactive, -i --tty, -t

: 표준입력(STDIN), 표준출력(STDOUT), 표준 오류 출력(STDERR)에 어태치 : 컨테이너 ID를 파일로 출력
: 컨테이너를 생성하고 백그라운드에서 실행
: 컨테이너의 표준 입력을 엶

: 단말기 디바이스를 사용

- 컨테이너의 백그라운드 실행

docker container run [실행 옵션] 이미지명[:태그명] [인수]

$ docker container run -d centos /bing/ping localhost

[백그라운드 실행 옵션]
--detach, -d :
--user, -u :
--rm :
--restart[no | on-failure | on-failure:횟수n | always | unless-stopped]

:

no
on-failure on-failure:횟수n always unless-stopped

백그라운드에서 실행
사용자명을 지정
명령 실행 완료 후에 컨테이너를 자동으로 삭제

명령의 실행 결과에 따라 재시작을 하는 옵션

  • :  재시작하지 않음
  • :  종료 스테이터스가 0이 아닐 때 재시작
  • :  종료 스테이터스가 0이 아닐 때 n번 재시작
  • :  항상 재시작
  • :  최근 컨테이너가 정지 상태가 아니라면 항상 재시작

- 컨테이너의 네트워크 설정

docker container run [네트워크 옵션] 이미지명[:태그명] [인수]

$ docker container run -d -p 8080:80 nginx

[네트워크 옵션]
--add-host=[호스트명:IP 주소] : 컨테이너의 /etc/hosts 에 호스트명과 IP주소를 정의 --dns[IP 주소] : 컨테이너용 DNS 서버의 IP 주소 지정

--expose
--mac-address=[MAC 주소]
--hostname, -h
--publish-all, -p
--publish, -p[호스트의 포트번호]:[컨테이너의 포트 번호]

: 지정한 범위의 포트 번호를 할당
: 컨테이너의 MAC 주소를 지정
: 컨테이너 자신의 호스트명을 지정
: 호스트의 임의의 포트를 컨테이너에 할당

: 호스트와 컨테이너의 포트 매핑 --net=[bridge | none | container<name | id> | host | NETWORK]

: 컨테이너의 네트워크를 지정 (기본적으로 Host OS 와 브리지 연결 을 하지만 --net 옵션 이용시 아래와 같은 설정이 가능함)

bridge : none : container:[name | id] : host : NETWORK :

브리지 연결(기본값)을 사용
네트워크에 연결하지 않음
다른 컨테이너의 네트워크를 사용
컨테이너가 호스트 OS의 네트워크를 사용
사용자 정의 네트워크를 사용
(사용자 정의 네트워크는 docker network create 명령으로 작성)

- 자원을 지정하여 컨테이너 생성 및 실행

docker container run [자원 옵션] 이미지명[:태그명] [인수]

$ docker container run --cpu-shares=512 --memory=1g centos
$ docker container run -v /Users/asa/webap:/usr/share/nginx/html nginx
[자원 옵션]

--cpu-shares, -c : CPU의 사용 배분(비율)
--memory, -m : 사용할 메모리를 제한하여 실행(단위는 b, k, m, g 중 하나) --volume=[호스트의 디렉토리]:[컨테이너의 디렉토리], -v

: 호스트와 컨테이너의 디렉토리를 공유

- 컨테이너를 생성 및 시작하는 환경을 지정

docker container run [환경설정 옵션] 이미지명[:태그명] [인수]

$ docker container run -it -e foo=bar centos /bin/bash

[환경설정 옵션]
--env=[환경변수], -e : 환경변수를 설정 --env-file=[파일명] : 환경변수를 파일로부터 설정

--read-only=[true | false] --workdir=[패스], -w
-u, --user=[사용자명]

• docker container ls (docker ps) - 가동 컨테이너 목록 표시

 docker container ls [옵션]

$ docker container ls

: 컨테이너의 파일 시스템을 읽기 전용으로 만듦 : 컨테이너의 작업 디렉토리를 지정
: 사용자명 또는 UID를 지정

[옵션]
--all, -a

--filter, -f --format --last, -n --latest, -l --no-trunc --quiet, -q --size, -s

: : : : : : : :

실행 중/정지 중인 것도 포함하여 모든 컨테이너를 표시 표시할 컨테이너의 필터링
표시 포맷을 지정
마지막으로 실행된 n건의 컨테이너만 표시

마지막으로 실행된 컨테이너만 표시 정보를 생략하지 않고 표시 컨테이너 ID만 표시
파일 크기 표시

[명령 결과]
- CONTAINER ID : - IMAGE : - COMMAND : - CREATED : - STATUS : - PORTS : - NAMES :

컨테이너 ID
컨테이너의 바탕이 된 이미지
컨테이너 안에서 실행되고 있는 명령
컨테이너 작성 후 경과 시간
컨테이너의 상태(restarting | running | paused | exited) 할당된 포트
컨테이너 이름

• docker container stats
 - 컨테이너의 가동 상황을 확인하고 싶을 때 사용

docker container stats [컨테이너 식별자]

$ docker container stats webserver

[명령 결과]
- CONTAINER ID : - NAME : - CPU % : - MEM USAGE/LIMI : - MEM % : - NET I/O : - BLOCK I/O : - PIDS :

컨테이너 식별자
컨테이너명
CPU 사용률
메모리 사용량/컨테이너에서 사용할 수 있는 메모리 제한 메모리 사용률

네트워크 I/O
블록 I/O
PID(Windows 컨테이너 제외)

  • docker container start
    - 정지하고 있는 컨테이너를 시작
    $ docker container start dbb4bbe0f470
  • [옵션]
    --attach, -a : 표준 출력, 표준 오류 출력을 엶 --interactive, -i : 컨테이너의 표준입력을 엶
  • docker container start [옵션] <컨테이너 식별자> [컨테이너 식별자]
  • docker container stop
    - 실행중인 컨테이너를 정지
    $ docker container stop -t 2 dbb4bbe0f470
  • [옵션]
    --time, -t : 컨테이너의 정지 시간을 지정 (default 10초)
  • docker container stop [옵션] <컨테이너 식별자> [컨테이너 식별자]

docker container restart

 - 실행중인 컨테이너를 재시작
docker container restart [옵션] <컨테이너 식별자> [컨테이너 식별자] $ docker container restart -t 2 webserver
[옵션]

--time, -t : 컨테이너의 정지 시간을 지정 (default 10초)

docker container rm
  - 정지하고 있는 컨테이너를 삭제
docker container rm [옵션] <컨테이너 식별자> [컨테이너 식별자] $ docker container rm dbb4bbe0f470
[옵션]

--force, -f : 실행중인 컨테이너를 강제로 삭제 --volumes, -v : 할당한 볼륨을 삭제

docker container pause
  - 실행중인 컨테이너에서 작동중인 프로세스를 모두 중단시킴 docker container pause <컨테이너 식별자>
$ docker container pause webserver

docker container unpause
  - 중단시킨 컨테이너에서 프로세스를 모두 재개함
docker container unpause <컨테이너 식별자> $ docker container unpause webserver

• docker network ls
  - 네트워크의 목록을 확인

docker container ls [옵션]

$ docker network ls -q —filter driver=bridge

[옵션]
--no-trunc : -q, —quite : -f, --filter=[] :

상세정보를 출력함 네트워크 ID만 표시함 출력을 필터링함

driver : id : label : name : scope : type :

드라이버 지정
네트워크 ID
네트워크에 설정된 라벨(label=<key> 또는 label=<key>=<value>로 지정) 네트워크명
네트워크의 스코프 (swarm/global/local)
네트워크의 타입(사용자 정의 네트워크 custom/정의 완료 네트워크 builtin)

[ 오버레이 네트워크 (overlay network) ]
- 물리 네트워크 상에서 소프트웨어적으로 에뮬레이트한 네트워크를 말함
- 물리 네트워크를 덮듯이 가상 네트워크가 구성된다는 점에서 가상 네트워크라고도 부름
- 물리 네트워크의 구조가 은폐되어 그 아래에 있는 물리 계층의 형태나 제어 방식을 의식하지 않고 이용 - 예를 들어 여러개의 호스트에 걸친 네트워크를 구성할 때 사용
- 소프트웨어로 구성되어 물리 작업을 수반하지 않고 자유롭게 구성을 변경할 수 있는 장점이 있음

• docker network create
  - 새로운 네트워크를 작성하여 추가
docker container create [옵션] 네트워크
$ docker network create —driver-bridge web-network [옵션]

--driver, -d : --ip-range : --subnet :

네크워크 브리지 또는 오버레이(기본값은 bridge) 컨테이너에 할당하는 IP 주소의 범위를 지정 서브넷을 CIDR 형식으로 지정

--ipv6 : IPV6 네트워크를 유효화할지 말지(true/false) -label : 네트워크에 설정하는 라벨

• docker network connect / disconnect - 컨테이너를 네트워크에 연결

 docker network connect [옵션] <네트워크> <컨테이너 식별자>

$ docker network connect web-network webfront
$ docker container run -itd —name=webap —net=web-network nginx
[옵션]

--ip :
--ip6 :
--alias :
--link :
- 컨테이너를 네트워크에 연결 해제

IPv4 주소
IPv6 주소
앨리어스명
다른 컨테이너에 대한 링크

docker network disconnect <네트워크> <컨테이너 식별자>

$ docker network disconnect web-network webfront

  • docker network inspect [옵션] 네트워크 - 네트워크 상세 정보 확인 $ docker network inspect web-network
  • docker network inspect [옵션] <네트워크>
  • docker network rm - 네트워크 삭제 $ docker network rm web-network
  • docker network rm [옵션] <네트워크>
  • docker container attach docker container attach <컨테이너 식별자>
  • $ docker container attach sample
  • - 가동중인 컨테이너 연결

• docker container exec

 - 가동 컨테이너에서 프로세스 실행

docker container exec [옵션] <컨테이너 식별자> <실행할 명령> [인수]

$ docker container exec -it webserver /bin/bash

[옵션]
--detach, -d : --interactive, -i : --tty, -t : --user, -u :

명령을 백그라운드에서 실행 컨테이너의 표준 입력을 엶 tty(단말 디바이스)를 사용 사용자명을 지정

  • docker container top
    - 가동중인 컨테이너에서 실행되고 있는 프로세스를 확인
    $ docker container top webserver
  • docker container top <컨테이너 식별자>
  • docker container port
    - 가동중인 컨테이너에서 실행되고 있는 프로세스가 전송되고 있는 포트를 확인
    $ docker container port webserver
  • docker container port <컨테이너 식별자>
  • docker container rename - 컨테이너 이름 변경 $docker container rename webserver webserver2
  • docker container rename <컨테이너 식별자> <NEW컨테이너식별자>
  • docker container cp
    - 컨테이너 안의 파일을 복사
  • docker container cp <컨테이너 식별자>:<컨테이너 안의 파일 경로> <호스트의 디렉토리 경로> docker container cp <호스트의 파일> <컨테이너 식별자>:<컨테이너 안의 파일 경로>
    $ docker container cp webserver:/etc/nginx/nginx.conf /tmp/nginx.conf

 

 

docker image save
- 이미지를 tar 파일로 저장

docker image save [옵션] <저장 파일명> [이미지명] $ docker image save -o export.tar nginx

docker image load
- 이미지를 읽어 들이기

docker image load [옵션] [파일명] $ docker image load -i export.tar

[export/import save/load 차이]
- 컨테이너를 export 하면 컨테이너를 작동시키는데 필요한 파일을 모두 압축 아카이브로 모을 수 있음

그래서 이 tar 파일을 풀면 컨테이너의 루트 파일 시스템을 그대로 추출할 수 있음
한편 이미지를
save 하면 이미지의 레이어 구조도 포함된 형태로 압축 아카이브로 모을 수 있음 이미지는 똑같아도 docker container export 명령과 docker image save 명령은 내부적인 디렉토리와 파일 구조가 다름

• docker system prune
- 사용하지 않는 이미지, 컨테이너, 볼륨, 네트워크를 일괄적으로 삭제할 수 있음

docker image load [옵션]

$ docker system prune -a

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

docker image save
- 이미지를 tar 파일로 저장

docker image save [옵션] <저장 파일명> [이미지명] $ docker image save -o export.tar nginx

docker image load
- 이미지를 읽어 들이기

docker image load [옵션] [파일명] $ docker image load -i export.tar

[export/import save/load 차이]
- 컨테이너를 export 하면 컨테이너를 작동시키는데 필요한 파일을 모두 압축 아카이브로 모을 수 있음

그래서 이 tar 파일을 풀면 컨테이너의 루트 파일 시스템을 그대로 추출할 수 있음
한편 이미지를
save 하면 이미지의 레이어 구조도 포함된 형태로 압축 아카이브로 모을 수 있음 이미지는 똑같아도 docker container export 명령과 docker image save 명령은 내부적인 디렉토리와 파일 구조가 다름

• docker system prune
- 사용하지 않는 이미지, 컨테이너, 볼륨, 네트워크를 일괄적으로 삭제할 수 있음

docker image load [옵션]

$ docker system prune -a

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

'Docker' 카테고리의 다른 글

Docker 이미지 생성  (0) 2023.09.19
Docker의 정의  (0) 2023.09.19