[23.01.26] 65일차[리눅스]

W·2023년 1월 26일
0

국비

목록 보기
96/119

도커 엔진

  • 컨테이너를 다루는 Docker 서비스 프로그램
  • 기본적으로 Linux 환경으로 구동을 한다.
  • inux가 아닌 환경인 경우 각각 가상화 기술을 활용하여 Linux를 구현하여 사용하게 된다.
  • 따라서 Linux가 아닌 환경인 경우 Linux에 비해서 좀 더 많은 자원을 사용하게 된다.
  • MAC, WINDOWS의 경우 Docker Desktop 프로그램으로 간편하게 구현이 가능하다.

Ubuntu에서 Docker Desktop 설치

  • 해당 스크립트 파일의 x(실행)권한이 없으므로 권한 수준을 변경한다.
    itwillbs@dockerhost:~$ ll

total 112
drwxr-x--- 14 itwillbs itwillbs 4096 Jan 26 05:30 ./
drwxr-xr-x 3 root root 4096 Jan 12 06:08 ../
-rw------- 1 itwillbs itwillbs 118 Jan 12 08:38 .bash_history
-rw-r--r-- 1 itwillbs itwillbs 220 Jan 6 2022 .bash_logout
-rw-r--r-- 1 itwillbs itwillbs 3771 Jan 6 2022 .bashrc
drwx------ 10 itwillbs itwillbs 4096 Jan 26 05:26 .cache/
drwx------ 11 itwillbs itwillbs 4096 Jan 12 08:13 .config/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Desktop/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Documents/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Downloads/
-rw-rw-r-- 1 itwillbs itwillbs 19859 Jan 26 05:30 get-docker.sh

itwillbs@dockerhost:~$ sudo chmod +x get-docker.sh

[sudo] password for itwillbs: 1234
itwillbs@dockerhost:~$ ll

total 112
drwxr-x--- 14 itwillbs itwillbs 4096 Jan 26 05:30 ./
drwxr-xr-x 3 root root 4096 Jan 12 06:08 ../
-rw------- 1 itwillbs itwillbs 118 Jan 12 08:38 .bash_history
-rw-r--r-- 1 itwillbs itwillbs 220 Jan 6 2022 .bash_logout
-rw-r--r-- 1 itwillbs itwillbs 3771 Jan 6 2022 .bashrc
drwx------ 10 itwillbs itwillbs 4096 Jan 26 05:26 .cache/
drwx------ 11 itwillbs itwillbs 4096 Jan 12 08:13 .config/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Desktop/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Documents/
drwxr-xr-x 2 itwillbs itwillbs 4096 Jan 12 07:38 Downloads/
-rwxrwxr-x 1 itwillbs itwillbs 19859 Jan 26 05:30 get-docker.sh*

  • 설치 스크립트 실행

  • 해당 스크립트 파일은 운영체제에 맞는 설치 과정을 자동으로 수행해주는 스크립트이다.
    itwillbs@dockerhost:~$ sudo sh get-docker.sh

  • Docker는 기본적으로 root 권한을 사용하여 컨테이너를 관리하는 방식이다.

  • rootless 모드로도 일부 작은 가능하지만 제한이 있기 때문에 Docker의 모든 작업을 위해서는 root의 권한을 사용할 수 있어야 한다.

  • 실습에 사용하는 itwillbs 계정은 root의 권한을 일시적으로 빌려올 수 있는 sudo 계정으로 docker 관련 명령어 입력 시 sudo 키워드를 붙여서 입력하면 권한 관련 문제를 해결 할 수 있다.

Docker 버전 조회

  • Docker는 클라이언트 서버의 구조로 동작하며 서버는 컨테이너를 직접 구동 운영하고, 클라이언트는 원격으로 서버의 컨테이너를 관리하는 작업을 수행 할 수 있다.
    itwillbs@dockerhost:~$ sudo docker version

[sudo] password for itwillbs: 1234
Client: Docker Engine - Community
Version: 20.10.23
API version: 1.41
Go version: go1.18.10
Git commit: 7155243
Built: Thu Jan 19 17:45:08 2023
OS/Arch: linux/amd64
Context: default
Experimental: true

Server: Docker Engine - Community
Engine:
Version: 20.10.23
API version: 1.41 (minimum version 1.12)
Go version: go1.18.10
Git commit: 6051f14
Built: Thu Jan 19 17:42:57 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.15
GitCommit: 5b842e528e99d4d4c1686467debf2bd4b88ecd86
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0

  • 접속 중인 계정 docker, sudo 그룹에 추가하기

  • $(whoami) 는 쉘 명령어로 현재 접속 중인 계정명을 출력해준다.
    itwillbs@dockerhost:~$ sudo usermod -a -G docker $(whoami)
    itwillbs@dockerhost:~$ sudo usermod -a -G sudo $(whoami)

  • 가상머신 재시작으로 설정값 적용 또는 로그아웃 후 재접속
    itwillbs@dockerhost:~$ sudo reboot

