어쩌다 IT
article thumbnail
반응형

리뷰 (Review)

더보기

Docker Container 관련 명령어

  • container 일시 중지
    • docker container pause <container ID / 이름>
    • docker pause <container ID / 이름>

  • container 일시 중지 해제
    • docker container unpause <container ID / 이름>
    • docker unpause <container ID / 이름>

  • container 세부 정보 확인
    • docker container inspect <container ID / 이름>
  • container log 정보 출력
    • docker container logs <container ID / 이름>

 

Docker Image 생성 방법

  • docker commit 명령 이용
    • 현재 동작중인 container를 활용하여 image 생성
    • docker commit <현재 동작중인 container ID / 이름> <생성할 image 이름>
  • Dockerfile을 통해 직접 생성
    • FROM - 생성하려는 image의 base image 지정
    • RUN - 설정된 기본 이미지에 패키지 업데이트, 각종 패키지 설치, 명령 실행 등을 작성
    • CMD - 생성된 Docker image를 container로 생성하여 실행할 때 실행되는 명령 기술
    • ENTRYPOINT - 생성된 Docker image를 container로 실행할 때 실행되는 명령 기술
    • COPY - Host에 있는 파일을 Docker image에 복사하는 명령
    • EXPOSE - container가 host 네트워크를 통해 들어오는 트래픽을 listening하는 포트와 프로토콜 지정
    • WORKDIR - container 상에서 작업할 경로 전환을 위해 사용
    • docker build <Dockerfile 위치> -t [<사용자 ID>/] <docker image 이름>:<버전 번호>

Docker Image 생성

 

Dockerfile 명령어

  • MAINTAINER
    • Docker Image 빌드 작성자 이름과 이메일
  • LABEL
    • Docker Image 작성 목적으로 버전, 타이틀, 설명, 라이선스 정보 기술
    • 1개 이상 작성 가능

 

Docker Image 생성 실습 (2)

더보기

Apache Web Server 환경에서 구동되는 계산기 Web Application Image 생성

  • Apache Web Server를 base image로 하여 계산기 web application image 생성
  • image 생성을 위해 필요한 파일 저장 디렉토리 생성
    • mkdir calc-httpd
  • image 생성 시 필요한 파일을 생성한 디렉토리에 복사
    • index.html
    • clac.js
  • Dockerfile 작성
# base image - Apache Web Server
FROM httpd:2

# image 작성자 정보
MAINTAINER Jinoo.K <jinook@jinook.com>

# web application 파일 복사
COPY index.html /usr/local/apache2/htdocs
COPY clac.js /usr/local/apache2/htdocs
  • image 생성
docker build . -t calc-httpd:0.2
  • 생성된 image로 container를 생성하여 실행 확인
docker run -dit -p 80:80 --name calc-web2 calc-httpd:0.2
실행 확인

Docker Volume

 

Docker Volume

  • Docker는 Union File System 사용
    • 하나의 이미지로부터 여러 container를 만들 수 있는 방법 제공
    • image에 변경된 내용을 저장할 수 있도록 해준다.
  • 데이터베이스, 웹 프로그램 등 업무에 사용하는 Application에서 발생하는 데이터에 접근하고, 이것을 공유하기 위해 Docker Volume 사용
    • 제공하는 서비스의 로직(Logic, Algorithm, 일처리 순서)과 데이터는 반드시 분리
    • Application에서 발생한 여러 가지 데이터에 영향을 주지 않고 언제든 다른 container로 이전할 수 있다면 운영자는 데이터를 안전하게 관리하고 운영할 수 있다.
    • Docker Volume은 container에서 생성, 재사용할 수 있고 host 운영체제에서 직접 접근 가능
    • 보존되어야 하는 데이터를 유지(데이터 영속성과 지속성) 하기 위한 메커니즘 제공
    • container 내부 데이터는 container의 lifecycle과 연관되어 container 종료 시 삭제
    • Docker Volume을 사용하면 container가 삭제되어도 Volume은 독립적으로 운영되기 때문에 삭제되지 않는 특징

 

Docker Volume 종류

  • volume
    • Docker에서 권장하는 방법
    • docker volume create <volume 이름> 명령을 통해 생성
    • Docker Volume은 docker 명령으로 관리
    • 여러 container 간에 안전하게 공유
    • volume 드라이버를 통해 원격 호스트 및 클라우드 환경에 volume 내용을 저장하고 암호화할 수 있다.
    • 새 volume으로 지정될 영역에 데이터를 미리 채우고 container와 연결하면 container 내에서 바로 데이터 사용 가능
  • volume 생성 실습
