5 minute read

본 게시물은 유투브 강의 따배도-도커 강의를 보고 학습한 내용을 정리한 내용입니다.

따배도 강의 바로가기

1. 컨테이너와 도커의 이해

why we should learn it?

  • 필요하기 때문에 시대적 요구 : 하드웨어 가격 다운, 성능 높아지고, 서비스는 커지고 무거워져
  • 시스템이 커지면서 오토스케일이나 무중단배포등이 필요해졌다.
    • 용량이 적은 컨테이너 어플리케이션이 이것을 충족한다.
  • 컨테이너가 환경을 다 갖추고 있다 : 컨테이너단위로. 독립. isolation

리눅스위에서 돌리는 이유

  • 리눅스 커널이 컨테이너에 필요한 설정을 모두 제공하고 있다.
    • 스토리지
    • 네임스페이스 : isolation
    • 네트워킹
  • mac이나 windows에서는 hypervisor 기능을 활성화 해야 한다.
  • 결론적으로 돈안주고 리눅스커널위에 따로 기능활성화 없이 바로 컨테이너 사용할 수 있는 리눅스가 된다.

그냥 프로그램 구동과 다른 점.

  • e.g

쓰는 이유

  • 오토스케일 가능(msa 구조에 유리)
  • 데브옵스 적합
  • 개발환경,운영환경 차이로 인한 어려움이 없다. 컨테이너 채로 설치하면 됨.
  • 기존에서는 스케일업하려면 모든 환경을 복제해야 하지만, 컨테이너구조에서 컨테이너만 복제하면 됨.

2. 도커 설치실습

  • 아래 케이스에 맞게 설치하면 된다.

2.1. Virtualbox 환경

  • 윈도우 환경에서 hypervisor를 설치하고 hypervisor 내부의 가상머신 2대를 설치한후 각 각의 가상머신에 docker를 설치한다.

1) Virtualbox(hypervisor 중에 하나) 다운로드 :arrow_left: 설치 2) Virtualbox 네트워크구성(vm간/외부)

2.1.1. Virtualbox 내 가상머신(vm) 만들기

  • ubuntu 와 centOS 2개를 만들었음.
  • ubuntu 가상머신에 우분투이미지 연결 (본격 설치 임.)
    • ubuntu 가상머신에 우분투20.04LTS 버전을 다운받아.
    • 설정>저장소> 컨트롤러 IDE에 다운받은 우분투 설치 파일을 등록한다.
    • 시작하기 하면 설치 진행됨. 리부팅하기
    • 설치 후 환경구성
      • ubuntu 가상머신을 시작하면 최초설치에 따른 설정선택이 진행되고 구동된다.
      • gui 로그인
      • 서버구성 : 네트워크 설정
      • text 부팅으로 수정
      • root password 설정 : sudo passwd root - 나의패스워드
      • 터미널에서 host, hostname 등 설정
      • ssh 서버 어플리케이션 설치 : 그 외 필요한 것
        • apt-get update && apt-get install -y openssh-server curl vim tree
        • ssh 툴로 로그인 구성 ( 윈도우(로컬) 터미널에서도 가상머신에 접속가능해짐)
    • 스냅샷 찍기 : 최초 상태로 돌아갈 수 있는 포인트를 만듦
  • centOS 가상머신에 우분투이미지 연결 (본격 설치 임)
    • 웹에서 다운받아 설정>저장소> 컨트롤러 IDE에 다운받은 centOS 설치 파일을 등록
    • 시작하기 하면 설치 진행됨.
    • 설치 후 환경구성
      • centOS 가상머신을 시작하면 최초설치에 따른 설정선택이 진행되고 구동된다.
      • 서버구성 : 네트워크 설정
      • root 패스워드 설정하기
      • 사용자등록
      • 리부팅 후 라이센스동의(필수), 환경구성 추가 설정(옵션).
      • gui 로그인, 환경구성 추가 설정
      • 네트워크 설정 확인
      • 터미널에서 host, hostname 등 설정
      • reboot
      • ssh 이미 설치 되어있음.
        • ssh 툴로 로그인 구성 ( 윈도우(로컬) 터미널에서도 가상머신에 접속가능해짐)
    • 스냅샷 찍기 : 최초 상태로 돌아갈 수 있는 포인트를 만듦

