Microsoftware (5) Docker Introduction

Huisu·2023년 3월 21일
0

Microsoftware

목록 보기
1/2
post-thumbnail

Docker Introduction

Container Technologies

  • Container: 다양한 컴퓨팅 환경에 쉽게 배포할 수 있도록 코드, 라이브러리 구성 파일과 같은 애플리케이션 구성을 압축한 가볍고 실행 가능한 소프트웨어 단위
  • Docker 말고도 LXC 등 다양한 Container Technology 기술들이 존재
  • Docker는 window, MacOS, Linux 등 다양한 OS를 지원해 주기 때문에 각광받는 플랫폼 중 하나

Docker

  • 컨테이너 기반의 애플리케이션을 개발하고 배포하고 실행할 수 있는 오픈 소스 플랫폼
  • 개인 컴퓨터의 infrastructure과 격리시켜 앱을 실행하기 때문에 소프트웨어 실행 속도가 빠름
  • infrastructure as code 개발 환경 셋팅을 코드로 진행
  • DevOps를 지향하여 코드를 쓰고 배포하기까지 시간 단축

Run Docker

https://blog.kakaocdn.net/dn/cpHQsb/btqD2FXLMtq/kB8gkF36DSJAgC4RIX4GaK/img.png

https://velog.velcdn.com/images/titu/post/7bbc61ef-3a0a-49bb-91af-ec997fe09f4b/image.png

  • Immutable한 Infrasturucture인 운영 환경인 Dockerfile 생성
    • 이미지를 가져오고 실행하고 업데이트하는 등의 기능을 코드처럼 작성한 파일
    • Infrastructure as code
  • Dockerfile을 기계어로 번역해서 이를 실행하기 위한 라이브러리와 결합하고 실행 파일로 만드는 build 작업을 거침
  • Image: 앱을 실행하기 위한 모든 것들을 포함한 하나의 단위
    • code
    • runtime library
    • environment variables
    • configuration files
  • Container: 이미지를 실행하기 위해 담을 수 있는 구조로 이미지의 런타임 객체
    • 이미지를 실행하여 메모리를 차지하기 시작하면 컨테이너가 됨
    • 따라서 여러 개의 컨테이너가 하나의 이미지를 위해 존재할 수 있음
    • command line, docker desktop 에서 실행 중인 컨테이너 목록을 볼 수 있음

Why use Docker?

  • Immutable Infrastructure: 운영 환경은 dockerfile을 이용함으로 인해 코드로 같은 환경을 구축 가능
  • Flexible: 복잡한 앱조차도 containerized 될 수 있음
  • Lightweight: 기존의 Host kernal에 있는 것을 재활용하기 때문에 컨테이너에서 실행되는 것은 실제로 용량이 굉장히 작아 금방 설치됨
  • Interchangeable: 업데이트와 업그레이드가 용이

“Hello Doker”

Hello Docker

  • docker run hello-world hello-world라는 image 실행 명령어
  • Unable to find image 'hello-world:latest' locally 설치된 image 중 해당 image 없음
  • latest: Pulling from library/hello-world docker hub에서 hello-world 최신 image 가져옴
  • Status: Downloaded newer image for hello-world:latest image pulling 완료
  • docker desktop에서도 hello-world image가 설치됨을 확인할 수 있음

  • docker image ls docker에 설치된 모든 image list up

  • docker image rm -f hello-world:latest hello-world image의 최신 버전 삭제
    - rm 이미지 삭제
    - -f 컨테이너에서 실행 중이더라도 강제로 종료

  • 이미지도 삭제됨을 알 수 있음

Ubuntu

  • docker image ls 가지고 있는 image 모두 나열
  • docker container ls 실행 중인 container 모두 나열
  • docker pull ubuntu ubuntu image 다운로드
    • pull은 이미지를 다운로드하는 명령어
  • docker container run -it -d --rm --name ubuntuos ubuntu:latest
    • run은 image로 container를 생성하는 명령어
    • docker run <옵션> <이미지> <명령> <매개 변수> 구조
    • i, --interactive
      • 표준 입력(stdin)을 활성화하며, 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지
      • 보통 이 옵션을 사용하여 Bash 에 명령을 입력
    • t, --tty
      • TTY 모드(pseudo-TTY)를 사용
      • Bash를 사용하려면 이 옵션을 설정 필요
      • 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만, 셸이 표시되지 않음
    • -name
      • 컨테이너 이름을 설정
    • d, --detach
      • Detached 모드입니다.
      • 보통 데몬 모드라고 부르며, 컨테이너가 백그라운드로 실행
    • p, --publish
      • 호스트와 컨테이너의 포트를 연결 (포트포워딩)
      • <호스트 포트>:<컨테이너 포트>
        • p 80:80
    • -privileged
      • 컨테이너 안에서 호스트의 리눅스 커널 기능(Capability)을 모두 사용
      • 호스트의 주요 자원에 접근할 수 있음
    • -rm
      • 프로세스 종료 시 컨테이너 자동 제거
    • -restart
      • 컨테이너 종료 시, 재시작 정책을 설정
        • -restart="always"
    • v, --volume
      • 데이터 볼륨을 설정입니다.
      • 호스트와 컨테이너의 디렉토리를 연결하여, 파일을 컨테이너에 저장하지 않고 호스트에 바로 저장 (마운트)
    • u, --user
      • 컨테이너가 실행될 리눅스 사용자 계정 이름 또는 UID를 설정
        • -user root
    • e, --env
      • 컨테이너 내에서 사용할 환경 변수를 설정
      • 보통 설정 값이나 비밀번호를 전달할 때 사용
        • e GRANT_SUDO=yes
    • -link
      • 컨테이너끼리 연결
      • [컨테이너명 : 별칭]
        • -link="db:db"
    • h, --hostname
      • 컨테이너의 호스트 이름을 설정
    • w, --workdir
      • 컨테이너 안의 프로세스가 실행될 디렉터리를 설정
    • a, --attach
      • 컨테이너에 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr) 를 연결
    • c, --cpu-shares
      • CPU 자원 분배 설정
      • 기본 값은 1024이며, 각 값은 상대적으로 적용
    • m, --memory
      • 메모리 한계를 설정
      • <숫자><단위> 형식이며 단위는 b, k, m, g 를 사용할 수 있음
        • -memory=”100000b”
    • -security-opt
      • SELinux, AppArmor 옵션을 설정
        • -security-opt=”label:level:TopSecret”
  • docker exec -it ubuntuos /bin/bash
    • Docker 컨테이너는 시스템 관점에서 보면 하나의 프로세스지만, 일반적인 프로세스와는 차이가 있음
    • 각각의 컨테이너는 호스트 시스템과는 별개의 파일 시스템, 네트워크, 권한 등 다른 환경을 가지고 있음
    • exec는 특정한 컨테이너가 실행되는 환경에서 또 다른 프로세스를 실행할 수 있도록 해주는 명령어
    • 따라서 실행 중인 컨테이너에만 사용 가능함
    • docker exec <CONTAINER_ID>
  • docker container stop ubuntuos ubuntuos 라는 이름을 가진 컨테이너 종료
  • docker image rm -f ubuntu:latest ubuntu 이미지 삭제

Alpine Linux

python

Trouble shooting of Docker life

Docker Trouble Shooting Community

Docker Community Forums

https://github.com/docker/cli/issues

Newest 'docker' Questions

0개의 댓글