더보기
  • volume 생성
docker volume create my-share1

 

  • volume 목록 확인
docker volume ls

 

  • 생성된 volume 상세 정보 확인
docker volume inspect my-share1

 

  • volume 저장 위치 내용 확인
sudo ls -lF /var/lib/docker/volumes

 

  • 생성된 volume에 원하는 파일 복사 
sudo cp index.html /var/lib/docker/volumes/my-share1/_data

 

  • 생성된 volume을 container 생성 시 --mount 옵션 사용하여 연결
docker run -dit --name server1 --mount source=my-share1,target=/mnt ubuntu:14.04

 

  • 생성된 volume을 container 생성 시 -v 옵션 사용하여 연결
docker run -dit --name server2 -v my-share1:/mnt ubuntu:14.04

 

  • my-share1 volume 삭제 (container에 mount 된 상태에서는 삭제 불가능)
docker volume rm my-share1

 

  • bind mount
    • volume에 비해 사용이 제한적
    • host 파일 시스템 절대 경로:container 내부 경로  직접 mount 하여 사용
    • 사용자가 파일 또는 디렉토리를 생성하면 해당 host 파일 시스템의 소유자 권한으로 연결되고,
      존재하지 않는 경우 자동 생성, 자동 생성 디렉토리는 root 소유
    • container 생성 시 지정하여 사용하고, container 제거 시 bind mount는 해제되지만 host 디렉토리는 유지
  • bind mount 생성 실습
더보기
  • bind mount에 사용할 디렉토리 생성 및 필요한 파일 복사, 이동
  • 별도의 mount volume 생성 없이 지정된 디렉토리 mount
  • bind mount, --mount 옵션으로 지정된 디렉토리 mount
docker run -dit --name server1 \
--mount type=bind,source="$(pwd)",target=/mnt \
ubuntu:14.04

 

  • bind mount, -v 옵션으로 지정된 디렉토리 mount
docker run --name server2 -v "$(pwd)":/mnt ubuntu:14.04

 

  • bind mount 확인
docker container inspect server2 -f "{{.HostConfig.Binds}}"

 

  • tmpfs mount
    • tmpfs mount 방법은 임시적이며 host 메모리에서만 지속되므로 container가 중지되면 tmpfs mount가 제거되고
      내부에 기록된 내용은 삭제된다.
    • host 또는 container 쓰기 가능 계층에서 지속하지 않지만 중요한 파일을 임시로 사용하는 방법에 유용
    • container 실행 시 지정하여 사용하고, container 제거 시 자동 해제

Docker Network

 

Docker Network

  • docker container 및 서비스는 Docker Network를 통해 격리된 container 간의 network 연결뿐만 아니라
    Docker 외의 다른 Application 워크로드와도 연결 가능
  • Docker Network의 하위 시스템 연결을 위해 Docker Network Driver를 사용하여 상호 간 통신 가능
  • Docker Network 정의
    • Docker 설치 시 기본적으로 제공되는 docker0는 소프트웨어적으로 구현된
      가상 이더넷 브리지 (virtual sthernet bridge) 네트워크이고, 이를 통해 격리된 container들의 상호간 통신 제공
  • 별도 브리지 네트워크를 생성하여 연결값으로 설정하지 않는 한,
    실행되는 모든 container는 docker0 브리지에 연결하여 172.17.0.0/16 CIDR 범위로 IP 주소 할당
    • /16 - 65,536개 IP 주소 범위


TIF

분명히 과정 시작할 때 보았던 초보를 위한 도커 안내서 - 도커란 무엇인가? 

온통 이해 할 수 없는 단어들과 이야기 뿐이었다.

 

Docker도 어느 정도 배웠겠다 다시 한번 들어가봤는데, 전에 내가 막혔던 부분이 

CentOS, Ubuntu, AWS, Azure, Chef, ... 이런 것들이 나열되어 있는 부분에서 다음에 봐야겠다고 닫은 것 같다.

그땐 전혀 몰랐던 생소한 것들이었으니까.

 

지금 다시 보니 눈에 확 들어오지는 않아도 어느 정도 이해는 할 수 있겠다.

시리즈 전체 부분에 대해서도 어느 정도 수업 시간에 다뤘던 것들이다.

복습하고, 복습하고, 또 복습하고, 내 것으로 만들어야 한다.

 

 

2022. 10. 04 에 작성된 글입니다.

반응형
profile

어쩌다 IT

@jwlish

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!