2.1.2. 가상머신에 도커설치하기

  • 준비 1. 가상머신 구동 그리고 ssh툴로 각각 연결해둘 것.
  • 도커 문서 https://docs.docker.com
  • docker for linux
  • 설치 방법의 종류 : 레파지토리 이용/다운로드 직접/script 이용 설치
  • Repository를 이용한 설치
  • apt 패키지인덱스를 업데이트 하고 apt가 https를 통해 레파지토리를 사용하도록 허락하는 패키지를 설치.
    $ sudo apt-get update
    $ sudo apt-get install \
      ca-certificates \
      curl \
      gnupg \
      lsb-release
    
    
  • 도커 인증서 저장
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
  • 설치할 안정적인 저장소의 URL 등록
    $  echo \ 
    "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  • 도커 설치
    $ sudo apt-get update
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io -y
    
    • 도커 설치 확인
      $ sudo docker version
      
  • 레파지토리 셋업 : yum-utils 패키지 설치와 안정적인 버전의 도커 레파지토리 설정
    $ su - // root 로 변경
    $ yum install -y yum-utils
    $ yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
  • 도커 설치
    $ sudo yum install docker-ce docker-ce-cli containerd.io -y
    
  • 도커 구동(서비스데몬실행) 및 확인
    $ systemctl start docker
    $ docker version
    
    2.1.2.3. 유저에게 도커 명령어를 쓸수 있도록 도커관리자 권한 부여하고 확인하기(Linux계열 동일)
    $ su -
    $ usermod -a -G docker 유저id
    $ su - 유저id
    $ docker ps
    

2.5. windows (dockerDesktop)

  • vm 없이 windows에 docker 직접 설치(wsl2 이용)
  • dockerDesktop 설치
    • Hyper-v 가상화 기능활성화
    • WSL2의 리눅스 커널 설치

2.5.1 hub.docker.com 계정 등록

  • 윈도우에서 바로 사용을 위해서는 필수임.
  • MacOS 도 대동소이함.

2.5.2 DockerDesktop 설치

  • hub.docker.com 에서 binary파일 다운로드 : 계정 필수임.
  • 다운로드 파일 실행하여 설치하기
    • Hyper-v 가상화 기능활성화(cpu 가상화 지원, Bios-cmos-에서 가상화 기능 켜야 함.)
    • WSL2의 활성화
    • 컴퓨터 리부팅
      • 리부팅후 커널 업데이트 경고메세지가 있으면, 커널을 업데이트하자. 링크를 보고 따라하기 : 리부팅필요함
  • 도커 실행 확인
    • powershell
      $ docker version
      $ docker login
      .username : 
      .password : 
      $ docker pull nginx // 이미지를 다운받아본다. 
      $ docker images
      $ docker run -d -p 80:80 --name web nginx // 컨테이너 실행
      $ docker rm web // 컨테이너 삭제
      $ docker rmi nginx  // 이미지 삭제
      

3. 도커 컨테이너 살펴보기 및 직접 해보기

  • Docker Host : 리눅스 커널을 가진 os-도커 호스트-에 docker를 설치하여 deamon을 실행한다 -> 도커 데몬이 동작되고 있는 리눅스 커널이 있는 시스템 docker가 컨테이너를 실행할 수 있는 플랫폼을 만들었다라고 표현 가능. 여러 컨테이너가 도커데몬 아래 실행되며, 컨테이너들끼리 독립된 구조. 도커 커널/데몬은 하나.
    • e.g ) 노드js 기반 웹서버에 소스코드 그리고 앱을 기동하는 명령어.
  • Container Image 는 파일 형태로 저장된 상태의 것, Contaiber 는 Image를 구동한 것 자체.
  • 기본 명령어
    $ docker search nginx // 컨테이너 찾기
    $ docker pull nginx:latest //   이미지 다운로드 아직은 이미지 상태고. 이미지 안에는 레이어별로 파일을 따로 가지고 있음.
    $ docker run -d --name web -p 80:80 nginx:latest // 이미지를 실행하면, 컨테이너가 동작된다.
    

