IT/기초 지식

[Docker] Docker 커맨드 치트 시트

개발자 두더지 2021. 9. 23. 23:01
728x90

자주 사용하는 커맨드


# 실행중인 컨테이너에 들어가기
$ docker-compose exec hoge_app bash

# stop
$ docker-compose stop

# docker-compose관리 하의 컨테이너를 삭제하고, 연결된 볼륨도 삭제
$ docker-compose rm -v

# 캐시를 사용하지 않고 빌드
$ docker-compose build --no-cache

# 컨테이너를 일괄 삭제
$ docker rm `docker ps -a -q`

# 모든 볼륨을 삭제
$ docker volume rm $(docker volume ls -qf dangling=true)

# 이미지의 목록
$ docker images -a

# 이미지의 일괄 삭제
$ docker rmi `docker images -aq`
$ docker rmi -f `docker images -aq`

# docker images로 REPOSITORY가 <none> 이 되어있는 것을 삭제(클라이언트와 데몬API 양쪽 모두 1.25이후의 버전)
$ docker image prune

# docker images로 REPOSITORY가 <none> 이 되어있는 것을 삭제(1.25미만의 버전용)
$ docker rmi $(docker images | awk '/^<none>/ { print $3 }')

# 호스트로부터 컨테이너에 파일을 복사
# docker cp <복사할 파일의 경로> <컨테이너 명or ID>:<컨테이너 저장처 경로>
$ docker cp file.rc continername:/host/dir/ 

# 컨테이너로부터 호스트에 파일을 복사
# docker cp  <컨테이너명or ID>:<복사할 파일의 경로> <호스트 저장처 경로>
$ docker cp  continer_name:/var/www/html/ /User/meta/hoge

 

 

컨테이너의 생성과 실행


$ docker run [옵션] [이미지명:태그명] [인수]
옵션 설명
--name 컨테이너명을 지정 docker run --name "test" centos
-d 백그라운드 실행 docker run -d centos
-it 콘솔에 결과를 출력 docker run -it --name "test" centos /bin/cal
-p host:cont 포트 포워딩 docker run -d -p 8080:80 httpd
--add-host 호스트명과 IP를 지정 docker run -it --add-host=test.com:192.168.1.1 centos
--dns DNS 서버를 지정 docker run --dns=192.168.1.1 httpd
--mac-address MAC 어드레스를 지정 docker run -it --mac-address="92:d0..." centos
--cup-shares CPU 배분(모두 1024) docker run --cpu-shares=512 centos
--memory 메모리의 상한 docker run --memory=512m centos
-v 디렉토리의 공유 docker run -v /c/Users/src:/var/www/html httpd
-e 환경변수를 설정 docker run -it -e foo=bar centos /bin/bash
--env-file 환경변수 리스트로부터 설정 docker run -it --env-file=env_list centos /bin/bash
-w 작업 디렉토리를 지정 docker run -it -w=/tmp/work centos /bin/bash

 

 

실행중의 컨테이너 조작


설명 커맨드 예(컨테이너ID=CID)
컨테이너 목록 docker ps [옵션] docker ps
컨테이너 확인 docker stats 컨테이너ID docker stats CID
컨테이너 실행 docker start [옵션] 컨테이너ID docker start CID
컨테이너 정지 docker stop [옵션] 컨테이너ID docker stop CID
컨테이너 재실행 docker restart [옵션] 컨테이너ID docker restart CID
컨테이너 삭제 docker rm [옵션] 컨테이너ID docker rm CID
컨테이너 중단 docker pause 컨테이너ID docker pause CID
컨테이너 재개 docker unpause 컨테이너ID docker unpause CID
컨테이너 접속 docker attach 컨테이너ID docker attach CID
컨테이너 로그 docker logs [옵션] 컨테이너ID docker logs CID
프로세스 실행 docker exec [옵션] 컨테이너ID 커맨드[인수] docker exec -it CID /bin/cal
프로세스 확인 docker top 컨테이너ID docker top CID
포트 확인 docker port 컨테이너ID docker port CID
컨테이너명 변경 docker rename 현재의이름 새로운컨테이너명 docker rename now new
이미지 차이값(차분) docker diff 컨테이너ID docker diff CID
파일 복사 docker cp 컨테이너ID:파일경로 docker cp CID:/var/www/a.txt /Users/ryo/
이미지 작성 docker commit [옵션] 컨테이너ID 이미지명[:태그명] docker commit CID my_image:1.0
이미지를 .tar형식으로 출력 docker export 컨테이너ID docker export CID
.tar로부터 이미지 작성 docker import 경로orURL - 이미지명[:태그명] cat src.tar|docker import - web:1.0
이미지 저장 docker save [옵션] 저장파일명[이미지명] docker save -o src.tar web
이미지 로드 docker load [옵션] docker load -i sec.tar

- 컨테이너 ID부분은 컨테이너명으로 작성할 수 있다.

- docker ps는 실행중의 컨테이너 목록, docker ps -a는 정지중인 컨테이너를 포함한 컨테이너의 목록이다.

# 오래된 컨테이너 일괄 삭제
docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm

# 컨테이너 일괄 삭제
docker rm `docker ps -a -q`

 

 

이미지 조작


