[도커 명령어] 도커 image, container

su-mmer·2022년 9월 7일
0

아묻따 도커 공부

목록 보기
3/18

도커에서 관리하는 오브젝트

  • 컨테이너 (=프로세스)
    • docker container
    • 프로세스를 격리해주는 단위
    • 컨테이너를 먼저 제거하고 이미지를 제거해야 함
  • 이미지 (=프로그램 실행 파일)
    • docker image
    • 컨테이너를 실행하기 위해 필요한 파일
  • 네트워크
    • docekr network
    • 컨테이너에 대한 네트워크 연결 구성
  • 볼륨
    • docker volume
    • 컨테이너의 데이터를 영구 저장할 수 있는 객체

이미지를 만들고 컨테이너를 생성.
docker container create 명령시 이미지에 포함될 linux의 디렉토리와 파일들의 스냅샷을 취한다.


이미지

  • 컨테이너를 실행하기 위해 필요한 정형화된 데이터(파일)
  • 종류: 쉘 이미지/어플리케이션 이미지

명령어

  • docker search [op] <keyword>
    • 기본 검색 대상은 docker hub, 별도의 설정이나 로그인 필요 없음
  • docker image pull: 특정 이미지를 다운로드할 때 사용(기본적으로 docker hub에서)
    • 태그 생략 시 기본값으로 latest 태그 지정
  • docker image push: 이미지를 업로드할 때 사용
  • docker image ls/docker images: 현재 시스템의 이미지 목록 확인
    옵션설명
    -all, -a모든 이미지 표시
    --digests다이제스트를 표시할지 말지
    --no-trunc결과 모두 표시
    --quiet, -qDocker 이미지 ID만 표시
  • docker image inspect: 특정 이미지의 자세한 정보 확인
    • inspect 창에서 cmd 부분이 컨테이너 생성 시 실행할 동작
  • docker image rm: 특정 이미지를 삭제 (컨테이너가 존재하면 이미지 삭제가 제한적)
  • docker image prune: 이름이 없는 모든 이미지 삭제
  • docker image tag <docker hub 사용자명>/image_name:[tag]: 태그 붙이기

컨테이너

  • 컨테이너는 기본적으로 이미지에서 지정한 프로세스 실행
  • 사용법에 따라서는 다른 프로세스를 실행할 수 있다. (이미지 이름 뒤에 인자 값으로 명령어 전달)
  • 컨테이너 실행 시 백그라운드로 실행하면 추가 작업 가능(foreground는 컨테이너 내부로 접근)

명령어

  • docker container create: 컨테이너 생성. 이미지의 데이터만 복제하고 프로세스는 실행하지 않음
    • inspect 창에서 cmd 부분은 아직 실행되지 않은 상태
    • -it: 입출력이 필요한 컨테이너를 만들 때 필수(ex. shell)
    • --name: 컨테이너 이름 지정(미지정시 랜덤)
    • --rm: 컨테이너 내부의 프로세스가 종료되면 동시에 컨테이너 삭제
  • docker container start: 컨테이너를 실행
    • -a: 실행 시 컨테이너 내부로 진입(연결)
    • -i: 컨테이너 연결 시 입력 작업
    • 어플리케이션이 내부에서 동작 중인 컨테이너는 옵션을 사용하지 않는다.
  • docker container run: 이미지를 이용해서 컨테이너를 만들고 실행
    • create+start = run

    • -it: 입출력 옵션

    • -d: 어플리케이션은 거의 필수. 선택적 사용(ex. httpd)

    • --name: 이름 지정

    • run container_name 명령어 사용시 해당 컨테이너에서 명령어 실행

    • 컨테이너 내부에서 하나의 어플리케이션 동작

      옵션설명
      --attach, -aSTDIN, STDOUT, STDERR 연결
      -cidfile컨테이너 ID를 파일로 출력
      --interactive, -iSTDIN을 사용해야 할 경우
      --detach, -d컨테이너를 생성하고 백그라운드에서 실행
      --tty, -t접속해서 사용할 터미널 장치
      --rm실행하고 나서 종료할 때 바로 삭제함
      --restart=[noon-failure
  • docker container stop: 동작 중인 컨테이너 중지(내부 프로세스 중지)
  • docker container pause: 컨테이너 일시 정지
  • docker container unpause: 컨테이너 동작 재개
  • docker container restart: 컨테이너 재시작
  • docker container ps: 컨테이너 상태 확인
  • docker container ls: 동작 중인 컨테이너 목록 확인
    옵션설명
    --all, -a실행 중/정지 중인 것도 포함하여 모든 컨테이너 표시
    --filter, -f표시할 컨테이너 필터링
    --format표시 포맷 지정
    --last, -n마지막으로 실행된 n개의 컨테이너만 표시
    --latest, -l마지막으로 실행된 컨테이너만 표시
  • docker container rm: 중지 상태의 컨테이너 삭제
    • -f 옵션: 동작 중인 컨테이너 강제 삭제
  • docker container prune: 중지 상태인 모든 컨테이너 삭제
  • docker container exec <컨테이너> <명령어>: 컨테이너에 잠깐 사용할 추가적인 어플리케이션 실행(사용 후 반드시 종료)
  • docker container top: 컨테이너 내부의 프로세스 상태 확인
  • docker container attach <컨테이너>: 동작 중인 컨테이너에 연결 가능(단, 쉘이 실행중이어야 함)

컨테이너 리소스

  • 기본적인 컨테이너 생성 시 리소스 제한이 없음
  • 특정 컨테이너가 리소스를 독점할 수 있음
  • 컨테이너 생성 시 리소스의 제한 가능

명령어

  • 컨테이너 생성 시 할당
    • 특정 컨테이너가 리소스(cpu/memory)를 독점하지 않도록 한계치 혹은 비율 지정

      # docker container run --cpu-share / --cpus / --memory ...
  • 확인
    • 컨테이너 지정 시 특정 컨테이너

    • 지정하지 않을 경우 모든 컨테이너에 대해 리소스 할당량 및 사용량 확인

    • --no-stream 옵션 사용 시 한 번 확인(안쓰면 실시간 모니터링)

      # docker container stats [컨테이너]
  • 실행 중인 컨테이너의 리소스 조정
    • 메모리 할당 변경 시에는 swap 메모리와 함께 조정해야 할 수 있음

    • 최초 실행 시 메모리 제한이 없으면 swap 메모리 조정 후 물리메모리 조정 가능. 이 때, 컨테이너를 중지시킨 후 swap 메모리 조정 가능)

      # docker container update