4. 도커 컨테이너 만들어보기

4.1. 무엇을 컨테이너로 만들것인가?

  • 개발한 애플리케이션과 운영환경이 모두 들어있는 독립된 공간.
  • e.g . 운영환경 - node.js + 소스코드 - app.js + 애플리케이션 구동명령어 묶음.
  • MSA환경에서 프로그램과 실행환경을 모두 (각) 컨테이너로 만들어서 운영가능.
    • nodejs, php, sql, R과 같은 다양한 언어를 사용하여 개발된 프로그램을 운영할 때 유리.

4.2. docker file 로 컨테이너 만들기.

  • docker file : Container를 만들 수 있도록 도와주는 명령어 집합 text file
  • top-down 해석
  • 컨테이너 이미지 생성의 고유 지시어 가짐
  • 대소문자 구분 없음 (가독성을 위한 사용 정도)
  • 파일명 : dockerfile
  • 만들기 예제 ```shell $ mkdir build $ cd build $ vi dockerfile

— vim start— FROM node:12 COPY app.js / CMD [“node”, “app.js”] . . . — vim end—

$ docker build -t 이미지이름:태그 . // 실제 컨테이너 만드는 명령 ‘.’의 의미는 현재 디렉토리라는 의미. $ docker build -t appjs:latest


### 4.3. 배포하는 방법
내 도커호스트의 컨테이너를 도커허브(회사 도커 허브일수도 있고)로 배포하기

```shell
$ docker login
.username : 
.password : 
$ docker push appjs:latest

:exclamation:Tip : hub.docker.com에서 기존 dockerfile을 많이 읽어보고 해석해보는 연습하면 좋다.

  • 실습해보기
    • nodejs 에플리케이션 컨테이너 만들기 : hellojs
      $ vi hello.js
      $ cd ..
      $ docker ps
      $ docker search node
      $ cd hellojs
      $ vi dockerfile
      $ cat hello.js
      $ cat dockerfile
      $ docker build -t hellojs:latest .
      
    • 우분투 기반의 웹 서버 컨테이너 만들기
    • 배포하기 : 도커허브의 계정이 앞에 오도록 해야 함.
      $ docker login
      $ docker tag webserver:v1 mockdanjung/webserver:v1 //레파지토리 이름 필수라서 변경함. 계정id임.
      $ docker tag hellojs:latest mockdanjung/hellojs:latest
      $ docker push mockdanjung/webserver:v1 // latest외에는 생략이 불가함.
      $ docker push mockdanjung/hellojs
      
      • 배포확인 : hub.docker.com 로그인 후 확인 가능 로그인 후 도커허브에 올라간 컨테이너 확인
  • 문제풀이 해보기

$ vi dockerfile
------
# dockerfile
FROM debian:latest
COPY webpage.sh /
RUN apt-get update\
        && apt-get install -y fortune
RUN ["chmod", "go+x", "webpage.sh"]
CMD ["./webpage.sh"]
------

$ vi webpage.sh
------
#!/bin/bash
mkdir /htdocs
while :
do
    /usr/games/fortune > /htdocs/index.html
    sleep 10
done
------

# build
$ docker build -t fortune:21.02 .

# docker run
$ docker run -d --name fortune fortune:21.02

# exec     
$ docker exec -it fortune /bin/bash

$ cat /etc/issue
# 결과 : Debian GNU/Linux 11 \n \l
$ cd htdocs
$ cat index.html
# 결과 : Look afar and see the end from the beginning.

5. 컨테이너 보관창고

5.1. 이론

5.2. 실습

6. Docker 컨테이너 사용하기

6.1. 이론

6.2. 실습

7. Docker 컨테이너 리소스 관리

7.1. 이론

7.2. 실습

8. Docker 컨테이너 스토리지 관리

8.1. 이론

8.2. 실습

9. Docker 컨테이너 간 통신

9.1. 이론

9.2. 실습

10. 빌드에서 운영까지

10.1. 이론

10.2. 실습

Comments