[Docker] 도커 이해하기 1

BBeumSeok·2024년 8월 21일
0

Docker

목록 보기
1/4
post-thumbnail

Docker란?

도커(Docker)는 컨테이너 기반 가상화 플랫폼으로, 응용 프로그램과 그 종속성을 격리된
환경인 컨테이너로 패키징하여 실행하는 기술이다.

컨테이너(Container)
가상화 기술을 이용하여 어플리케이션과 개발 환경을 격리된 공간에서 실행하는 단위

1단계 : 도커 GPG 키 및 레포지토리 등록 생성

  • Docker Home


  • Create apt Repository


# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update





2단계 : 도커 엔진 관련 패키지 설치

  • sudo apt-get install docker-ce docker-ce-cli containered.io
    docker-buildx-plugin docker-compose-plugin



3단계 : 도커 엔진 구동 확인

  • sudo docker run hello-world



4단계 : 도커 설치 후 작업

Manage Docker as a non-root user

  1. 그룹 추가
  • user1@myserver01:~$ sudo groupadd docker
    groupadd: group 'docker' already exists

  1. 도커 그룹에 사용자 추가
  • user1@myserver01:~$ sudo usermod -aG docker $USER

  1. 사용자의 그룹 아이디를 docker로 변경 -> 지금 현재 사용자의 그룹을 변경
    로그아웃 후에 다시 docker 실행 시 권한 문제가 발생했을 경우에 아래 명령을 실행
  • user1@myserver01:~$ newgrp docker

  1. 도커 테스트
  • user1@myserver01:~$ docker run hello-world\
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Docker 개념

도커(Docker)는 컨테이너를 실행하기 위한 실행 환경(컨테이너 런타임)및 툴 킷.
쿠버네티스는 도커 이외의 컨테이너 런타임도 지원하도록 개발되어 있다.
때문에 쿠버네티스를 사용할 경우 도커에 대한 학습이 반드시 필요한 것은 아니다.

주로 필요한 내용은 도커 이미지에 대한 지식들이 필요하다.
도커 이미지가 아닌 OCI 표준 컨테이너 이미지를 사용하는 방법이나 다른 도구에서 도커 이미지를
빌드하는 방법들도 존재한다.
하지만, 아직도 도커 이미지를 많이 사용하고 있고, 도커 이미지 작성 메뉴얼인 도커 파일을 사용해
이미지를 생성하는 경우가 많다.
때문에 도커 이미지를 제대로 만들어 도커 이미지 보관/배포 서버인 도커 레지스트리로 푸시(업로드)하는
방법을 알아두면 편리하게 작업할 수 있다.

알아볼 섹션은 다음과 같다.

1. 도커 컨테이너 설계

2. 도커 파일 작성법

3. 도커 이미지 빌드

4. 도커 레지스트리로 이미지 푸시

Docker Container 설계

도커 컨테이너란?

  • 도커 이미지를 기반으로 실행되는 프로세스를 의미한다.

  • 도커 이미지만 있다면 환경의 영향을 받지 않고 다양한 환경에서 컨테이너를 기동할 수
    있기 때문에 '이식성'이 높다.

  • 이렇게 빌드된 도커 이미지는 어느 환경에서도 동일한 동작을 보장받을 수 있다.

이식성
소프트웨어가 한 컴퓨터 시스템이나 환경에서 다른 시스템이나 환경으로 쉽게 옮겨질 수 있는 성질

도커 컨테이너의 특징을 정리하자면 다음과 같다.

  • 이식성이 높고, 동일한 동작을 보장한다.

  • 가볍고, 시작과 중지가 빠르다는 장점을 가지고 있다.

도커 컨테이너 생성 시 주의사항

  1. 컨테이너 당 1개의 프로세스(관리의 불편함과 에코 시스템 이슈)

  2. 변경 불가능한 인프라 이미지로 생성(외부 영향에 따른 변경이 일어나지 않게)

  3. 경량 도커 이미지로 생성(외부에서 쉽게 다운받아 사용할 수 있게)

  • dnf/yum, apt 패키지 설치 후에 저장소 패키지 목록 등의 캐시 파일 삭제

  • 최대한 경량 배포판 이미지를 사용(alpine Linux, Deistorless 등)

  • 도커 파일 최적화에 따른 레이어 줄이기, 도커 이미지 생성 시 시퀸스 사용

  1. 실행 계정은 root이외의 사용자로 한다.(계정 권한 최소화)

Docker Commands(도커 명령어)

Docker 공식사이트에 Docker Hub로 가면 필요한 이미지를 찾아서 사용할 수 있다.



1. docker search(Docker Hub에서)

  • 이미지를 검색하는 명령어

  • STARS : 좋아요

  • OFFICIAL : 공식 이미지

docker search 사용법

사용법 : docker search [OPTION] TERM

Options :
  -f, --filter filter      Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int   Max number of search results
      --no-trunc   Don't truncate output

  • docker search alpine


  • docker search mysql


2. docker pull

  • 도커 이미지 다운로드 명령어

docker pull 사용법

- 사용법 : docker pull [OPTIONS] NAME[:TAG][DIGEST]
=> Digest는 이미지의 해시값을 의미함
=> 이미지를 검색해서 들어가면 나오는 OS/ARCH는 사용자의 
	OS를 가리키는게 아닌 해당 이미지의 OS를 의미함.

