Docker Dashboard는 기본적으로 GUI이기 때문에 개념만 알면 문제 없이 사용할 수 있지만 이번 시간에는 명령어를 익혀 사용해보도록 하겠습니다.
명령어 설명 | 명령어 | 추가 설명 |
---|---|---|
이미지로 컨테이너 실행 | docker run [이미지 이름] | |
내 도커에 pull 되어있는 이미지 목록 | docker images | |
실행 중인 컨테이너 목록 | docker ps | |
실행 중 + 중단된 컨테이너 목록 | docker ps -a | |
- Container ID : 각 컨테이너의 고유 ID | ||
컨테이너 이름을 직접 명시하여 실행 | docker run --name [컨테이너 이름] [이미지 이름] | --name : 컨테이너 이름 → 고유값 |
컨테이너 식별 고유값으로 삭제 | docker rm [컨테이너 이름/ID] | 컨테이너 식별 고유값 : 이름/아이디 로 삭제 |
이미지 이름으로 컨테이너 이름 지정해서 실행 + 컨테이너 종료 시 자동 삭제 | docker run --name=[컨테이너 이름] --rm [이미지 이름] | [이미지이름]의 이미지를, [컨테이너 이름]으로 컨테이너 실행 |
--rm 과 함께 입력하면 컨테이너 종료 시 자동 삭제 | ||
컨테이너의 3000번 포트를 호스트 환경에 7777이라는 포트에 퍼블리싱 해서 port mapping | docker run -p [host port]:[container port] --name=[컨테이너 이름] --rm [이미지 이름] | -p [host port]:[container port] : 컨테이너의 3000번 포트를 호스트 환경에 7777이라는 포트에 퍼블리싱 해서 port mapping |
백그라운드에서 컨테이너 실행 | docker run -p 3000:3000 --name=[컨테이너 이름] --rm -d [이미지 이름] | -d : detach - 백그라운드에서 실행 |
보통 DB를 -d 옵션으로 많이 실행 | ||
포그라운드로 컨테이너 실행 | docker attach [컨테이너 key] | attach : 백그라운드에서 실행시키던 컨테이너를 다시 포그라운드에서 사용 |
백그라운드로 실행되는 컨테이너의 로그 확인 | docker logs [컨테이너 key] | logs |
docker volume 생성 | docker volume create [volume 이름] | create |
docker volume 목록 조회 | docker volume ls | ls |
docker volume 상세 조회 | docker volume inspect [volume 이름] | inspect : 상세 조회 옵션 |
docker volume 삭제 | docker volume rm [volume 이름] | rm |
bind mount / docker volume | -v [volume 이름]:/[mount할 컨테이너 경로] | bind mount, docker volume 모두 -v 옵션 사용 |
-v [host 디렉토리 경로]:/var/lib/postgresql/data | ||
실행중인 컨테이너 상세 조회 | docker container inspect [컨테이너 key] | Docker Desktop GUI 환경에서 확인 가능 |
실행중인 container에 명령어로 실행 | 1. docker exec -it [실행중인 컨테이너 이름] [명령어] | docker exec : 실행중인 컨테이너에 원하는 명령어를 실행 |
2. docker exec -it [실행중인 컨테이너] sh | -it : i + t → 터미널 기반의 interactive 환경 → 실행되고 있는 컨테이너를 방해하지 않고 컨테이너 내부에 들어가서 명령어 실행 | |
2번을 보통 주로 사용 → shell | ||
이미지 삭제 | docker rmi [이미지 이름] |
container ID
: 각 컨테이너 고유 IDNames
: 각 컨테이너 고유 ID를 외우기 힘드므로 네임을 붙여줄 수 있음docker run [도커 이미지 이름]
docker images
hello-world
이미지는 기본적으로 바로 종료되게끔 설정docker rm [컨테이너 이름/ID]`
→ 기존에 겹치는 이름이 있다면 삭제
docker run --name=crash-frontend --rm devjayce/crash:base
localhost:3000
에 접속해도 뜨지 않습니다. → 도커 컨테이너가 기본적으로 완전히 독립적인 환경으로 구성 및 동작 → 도커 환경 외부에서 직접적으로 접근해서 호출하는 것이 불가능 (도커 네트워크)docker run -p 7777:3000 --name=crash-frontend --rm devjayce/crash:base
→ 컨테이너의 3000번 포트를 호스트 환경에 7777이라는 포트에 publishing 해서 port를 mapping 합니다.ctrl + c
: 컨테이너 종료7777
포트로 접속 → localhost:7777
3000번 포트를 이미 쓰고 있는 것이 아니라면 아래와 같이-p 3000:3000
과 같이 같은 포트로 매핑합니다.
💡 컨테이너는 호스트 환경과 완전히 분리된 독립적인 환경
postgres
라는 공식적으로 제공하는 도커 이미지를 사용해 DB를 편하게 설치해서 이용해보도록 합시다.
컨테이너 기반으로 실행한 PostgreSQL DB에 local환경에서(Docker 외부) 컨테이너 환경에 내부 접속할 수 있도록 -p 옵션의 포트 매핑을 통해 호스트의 5432 포트를 컨테이너의 5432 포트로 연결해서 사용합니다.
컨테이너는 호스트 환경과 완전히 분리된 독립적인 환경이므로 설치한 2개의 컨테이너는 완전히 다른 환경이므로 중복된 5432
라는 포트를 사용하고 있지만 서로 다른 컴퓨터입니다.
그러나 우리 local에서 5432포트는 한개이기 때문에, 두개의 postgresql 컨테이너에 모두 접속하려면, 다른 포트로 사용해야 합니다.
→ 이럴 때 그냥 docker run이 아닌 -d
옵션(detach)을 붙여서 실행하여 컨테이너를 백그라운드에서 실행시킬 수 있습니다.
docker logs [컨테이너 ID / Name]
docker attach [컨테이너 key]
: -d
속성으로 실행시킨 백그라운드 컨테이너를 다시 원래 그냥 백그라운드가 아닌 포그라운드에서 실행된 것처럼 사용할 수 있습니다. Ctrl + C
컨테이너 환경은 호스트 환경과 독립적인 환경이기 때문에 컨테이너가 제거되면 컨테이너 내부 데이터는 사라집니다.
컨테이너 내부의 데이터를 유지 또는 다른 컨테이너와 공유하고 싶을 경우, bind mount 또는 Docker Volume을 사용합니다.
\
백슬래쉬로 여러 줄로 구분해서 작성한 것입니다.-v
: 해당 옵션으로 호스트 바탕화면(Desktop)의 /postgres/borad-data
디렉토리에 컨테이너 내부의 디렉토리에 bind mount를 해서 이용합니다.-e
: 환경 변수 설정 옵션 → postgres 이미지가 내부적으로 DB 설정을 하는 과정에서 참고하는 환경변수입니다.사용하기는 편하지만 실제 production 환경에서 사용하기에는 무리가 있습니다.
docker run --name board-postgres \
-e POSTGRES_INITDB_ARGS="--data-checksums -E utf8 --no-locale" \
-e POSTGRES_USER=board-master \
-e POSTGRES_PASSWORD=board-postgres-password \
-e POSTGRES_DB=board-db \
-e TZ=Asia/Seoul \
-v $HOME/Desktop/postgres/board-data:/var/lib/postgresql/data \
-p 5432:5432 \
-d postgres
Docker Volume은 도커가 관리하는 전용 Storage입니다.
docker volume create board-postgres-volume
docker volume ls
docker volume inspect [volume 이름]
docker volume rm [volume 이름]
docker run --name board-postgres \
-e POSTGRES_INITDB_ARGS="--data-checksums -E utf8 --no-locale" \
-e POSTGRES_USER=board-master \
-e POSTGRES_PASSWORD=board-postgres-password \
-e POSTGRES_DB=board-db \
-e TZ=Asia/Seoul \
-v board-postgres-volume:/var/lib/postgresql/data \
-p 5432:5432 \
-d postgres
docker run -d --name redis-stack \
-p 6379:6379 -p 8001:8001 \
redis/redis-stack:latest
redis-stack
: redis 확장 패키지docker exec -it redis-stack redis-cli
docker exec -it [실행중인 컨테이너 이름] [해당 컨테이너에서 실행하고자 하는 명령어]
docker exec -it [실행중인 컨테이너] sh