[Docker] 명령어 정리

Ogu·2024년 8월 24일
0

Docker

목록 보기
1/3
post-thumbnail

Docker Dashboard는 기본적으로 GUI이기 때문에 개념만 알면 문제 없이 사용할 수 있지만 이번 시간에는 명령어를 익혀 사용해보도록 하겠습니다.

Docker 명령어 정리

Docker 명령어

명령어 설명명령어추가 설명
이미지로 컨테이너 실행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 mappingdocker 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 lsls
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 [이미지 이름]

Docker Container

GUI 에서 Docker Containers

  • 현재 실행되고있는 컨테이너들
  • 혹은 예전에 실행되었다가 삭제되지 않고 중단된 컨테이너 목록

  • container ID : 각 컨테이너 고유 ID
  • Names : 각 컨테이너 고유 ID를 외우기 힘드므로 네임을 붙여줄 수 있음
    → 랜덤 생성 (명시적으로 이름 생성도 가능)
    → 자동으로 생성된 컨테이너는 랜덤 네임 생성
    → 컨테이너이름도 마찬가지로 ID와 같이 unique 하게 설정

명령어로 Docker 실습하기

docker 실행

docker run [도커 이미지 이름]
  • Docker 이미지 이름으로 컨테이너 실행
  • 해당 이미지가 있으면 그걸로 컨테이너 실행, 없으면 Docker Hub으로부터 다운받아 실행

docker images 조회

docker images
  • 내 도커에 pull 되어있는 이미지들 목록

  • hello-world 이미지는 기본적으로 바로 종료되게끔 설정

컨테이너 삭제

docker rm [컨테이너 이름/ID]` 

→ 기존에 겹치는 이름이 있다면 삭제

이미지 이름으로 컨테이너 이름 지정해서 실행

docker run --name=crash-frontend --rm devjayce/crash:base
  • 다음과 같이 프론트엔드 프로젝트를 실행시키고, localhost:3000 에 접속해도 뜨지 않습니다. → 도커 컨테이너가 기본적으로 완전히 독립적인 환경으로 구성 및 동작 → 도커 환경 외부에서 직접적으로 접근해서 호출하는 것이 불가능 (도커 네트워크)
  • 외부에서도 도커 컨테이너 port와 접근할 수 있게 하기 위해서는 다음 명령어를 입력합니다.
    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 과 같이 같은 포트로 매핑합니다.

💡 컨테이너는 호스트 환경과 완전히 분리된 독립적인 환경

PostgreSQL 을 2개 이상 실행하기

postgres 라는 공식적으로 제공하는 도커 이미지를 사용해 DB를 편하게 설치해서 이용해보도록 합시다.

컨테이너 기반으로 실행한 PostgreSQL DB에 local환경에서(Docker 외부) 컨테이너 환경에 내부 접속할 수 있도록 -p 옵션의 포트 매핑을 통해 호스트의 5432 포트를 컨테이너의 5432 포트로 연결해서 사용합니다.

컨테이너는 호스트 환경과 완전히 분리된 독립적인 환경이므로 설치한 2개의 컨테이너는 완전히 다른 환경이므로 중복된 5432 라는 포트를 사용하고 있지만 서로 다른 컴퓨터입니다.

그러나 우리 local에서 5432포트는 한개이기 때문에, 두개의 postgresql 컨테이너에 모두 접속하려면, 다른 포트로 사용해야 합니다.

서버형 어플리케이션 백그라운드 실행

  • 서버형 어플리케이션은 들어오는 요청을 계속 listen 중
  • ctrl + c 로 직접 종료 시그널을 주어 종료하지 않는 한 추가적인 작업을 할 수 없음
  • 서버가 동작하고 있는 환경에서 다른 작업을 하기 위해서는 새로운 터미널을 위해서 작업해야 함

→ 이럴 때 그냥 docker run이 아닌 -d 옵션(detach)을 붙여서 실행하여 컨테이너를 백그라운드에서 실행시킬 수 있습니다.

백그라운드 어플리케이션 로그 확인

  • docker logs [컨테이너 ID / Name]

  • docker attach [컨테이너 key] : -d 속성으로 실행시킨 백그라운드 컨테이너를 다시 원래 그냥 백그라운드가 아닌 포그라운드에서 실행된 것처럼 사용할 수 있습니다.

백그라운드 → 포그라운드로 변경, 컨테이너 종료

  • 포그라운드로 attach
  • 포그라운드 상태에서 Ctrl + C

Bind mount, Docker Volume

컨테이너 환경은 호스트 환경과 독립적인 환경이기 때문에 컨테이너가 제거되면 컨테이너 내부 데이터는 사라집니다.
컨테이너 내부의 데이터를 유지 또는 다른 컨테이너와 공유하고 싶을 경우, bind mount 또는 Docker Volume을 사용합니다.

bind mounts

  • 위의 명령어는 하나지만 \ 백슬래쉬로 여러 줄로 구분해서 작성한 것입니다.
  • -v : 해당 옵션으로 호스트 바탕화면(Desktop)의 /postgres/borad-data 디렉토리에 컨테이너 내부의 디렉토리에 bind mount를 해서 이용합니다.
    → 서비스를 이용하면서 발생한 데이터를 컨테이너 내부가 아닌 외부(local 환경)에 관리
  • -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

Docker Volume은 도커가 관리하는 전용 Storage입니다.

  • Volume 의 경로가 어디인지 알 필요가 없습니다. Volume의 이름만 알면 됩니다.
  • 백업, 마이그레이션도 용이해서 prod 환경에서는 volume 을 사용합니다.
  • Docker Volume 생성 : docker volume create board-postgres-volume
  • Docker Volume 목록 조회 : docker volume ls

  • volume 상세 조회 : docker volume inspect [volume 이름]

  • volume 삭제 : docker volume rm [volume 이름]

postgres DB Docker 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

Postgres 컨테이너 TablePlus로 접속하기

Redis 이미지로 설치하기

docker run -d --name redis-stack \
	-p 6379:6379 -p 8001:8001 \
	redis/redis-stack:latest
  • redis-stack : redis 확장 패키지

Redis CLI로 명령어 실습

1. cli 환경으로 명령어 실행

docker exec -it redis-stack redis-cli
docker exec -it [실행중인 컨테이너 이름] [해당 컨테이너에서 실행하고자 하는 명령어]

2. shell 환경으로 접속 및 명령어 실행

docker exec -it [실행중인 컨테이너] sh

3. Docker Desktop - GUI에서 Exec 하기

profile
Hello! I am Ogu, a developer who loves learning and sharing! 🐤🐤 <br> こんにちは!学ぶことと共有することが好きな開発者のOguです!🐤

0개의 댓글