설명 커맨드 예(이미지ID=IID)
pull docker pull [옵션] 이미지명[:태그] docker pull centos:7
목록 docker images [옵션] [리포지터리명] docker images -a
상세 docker inspect [옵션] [이미지ID] docker inspect IID
검색 docker search [옵션] [키워드] docker search nginx
삭제 docker rmi [옵션] 이미지명 docker rmi nginx
로그 docker logs [옵션] 이미지명 docker logs nginx
태그 변경 docker tag [이미지ID] [리포지터리명]:[태그] docker tag IID hello-world:new_tag
# 이미지의 일괄삭제
docker rmi `docker images -q`

 

 

Docker Compose


설명 커맨드
컨테이너 생성, 실행 docker-compose up [옵션] [서비스] docker-compose up -d
생성 컨테이너의 수 docker-compose scale [서비스=수] docker-compose scale web=10
컨테이너의 목록 docker-compose ps [옵션] docker-compose ps
컨테이너 로그 docker-compose logs [옵션] [서비스] docker-compose logs
커맨드 실행 docker-compose run [옵션] [서비스] [커맨드] docker-compose run web /bin/cal
모든 컨테이너를 실행 docker-compose start [서비스] docker-compose start
모든 컨테이너를 재실행 docker-compose restart [옵션] [서비스] docker-compose restart
모든 컨테이너를 강제 정지 docker-compose kill [옵션] [서비스] docker-compose kill
모든 컨테이너를 삭제 docker-compose rm [옵션] [서비스] docker-compose rm
모든 컨테이너를 빌드 docker-compose build [옵션] docker-compose build --no-cache

 

 

DockerFile


설명 커맨드
원본이되는 이미지 FROM FROM name/web:ver1.0
작성자 MAINTAINER MAINTAINER name
환경변수 ENV ENV KEY=VALUE
지정 커맨드의 실행 RUN RUN yum -y install httpd
이미지에 파일을 추가 ADD ADD index.html /var/www/html/index.html
포트 번호를 지정 EXPOSE EXPOSE 3306
컨테이너 실행시에 실행할 커맨드 CMD CMD ["service","httpd","start"]
현재 디렉토리를 지정 WORKDIR WORKDIR /var/www/html
볼륨 지정 VOLUME VOLUME /var/log/httpd

- DockerFile은 명령 옵션 형식의 행을 나열한 구성으로 되어 있다.

- #은 코멘트

- Dockerfile은 build 서브 커맨드로 빌드시에 이용된다.

- Docker 빌드는 커맨드 단위를 스텝으로써 실행한다

  - 각 스텝은 컨테이너의 스냅샷을 캐시한다.

  - Dockerfile을 부분 변경한 경우는 그 차이만큼 실행된다.

 

 

Docker Hub


설명 커맨드
로그인 docker login [옵션] [서버] docker login -u "name" -p "pass"
로그아웃 docker logout[서버명] docker logout
업로드 docker push 유저명/이미지명[:태그명] docker push user/my_image:v1.0
# Dockerhub에 로그인
docker login -u "name" -p "pass"

# 현재 디렉토리의 Dockerfile부터 이미지를 작성 
# docker build -t 유저명/이미지명:태그명 .
docker build -t wmetaw/mylinux:1.0 .

# Dockerhub에 push
docker push wmetaw/mylinux:1.0

 

 

Docker 자체의 정보


설명 커맨드
버전 확인 docker version
실행 환경 확인 docker info

 

 

Docker 컴포넌트


 Docker은 코어 기능을 제공하는 "Docker Engine"을 중심으로 "이미지의 작성 > 공개 > 컨테이너 실행"을 하기 위한 컴포넌트(부품)이 제공되어 있다. 주요 컴포넌트는 다음과 같다.

Docker Engine(Docker 코어 기능)

Docker 이미지의 생성이나 컨테이너의 궤도등을 실행하기 위한 코어 기능

Docker 커맨드의 실행이나 DockerFile에 의한 이미지의 생성을 한다.

Docker Machine(Docker 실행 환경 구축)

VirtualBox를 시작으로, AWS나 AZURE등의 클라우드 환경등에 Docker의 실행 환경을 커맨드로 자동 생성하는 툴

Docker Compose(여러 개의 컨테이너의 일원 관리)

여러 개의 컨테이너의 구성 정보를 코드로 정의하여, 커맨드를 실행할 때마다 어플리케이션의 실행 환경을 구성하는 컨테이너군을 일원 관리하기 위한 툴

Docker Swarm(클러스터 관리)

Docker Swarm은 여러 개의 호스트를 클러스터화하기 위한 툴

클러스터의 관리나 API 제공을 하는 역할이 "Manager", Docker 컨테이너를 실행하는 역할은 "Node"라고 말한다.

Docker Kitematic(Docker의 GUI 툴)

Docker 이미지의 생성이나 컨테이너의 실행 등을 하기 위한 GUI툴

그래픽 UI이므로 엔지니어가 아닌 사람에게 최적 

Docker Registry(이미지 공개, 공유)

컨테이너의 원본이되는 이미지를 공개, 공유하기 위한 레지스트리 기능

Docker 공식의 레지스트리 서비스인 Docker Hub도 이 기능을 사용하고 있다.

Docker Hub(Docker 공식의 레지스트리)

CentOS, nginx등의 공식 이미지는 이 레포지스티로부터 얻는다.

public등의 많은 유저에 의해 제작된 이미지가 공개되어 있다.


참고자료

https://qiita.com/wMETAw/items/34ba5c980e2a38e548db

728x90