💾 docker 설치
[LINUX] 공통 스크립트 (종류 상관 없음)
$ sudo wget -q0- http://get.docker.com/ | sh
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sh get-docker.sh
[LINUX] Ubuntu
$ sudo apt-get update
$ sudo apt-get install docker.io
# Waiting for cache lock : Could not get lock /var/lib/dpkg/lock. It is held by process 6488)...
# 위 같은 오류 발생시 $ sudo rm -rf /var/lib/dpkg/lock 실행후 리부팅 후 다시 설치 하면 된다.
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
# /usr/bin/docker.io 실행 파일을 직접 사용하기보다는 링크를 만들어 사용하는것이 좋다.
[LINUX] Cent OS(RedHat, Fedora)
#Install
sudo yum install docker
#Docker 서비스 실행
sudo service docker start
#부팅시 자동 실행 설정
sudo chkconfig docker on
Window, Mac
이곳에 설명 잘 되어있다.
🎨 시스템 명령어
버전 정보 확인
$ sudo docker version
실행 환경 정보 확인
$ sudo docker system info
<간단 설명>
Containers: 0 - 컨테이너 수
Images: 1 - 이미지 수
Server Version: 19.03.5 - 도커 버전
Storage Driver: overlay2 - 스토리지 드라이버 종류
Volume: local - 로컬 파일시스템 /루트를 사용한다는 것
Network: bridge host ipvlan macvlan null overlay - 여러종류의 네트워크들
Swarm: inactive - 도커 스웜은 안쓰고 있음
OSType: linux - 운영체제 종류
Architecture: x86_64 - 아키텍쳐
CPUs: 8 - 호스트OS의 코어 수
Total Memory: 7.625GiB - 호스트OS의 메모리 양
디스크 사용 상태 확인
$ sudo docker system df
#옵션
-v : 이미지별, 컨테이너별, 볼륨별 정보 등을 상세히 확인
실행중이지 않은 이미지,컨테이너,볼륨,네트워크 등 일괄삭제
$ sudo docker system prune
#옵션
--all, -a :사용하지 않는 리소스를 모두 삭제
--force, -f :강제적으로 삭제
도커허브 로그인/로그아웃
$ sudo docker login
$ sudo docker logout
#옵션
--password, -p :비밀번호
--username, u :사용자명
🎨 이미지 명령어
이미지 다운
$ sudo docker pull [옵션] 이미지명[:태그명]
#옵션
-a : 해당 이미지의 모든 태그를 가져온다.
이미지 확인
$ sudo docker image ls [옵션] [레포지토리명]
=$ sudo docker images
#옵션
--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로 암호화된 식별자
이미지 상세 정보 확인
$ sudo docker image inspect [이미지명]
#옵션
--format : 지정된 형식만 보여줌
이미지 태그 추가
$ sudo docker image tag [이미지명:태그]/[바꿀이미지명:태그]
이미지 업로드
$ sudo docker push [사용자명]/이미지명:태그]
이미지 검색
$ sudo docker search [옵션] [키워드]
#옵션
--no-trunc : 결과를 모두 표시
--no-trunc=false : 모든 결과 표시
--linit : n 건의 검색 결과를 표시
--filter=stars=n : 즐겨찾기(별표)의 수 n개 이상만 검색함 (docker search --filter=stars=10 nginx)
--automated=false : automated build만 표시
이미지 삭제
$ sudo docker image rm [옵션][이미지명]
#옵션
--force, -f : 이미지를 강제로 삭제. 컨테이너도 죽는다. 강제는 별로 좋지않으므로 비추함.
--no-prune=false : 태그가 없는 부모 이미지를 삭제하지 않음
이미지 전체 삭제 : sudo docker rmi $(docker images -q)
# 중지된 지 1시간 이상 지난 이미지만 삭제
sudo docker container prune --filter until=1h
# 사용하지 않는(dangling) image 삭제
sudo docker image prune -a
🎨 컨테이너 명령어
컨테이너 생성
$sudo docker container create
#옵션
a, --attach=[STDIN | STDOUT | STDERR] : 표준입력, 표준출력, 표준에러출력을 연결
--cidfile="파일명" : 컨테이너 아이디를 파일로 출력
컨테이너 Attach
$ sudo docker attach [컨테이너 이름]
컨테이너 exec
$ sudo docker container exec [옵션][컨테이너이름][실행할명령][인수]
#옵션
--detach, -d : 명령을 백그라운드에서 실행
--interactive, -i : 컨테이너의 표준 입력을 연다.
--tty, -t : pseudo-TTY 를 할당한다.
--user, -u : 사용자명을 지정한다.
#예시
- 배쉬 쉘 실행 : docker container exec -it webserver /bin/bash
- 명령 직접 실행하기 : docker container exec -it webserver /bin/echo "Hello world"
- 다른 컨테이너에 ping 날리기 : docker exec -t web01 ping 127.0.0.1
컨테이너 상태확인
$ sudo docker container ps
#옵션
-a : stop된 컨테이너까지 모두 보기
컨테이너 상세 정보 확인
$ sudo docker container inspect [컨테이너명]
#옵션
--format : 지정된 형식만 보여줌
가동중 컨테이너 프로세스 확인
$ sudo docker container top [컨테이너명]
컨테이너에서 실행되고있는 프로세스 전송 포트 확인
$ sudo docker container port [컨테이너명]
컨테이너 변동사항 확인
$ sudo docker container diff [컨테이너명]
컨테이너 로그확인
$ sudo docker container logs [컨테이너명]
#옵션
-t : 타임스탬프를 표시해준다.
-f : 실시간으로 관측 가능
가동중인 컨테이너 목록표시
$ sudo docker container ls
#옵션
--all, -a : 실행중, 정지중 모두 포함하여 모든 컨테이너 표시
--filter, -f : 표시할 컨테이너 필터링
--last, -n : 마지막으로 실행된 N건의 컨테이너만 표시
--latest, -l : 마지막으로 실행된 컨테이너만 표시
--no-trunc : 정보를 생략하지 않고 표시
--quiet, -q : 컨테이너 아이디만 표시
--size, -s : 파일 크기 표시
--format : 표시 포맷 지정
#예시
docker container ls -a -f name=test1 (필터링)
docker container ls -a -f exited=0 (필터링)
docker container ls -a --format "table {{.Names}}\t{{.Status}}\t{{.Mounts}}" (표로 보기 출력 형식 지정)
docker container ls -a --format "{{.Names}}: {{.Status}}" (출력 형식 지정)
실행중 컨테이너 중지
$ sudo docker container stop [컨테이너명]
#옵션
--time, -t : 컨테이너의 정지시간 지정 기본값은 10초
#예시
docker stop $(docker ps -a -q) (모든 컨테이너 중지 ) // docker ps -a -q를 변수화해서 docker stop 에 넣으라는 의미.
docker container stop -t 2 컨테이너명 (2초후에 컨테이너 정지)
중지된 컨테이너 실행
$ sudo docker container start [컨테이너명]
#옵션
--attach, -a : 표준 출력, 표준 오류 출력은 연다.
--interactive, -i : 컨테이너의 표준 입력을 연다.
컨테이너 삭제
$ sudo docker container rm [옵션] [컨테이너명]
#옵션
--force, -f : 실행중인 컨테이너 강제삭제
--volumes, -v : 할당한 볼륨 삭제
#예시
docker rm $(docker ps -a -q) (모든 컨테이너 삭제)
docker rm $(docker ps --filter 'status=exited' -a -q) (exit 상태의 모든 컨테이너 삭제)
docker container rm -f $(docker ps -aq) (구동중인 컨테이너까지 싹다 삭제, 위에 모든 컨테이너 삭제와 동일함)
컨테이너 강제 정지
$ sudo docker container kill [컨테이너명]
컨테이너 다시시작
$ sudo docker container restart [컨테이너명]
#옵션
--time, -t : 컨테이너의 재시작 시간을 지정. 기본값은 10초
#예시
docker container restart -t 2 컨테이너명 (2초후에 컨테이너 재시작)
정지중인 컨테이너 삭제
$ sudo docker container prune
컨테이너 중지/재개
#컨테이너 중지
$ sudo docker container pause [컨테이너명]
#컨테이너 재개
$sudo docker container unpause [컨테이너명]
컨테이너 이름 변경
$ sudo docker container rename [변경전 이름] [변경후 이름]
컨테이너와 호스트 사이의 파일 복사
#컨테이너 -> 호스트
$ sudo docker container cp 컨테이너이름:컨테이너안의파일경로 호스트파일경로
#호스트 -> 컨테이너
$ sudo docker container cp 호스트파일경로 컨테이너이름:컨테이너안의파일경로
#예시
docker container cp webserver:/etc/nginx/nginx.conf /tmp/nginx.conf (컨테이너에서 호스트로)
docker container cp ./test.txt webserver:/tmp/test.txt (호스트에서 컨테이너로)
'Tools' 카테고리의 다른 글
Trivy - Containers Vulnerability Scanner (0) | 2022.08.08 |
---|---|
Bxss - A Blind XSS Injector Tool (0) | 2022.08.08 |
Cirrusgo - A Fast Tool To Scan SAAS, PAAS App Written In Go (0) | 2022.08.08 |
BlackStone - Pentesting Reporting Tool (0) | 2022.08.08 |
Censys 사용법 (0) | 2022.08.07 |