※ container는 VM 프로세스 개념, image는 docker image file 개념.
■docker 이미지 다운로드
docker pull <이미지:버전>
docker pull <이미지:latest>
ex) docker pull aikidosecurity/local-scanner
ex) docker image pull debian:bookworm
ex) docker pull ubuntu:latest
■docker 컨테이너 생성
docker create <이미지>
■docker 실행
docker start my_container
docker start container1 container2 container3
docker start -a my_container
-a: 컨테이너를 시작함과 동시에 표준 출력(stdout) 및 표준 에러(stderr)를 현재 터미널 화면에 연결하여 프로세스 로그를 실시간으로 확인
-i: 대화형 모드로 시작
■docker pull + create + start
docker run <옵션> <이미지 식별자> <명령어> <인자>
ex) docker run -it --name myname01 <CONTAINER ID or Name> /bin/bash
실행 후 /bin/bash 실행 (대화형 모드)
ex) docker run -d python:3.8-alpine python -m http.server
python:3.8-alpine 이미지로 부터 python -m http.server 명령어를 백그라운드로 실행
-d: 백그라운드로 실행
ex) docker run -it python:3.8-alpine
-it: 대화형 모드로 실행 (-t는 TTY 모드(pseudo-TTY)로 가상터미널 할당)
※대화형 모드에서 빠져나올때
Ctrl+D 혹은 exit: 컨테이너 중지 후 빠져나옴
Ctrl+P + Ctrl+Q: 컨테이너를 실행상태로 빠져나옴
ex) docker run -d --name my-server python:3.8-alpine python -m http.server
--name: 컨테이너에 이름을 부여해주면 해당 이름으로 컨테이너를 식별할 수 있음.
ex) docker run -e FOO=bar python:3.8-alpine env
-e: 환경 변수 저장
ex) docker run -d -p 80:8000 python:3.8-alpine python -m http.server
docker run -d -p 1234:6379 redis
-p: [호스트IP]:[호스트포트]:[컨테이너포트] (호스트IP 0.0.0.0 가능)
ex) docker run -v `pwd`:/etc python:3.8-alpine cat /etc/test.txt
-v: 호스트 컴퓨터의 현재 디렉터리를 컨테이너의 /etc 경로로 마운트한 후, 그 안에 있는 test.txt 파일의 내용을 출력
ex) docker run -w /etc python:3.8-alpine pwd
-w: 컨테이너의 WORKDIR을 /etc로 변경
※WORKDIR: 컨테이너의 현재 작업 디렉토리, 디폴트는 /
ex) docker run --entrypoint python python:3.8-alpine --version
--entrypoint: Dockerfile의 ENTRYPOINT 설정을 덮어쓰기 위해서 사용
※Entrypoint: 도커 컨테이너가 실행할 때 고정적으로 실행되는 스크립트 혹은 명령어
ex) docker run --rm -it wernight/funbox nyancat
--rm: 컨테이너를 일회성으로 실행할 때 주로 사용. 컨테이너가 종료될 때 컨테이너와 관련된 리소스(파일 시스템, 볼륨)까지 깨끗이 제거
■docker container 확인
docker ps
docker ps -a (죽은 docker container까지 확인)
docker ps --format "table {{.Names}}\t{{.Ports}}"
docker name과 port만 출력
■docker 쉘로 진입
docker exec -i -t <CONTAINER ID or Name> /bin/bash
■docker image 확인
docker images
■docker image 삭제
docker rmi <REPOSITORY>:<TAG> -f
-f: force
■docker image 모두 삭제
docker rmi $(docker images -q) -f
■docker container 로그 열람
docker logs <CONTAINER ID or Name>
docker logs --since 44640m --details haproxy 2>&1 | grep -E "ERR|WARN"
haproxy 컨테이너에서 44640분(31일) 전부터 현재까지의 ERR or WARN이 포함된 로그를 출력한다.
■docker container Low-Level 정보
docker inspect <CONTAINER ID or Name>
docker inspect haproxy | grep "IPAddress"
컨테이너가 사용하는 IP 주소를 출력한다.
■docker container 재부팅
docker restart <CONTAINER ID or Name>
■docker container 중지
docker stop <CONTAINER ID or Name>
■docker container 모두 중지
docker stop $(docker ps -a -q)
■docker container 삭제
docker rm <CONTAINER ID or Name> -f
■docker container 모두 삭제
docker rm $(docker ps -a -q) -f
■docker image 백업/복원
docker ps -a
docker stop <CONTAINER ID>
docker commit -p <CONTAINER ID> <새로운 이미지 명>
ex) docker commit -p 20186168bd2b "aikidosecurity/local-scanner:latest"
docker save -o <출력 tar 파일명> <이미지 명>
ex) docker save -o local-scanner.tar "aikidosecurity/local-scanner:latest"
gzip -9 local-scanner.tar
docker load -i (tar 파일명)
ex) docker load -i local-scanner.tar.gz