간단한 실습

  • 기존 다운로드 된 이미지 파일 없음
    itwillbs@dockerhost:~$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

  • pull 명령어로 온라인에 있는 busybox 프로그램 이미지 파일을 받아온다.
    itwillbs@dockerhost:~$ docker pull busybox

Using default tag: latest
latest: Pulling from library/busybox
205dae5015e7: Pull complete
Digest: sha256:7b3ccabffc97de872a30dfd234fd972a66d247c8cfc69b0550f276481852627c
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

  • 다운로드 된 busybox 이미지 확인
    itwillbs@dockerhost:~$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 66ba00ad3de8 3 weeks ago 4.87MB

  • docker run 명령어로 이미지를 활용한 컨테이너 생성 후 echo 'Hello World' 명령어 전달
  • docker 컨테이너가 실행한 결과를 사용자 터미널에서 출력
    itwillbs@dockerhost:~$ docker run busybox echo 'Hello World'

Hello World

컨테이너 방식의 사용 이유?

  • 서비스 개발 시 개발, 테스트, 배포, 운영에서 사용 환경의 차이로 시행착오나 오류로 인한 문제의 해결에 많은 자원을 소비한다.
  • 컨테이너 방식의 경우 서비스에서 사용되는 바이너리, 라이브러리들을 패키지로 묶어서 배포하기 때문에 운영체제, 하드웨어와 같은 부분에서의 의존성 문제들을 해결할 수 있다.
    • DevOps - development + operations
      • 기존의 개발 문화에서 개발팀은 신속하고 빠른 배포, 운영은 안정성, 보안성, 고가용성을 우선 목표로 작업을 하게 된다.
      • 데스옵스는 분리되어 있던 개발과 운용의 업무를 어느정도 하나의 팀의 형태로 구성하는 개발 문화를 말한다.
      • 개발과 운용 인원들 간의 긴밀한 커뮤니케이션을 통해 같은 목표로 서비스를 운용하면서 여러가지 문제들을 빠르게 해결 할 수 있다.
      • 이를 위한 업무 효율의 개선 방안 중 중요한 부분으로 자동화를 들 수 있는데 개발부터 배포까지의 작업들이 자동적으로 진행되도록 하는 방식을 말한다.
      • 이 자동화를 구현데 적합한 대표적인 기술이 컨테이너 방식의 배포방식이다.
      • 사용 환경과 애플리케이션에서 사용하는 바이너리 라이브러리가 분리되어 있기 때문에 환경관련 문제를 줄일 수 있으므로 상대적으로 빠른 배포작업을 수행할 수 있게 되면서 빠른 문제의 해결을 진행 할 수 있게된다.

컨테이너를 사용한 개발 흐름

1~8의 과정으로 순환하며 작업을 진행하게 된다.
1. 애플리케이션 코드 개발
2. 베이스 이미지를 이용한 dockerfile 작성
3. dockerfile build를 통한 새로운 이미지 생성
4. 생성된 이미지를 이용한 컨테이너 실행
5. 컨테이너 애플리케이션 서비스 테스트
6. 로컬 및 원격 저장소 이미지 저장(push)
7. 깃허브와 같은 형상관리 도구를 통하여 dockerfile 관리
8. 동일 환경에서의 지속적 애플리케이션 개발 수행

베이스 이미지

  • 도커는 기본적으로 도커 허브에서 제공하는 이미지를 기반으로 실행하게 된다.
  • 도커 이미지를 사용하는 방법은 도커 허브에서 docker search로 검색해서 pull하여 받아 사용하거나 또는 dockerfile로 새로운 이미지를 생성해서 사용하는 것도 가능하다.
  • docker hub로는 받는 것외에도 직접 만든 이미지를 업로드 하는 것도 가능하다.
  • 업로드한 이미지는 public/private로 선택할 수 있으며, 무료 플랜에서 public은 제한이 없지만, private은 1개 제한
  • docker hub 사용 시 계정 필요
  • 베이스 이미지는 프로그램, 라이브러리와 같은 프로그램 실행에 필요한 구성(유저랜드)만 가지고 있다.
  • 유저랜드는 입출력을 수행하고 파일 시스템 오브젝트를 처리하는 소프트웨어를 가리킴.
  • 기본적으로 이미지 파일은 immutable의 특성으로 수정이 불가능하다.

도커 유니언 파일 시스템


1. 도커 이미지 구조의 기본 운영체제 레이어들을 쌓는다.
2. 운영체제 베이스 이미지 위에 톰캣을 설치한 레이어를 올린다.
3. 톰캣 서비스에 필요한 리소스 정보 및 환경 정보가 포함된 레이어를 올린다. 이렇게 만들어진 이미지들은 불변(immutable)의 읽기 전용 레이어의 집합 → 유니언 파일 시스템이라 한다.
4. 도커 이미지를 실행하면 이미지를 가져다가 컨테이너를 생성할 수 있다. 각 컨테이너에서 발생한 모든 변경 정보들을 저장하기 위해서 읽고 쓰기가 가능한 레이어를 올리고 여기에 저장하게 된다.

0개의 댓글