Options:
  -a, --all-tags                   Download all tagged images in the repository
      --disable-content-trust    Skip image verification (default true)
      --platform string            Set platform if server is multi-platform capable
  -q, --quiet               Suppress verbose output



3. docker images

  • 다운받은 이미지를 확인하는 명령어



4. docker login

  • 말 그대로 Docker 로그인 명령어이다.

  • 해당 명령어 사용 시 ID, PW를 입력하면 터미널에서도 도커에 로그인 할 수 있다.

5. docker image rm

  • 도커 이미지 삭제 명령어

  • 이미지는 삭제 시 이미지를 식별하는 digest를 정확하게 입력한다.
    (latest의 경우 이미지 이름만 적어도 삭제가 가능)

사용법

  • docker image rm [삭제할 이미지 이름] / docker rmi [삭제할 이미지 이름]

  • docker image rm


  • docker rmi


6. docker run

  • 이미지 구동(컨테이너 생성)

사용법

docker [container] run [OPTIONS] IMAGE [COMMAND] [ARG...]

$ docker run -it alpine:latest	=> -it 옵션은 터미널 옵션

** --rm 옵션을 사용하면 컨테이너 종료시 자동 삭제... 

6-2. docker ps

  • 구동 중인 컨테이너를 확인하는 명령어(= docker [container] ls)

사용법

  • docker ps [OPTIONS]

7. docker container stop & kill

  • docker container stop
    컨테이너를 정상 종료하는 명령어

  • docker container kill
    컨테이너 강제 종료 명령어

도커 파일 작성법

*도커 파일로 이미지 만들기

  1. docker pull
  • 만들어진 이미지를 가져온다.

  1. docker commit
  • 컨테이너 구동 후에 변경사항을 이미지로 만들 때 사용한다.

Dockerfile을 이용하여 빌드하는 방법

  • Dockerfile은 이미지를 생성하는 것


  1. docker run -it ubuntu:22.04 & docker commit
  • docker commit : 컨테이너 구동 후에 변경사항을 이미지로 만들 때 사용한다.




  1. apt-get install apache2 -y



  1. apachectl -D FOREGROUND(포그라운드 설정으로 웹에서 보이게끔 설정한다.)



  1. Virtual Box 포트포워딩
  • apache 8000
  • 8000:80
    => 8000 포트는 외부에서 들어올 때 허용할 포트번호
    => 80 포트는 서비스 포트(Docker에게 80번 포트를 공개(허용)한 것)




Dockerfile 사용 가능 명령들

  1. FROM
  • base image 지정

  1. MAINTAINER
  • 컨테이너 이미지 관리자 정보를 기입
    (현재는 MAINTAINER 대신 LABEL을 사용함)

  1. LABEL
  • 컨테이너 이미지 메타데이터를 키(key):값(value) 형식으로 지정
ex) LABEL maintainer="hidro cho<hidro1234@naver.com>"

  1. USER
  • 명령어 실행 계정 지정

  1. WORKDIR
  • 명령어를 실행할 작업 디렉터리를 지정
    (만약, 디렉터리가 없다면 생성하고 작업을 진행한다.)

  1. EXPOSE
  • 컨테이너 실행 시 Listen 할 포트를 지정

  1. COPY
  • 로컬에 있는 파일을 컨테이너로 복사

  1. ADD
  • 로컬에 있는 tar.gz 파일 압축을 풀고 파일을 컨테이너로 복사

  1. RUN
  • 컨테이너 안에서 명령 실행

  1. ENTRYPOINT
  • 컨테이너 기동 시에 실행할 명령어

  1. CMD
  • 컨테이너 기동 시에 실행할 명령어 인수

Docker git 설치하기

  1. apt-get update
  • 항상 설치 전 업데이트를 통해 최신 상태로 설치할 수 있게 한다.


  1. apt-get install git
  • git 설치


Docker Build

  • docker build -t [이미지명:태그명][빌드할 디렉터리 경로]
    => 태그명 뒤에는 디렉터리 경로를 반드시 넣어줘야 한다.
    => -t는 build 옵션 중에 태그에 해당하는 옵션이다.


Dockerfile 만들기

1. ubuntu 이미지에 git이 설치된 ubuntu-git 이미지를 만드는 Dockerfile 생성

  • Dockerfile1 디렉터리에 Dockerfile 생성 후 이미지 만들기

1-1. mkdir Dockerfile1

1-2. Dockerfile1 디렉터리 안에 Dockerfile 생성

FROM ubuntu

RUN apt-get update
RUN apt-get install -y git




1-3. docker images를 사용하여 생성된 이미지 확인

1-4. docker ps -a | grep ubuntu-git

  • 확인 후 컨테이너 아이디로 삭제하기

  • docker container rm [컨테이너 ID]
    => 만약 컨테이너가 실행 중이라면 docker container stop [컨테이너 ID] 명령을 먼저 실행
    후 삭제해야 한다.

  • docker ps로 컨테이너가 삭제됐는지 확인

도커 컨테이너 기동에 대한 기본 명령어

  • 각각의 컨테이너는 독립적으로 작동한다.

  • 이미지의 구성이 같더라도 서로에게 영향을 미치지 않는다.

  1. 컨테이너 실행 명령어
  • docker container start[Container ID]

  1. 컨테이너 종료 명령어
  • docker container stop [Container ID]

  1. 컨테이너 삭제 명령어
  • docker container rm [Container ID]

profile
Do your best every moment

0개의 댓글