컨테이너 환경 변수

  • 컨테이너 내부에서 사용할 환경 변수
  • 이미지에 설정된 환경 변수 확인
    # docker image inspect <image> --format "{{ .Config.Env }}"
  • 기본 설정: 사용하는 이미지에 따라
  • 추가 설정
    • docker run 명령어 사용 시 -e 옵션으로 지정 (특정 변수를 지정)
    • --env-file 옵션으로 파일에 정의된 다수의 변수 설정. 기존에 사용하는(예약된) 값을 지정해서 덮어쓰기도 가능
    • c4에 -e 옵션으로 변수를 추가해주고 기본인 c3와 비교했을때 VARS=123이 추가된 것을 볼 수 있음
    • vars.txt를 만들고 --env-file 옵션으로 이용해 vars.txt 파일을 c5의 환경 변수로 넘겨줌

컨테이너 작업 디렉토리

  • 컨테이너에 처음 접속할 때의 디렉토리를 지정할 수 있음
  • run 명령어에서 -w 옵션으로 지정
  • 지정하지 않을 경우 이미지에서 설정된 값을 사용(기본값은 /)

컨테이너 관리 실습

  1. 이미지 다운로드 httpd:latest, centos:7, ubuntu:latest
    # docker image pull httpd
    # docker image pull centos:7
    # docker image pull ubuntu
  1. 다운로드 한 이미지 확인
    docker image ls -a

  2. 이미지를 이용해서 컨테이너 실행

  • create 명령어와 start 명령어로 centos:7 이미지가 정상 동작 하도록 실행해보세요.(이름을 centos)
	# docker container create -it --name centos centos:7
	# docker container start -ai centos
	# start -ai 옵션으로 연결 시, ctrl+p+q를 입력해서 연결만 해제(상태 유지)

  • create 명령어와 start 명령어로 httpd:latest 이미지가 정상 동작 하도록 실행해보세요.(이름을 web1)
        # docker container create --name web1 httpd
        # docker container start web1
  • run 명령어로 ubuntu:latest 이미지가 정상 동작 하도록 실행해보세요. (이름을 ubuntu)
# docker container run -itd --name ubuntu ubuntu
  • run 명령어로 httpd:latest 이미지가 정상 동작하도록 실행해보세요. (이름을 web2)
        # docker container run -d --name web2 httpd
  1. 컨테이너 상태 확인
  • 동작 중인 컨테이너 상태 확인
	# docker container ls
  • 모든 컨테이너 상태 확인
# docker container ls -a
  • 특정 컨테이너 하나 자세한 정보 확인
# docker container inspect web1
  1. 컨테이너 동작 제어
    • ubuntu 컨테이너 중지
      # docker container stop ubuntu
    • web 컨테이너 강제 삭제
      # docker container rm -f web1
  2. 컨테이너에 다른 어플리케이션 실행
    • centos 이미지로 ls 명령어 실행
      # docker container run --name centos_ls centos:7 ls
    • httpd 이미지로 bash 실행
    - `docker image rm`: 특정 이미지를 삭제 (컨테이너가 존재하면 이미지 삭제가 제한적)

0개의 댓글