Docker(1)

박찬영·2024년 7월 10일

Docker

목록 보기
1/6
post-thumbnail

1.Docker (도커)

  • 도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
  • 도커는 어떤 프로그램을 외부 환경과 격리시켜 구동할 수 있게 해주는 소프트웨어이다.

2. Container (컨테이너)

  • 컨테이너란 OS 상에 논리적인 영역(컨테이너)을 구축하고, 애플리케이션이 작동하는데 필요한 요소들을 모아 별도의 서버처럼 동작하는 것이다.
  • 필요한 요소만으로 구성되어 있어 오버헤드가 적다.

Container 구조

  • 컨테이너 레이어
    • 읽기/쓰기 모두 가능한 계층으로 최상단 레이어에 추가된다.
    • 컨테이너를 실행하고 진행되는 변경사항은 이 계층에 저장된다.
  • 이미지 레이어
    • 읽기 전용 계층으로 다른 컨테이너와 공유할 수 있는 레이어이다.

  • 컨테이너 레이어는 각기 다른 컨테이너가 공유하지 않는 계층이기 때문에 위의 그림과 같이 이미지 레이어를 공유하고 각각 컨테이너 레이어를 공유하는 것을 볼 수 있다.

3. Docker 명령어 구조


  • 도커의 모든 명령은 'docker'로 시작하며 어떤 대상에게 명령어를 실행할 것인지로 구분하면 보고 쉽다.
    • docker --help
    • docker container --help

Container 관련 커맨드

'docker container' 이후에 작성하는 주요 커맨드는 아래와 같다.

  • docker container start [컨테이너] : 중지된 컨테이너를 다시 실행
    • docker container start -a [컨테이너] : 컨테이너 표준 입력/출력/오류를 연결한다. 컨테이너의 로그를 실시간으로 볼 수 있다.
    • docker container start -i [컨테이너] : 컨테이너의 표준 입력을 연결한다. 이는 터미널에서 사용자 입력을 받을 수 있다.
  • docker container stop [컨테이너] : 실행 중인 컨테이너를 중지
    • docker container stop [컨테이너1][컨테이너2] : 여러 컨테이너 중지
  • docker container create [이미지] : 새로운 컨테이너를 생성하지만 즉시 실행X
    • docker container create --name [컨테이너][이미지] : 컨테이너 이름을 지정
    • docker container create -p [포트번호:포트번호][이미지] : 호스트와 컨테이너의 포트를 연결
      • ex) 8080:80 -> 호스트의 포트 8080을 컨테이너의 포트 80에 연결한 상태
    • docker container create -v [디렉토리:디렉토리][이미지] : 호스트와 컨테이너 간의 디렉토리를 연결
      • ex) /host/data:/container/data ubuntu -> 호스트의 '/host/data' 디렉토리를 컨테이너의 '/container/data' 디렉토리와 연결하여 ubuntu 이미지를 사용해 새로운 컨테이너 생성
    • docker container create -e ["환경변수"][이미지] : 환경 변수 설정
  • docker container run [이미지] : 새로운 컨테이너를 생성하고, 이를 실행 / 이미지에서 컨테이너를 생성하고, 해당 컨테이너를 실행하는 단계를 하나의 명령어로 결합
    • docker container run --name [컨테이너][이미지] : 컨테이너의 이름을 지정
    • docker container run -p [포트번호:포트번호][이미지] : 호스트와 컨테이너의 포트를 연결
    • docker container run -d [이미지] : 컨테이너를 백그라운드에서 실행
    • docker container run -e ["환경변수"][이미지] : 환경 변수 설정
    • docker container run -v [디렉토리:디렉토리][이미지] : 호스트와 컨테이너 간의 디렉토리 연결
  • docker container rm [컨테이너] : 컨테이너를 삭제하는데 사용, 'docker container stop' 명령어를 사용하여 컨테이너를 중지 후 사용해야한다.
    • docker container rm [컨테이너1][컨테이너2] : 여러 중지된 컨테이너를 한 번에 삭제
    • docker container rm -f [컨테이너] : 실행 중인 컨테이너를 강제 삭제
    • docker container rm -v [컨테이너] : 컨테이너와 연결된 볼륨도 함께 삭제
    • docker container rm $(docker container ls -a -q) : 모든 중지된 컨테이너 삭제
      • ls -a -q
        • -a : 모든 컨테이너(중지된 컨테이너 포함)를 출력
        • -q : 컨테이너 ID만 출력
  • docker container exec [컨테이너][추가 커맨드] : 실행 중인 컨테이너 내에서 명령을 실행하는데 사용
    • docker container exec my_container ls /app : 'my container'라는 이름의 실행 중인 컨테이너 내에서 '/app' 디렉토리의 내용을 나열
    • docker container exec -it my_container /bin/bash : 'my_container'라는 이름의 실행 중인 컨테이너 내에서 '/bin/bash'셀을 대화형 모드로 실행한다. 이를 통해 컨테이너 내부에서 직접 명령을 입력할 수 있다.
      • -i : 컨테이너의 표준 입력을 유지한다. 이를 통해 사용자 입력을 받을 수 있다. 인터랙티브 모드로 설정하여 터미널에서 입력을 받을 수 있다.
      • -t : 가상 터미널을 활성화한다. 이를 통해 터미널에서 사용되는 기능들을 사용할 수 있다.
      • it : '-i'와 '-t' 옵션을 결합된 형태, 컨테이너 내부에서 쉘을 사용하여 명령을 입력하고 그 결과를 실시간으로 볼 수 있다.
  • docker container ls : 현재 실행 중인 컨테이너 목록을 출력
    • docker container ls -a : 모든 컨테이너(중지된 컨테이너 포함) 표시한다.
    • docker container ls -q : 컨테이너 ID만 표시한다.
    • docker container ls -s : 각 컨테이너의 파일 크기 정보를 표시한다.
  • docker container cp [컨테이너:컨테이너_디렉토리][호스트_디렉토리] : 컨테이너와 호스트 시스템 간에 파일이나 디렉토리를 복사하는데 사용
    • docker container cp /path/on/host/file.txt my_container:/path/in/container/file.txt : 호스트에서 컨테이너로 파일 복사
    • docker container cp my_container:/path/in/container/directory /path/on/host : 컨테이너에서 호스트 디렉토리 복사
  • docker container commit [컨테이너][이미지] : 실행 중이거나 중지된 컨테이너의 현재 상태를 이미지로 저장하는데 사용, 컨테이너에서 변경된 사항을 포함하는 새로운 이미지를 생성할 수 있게 해준다.
    • docker container commit my_container my_image:latest : 'my_container'라는 컨테이너의 현재 상태를 'my_image:latest'라는 이름의 이미지로 커밋한다.
    • docker container commit -a "ayaan" -m "Added new feature" my_container my_image:latest : 작성자와 메세지를 추가한다.
    • docker container commit -p=false my_container my_image:latest : 'my_container' 컨테이너를 일시 중지하지 않고 'my_image:latest'라는 이름의 이미지로 커밋한다.
      • -p : 기본값은 true, 일시 중지한다.
profile
블로그 이전했습니다 -> https://young-code.tistory.com

0개의 댓글