Docker 설치 및 사용법

LDB·2025년 5월 5일
0
post-thumbnail

작성계기

일단 크게 2가지 이유가 있다. 최근에 과제테스트를 하면서 Docker 파일을 만들고 Docker 파일만으로 프로젝트를 실행하라는 과제를 받았다. 과제를 무사히 수행했지만 부족한 부분이 있었고 어떻게 보면 이유가 가장 컸다. 최근에 만든 서비스인 JPBoard 서비스를 운영하면서 AWS로부터 영수증이 왔는데 금액이 60달러나 되었다.

여기서부터는 예상이 된다고 생각하는데 간단히 이야기하자면 돈으로 두들겨 맞고 정신 차린 것이다. 애초에 운영 Linux 서버를 Red Hat을 사용한 것이 문제점이라고 생각한다. 정확히는 Red Hat을 사용한 이유가 문제라고 할 수 있다. 내가 원하는 mariaDB버전이 없어서 Red Hat을 썼다. 만약 지금처럼 Docker를 사용하여 프로젝트를 운영했다면 비용이 최소한 지금보다는 적게 나왔을 것이다.

현재는 문제를 해결했으니 정리해보자는 차원에서 작성하게 되었다.


Docker 기본설명

Docker는 간단히 이야기 하면 컨테이너를 실행하기 위한 소프트웨어이다. 자세히 이야기 하면 Docker는 GO언어 기반으로 만든 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼이다.


Hypervisor, 컨테이너 특징 및 비교

Docker를 설명하기 이전에 Hypervisor와 컨테이너를 설명하고 넘어갈 필요가 있다.

가상화
물리적인 하드웨어를 추상화하여 여러 개의 가상 컴퓨터처럼 활용하는 기술

가상머신
가상머신은 물리적 하드웨어 시스템에 구축되어 자체 CPU, 메모리, 네트워크 인터페이스 및 저장공간을 갖추고 가상 컴퓨터 시스템으로 작동하는 가상환경이다.

Hypervisor

하이퍼바이저는 가상화 계층을 구현해 주는 소프트웨어로 위의 그림을 보면 하이퍼바이저 위에 Virtualzation으로 그려진 곳이 가상화 계층인데 원래는 가상화 구조에서 호스트 OS의 하드웨어 자원과 가상머신은 직접 연결을 해줄 수 없는데 여기서 하이퍼바이저가 가상머신에 자원 및 네트워크를 할당해 주어 일종의 가상머신 매니저 역할을 수행한다. 하이퍼바이저는 실제로 가상머신의 생성, 실행, 삭제 등 모든 환경을 관리하기에 (VMM : Virtual Machine Manager)으로 불리기도 한다.

컨테이너(Container)

컨테이너는 애플리케이션을 실행하는 데 필요한 모든 구성요소와 기능을 갖춘 소프트웨어 단위이다. 기존 OS를 가상화 시키는 것에서 OS레벨의 가상화로 프로세스를 격리시켜 동작한다. 가상머신과 비교했을 때 소프트웨어 단위이기에 용량이 적고 이식성이 뛰어나다. 대표적으로 MSA(Micro Service Architecture)기반 서비스에 많이 쓰인다.

가상머신 VS 컨테이너

가상머신컨테이너
가상화물리적 인프라를 가상화한다.현재 운영체제를 가상화 한다.
캡슐화운영체제, 그 위의 소프트웨어 계층, 그리고 어플리케이션이 포함된다.운영체제를 가상화 한다.
조율하이퍼바이저 기반 운영체제 또는 하드웨어를 조율한다.현재 운영체제와 리소스를 조율한다.
크기GB 단위MB 단위
제어가상머신 전체환경을 제어할 수 있다.컨테이너 입장에서 보면 외부환경을 제어할 수 있는 권한이 적다.
유연성마이그레이션이 어려울 수 있다.크기 자체가 적기에 유연성이 좋다.
확장성확장하는데 비용이 많이 들 수 있다.마이크로서비스를 통해 세분화된 확장이 가능하기에 확장성이 뛰어나다.

Docker 설치

Docker는 앞에서 컨테이너를 운영하기 위한 소프트웨어의 일종이라고 했다. 실제로 컨테이너를 만드는 것만 보면 Docker가 필요없긴 하다. 하지만 컨테이너를 효과적으로 다루고 싶으면 Docker가 필요하다.

https://docs.docker.com/engine/install/

위의 사이트는 Docker를 설치하는 방법을 알려주는 사이트이다. 하지만 이 게시글에서는 Docker를 설치하는 OS환경은 Amazon 2023 AMI 이다.


yum 업데이트

시스템의 모든 패키지를 최신 버전으로 업데이트

> sudo yum update -y

Docker 설치

> sudo yum install docker -y

Docker 실행

Docker를 설치하는 순간 자동으로 실행이 된다.

> sudo service docker start

Docker 관련 명령어

컨테이너 생성 및 시작 (run)

> docker run [옵션] 이미지명[:태그명] [인수]
  • 옵션들
    • --attach, -a : 표준 입/출력/오류 출력을 첨부한다.
    • --cidfile : 컨테이너 ID를 파일로 출력한다.
    • --detach, -d : 컨테이너를 생성하고 백그라운드에서 실행한다.
    • --interactive, -i : 컨테이너의 표준 입력을 연다.
    • --tty, -t : 단말기 디바이스를 사용한다.
    • --name : 컨테이너 이름을 지정한다.
    • --rm : 실행이 끝나고 즉시 제거한다.

컨테이너 생성 (create)

> docker create [이름]

컨테이너 시작 (start)

컨테이너 시작은 기본적으로 백그라운드로 실행된다.

> docker start [옵션] [컨테이너 식별자]
  • 옵션들

    • --attach, -a : 표준 입/출력/오류 출력을 첨부한다.
    • --interactive, -i : 컨테이너의 표준 입력을 연다.
  • 컨테이너 식별자

    • 컨테이너 고유 ID 혹은 Name

컨테이너 정지 (stop)

> docker stop [옵션] [컨테이너 식별자]
  • 옵션들

    • --time, -t : 몇초 후 정지할 것인지 지정 (기본값은 10초)
    • 강제정지 명령어 : docker contianer kill
  • 컨테이너 식별자

    • 컨테이너 고유 ID 혹은 Name

컨테이너 삭제 (rm)

> docker rm [옵션] [컨테이너 식별자]
  • 옵션들

    • --force, -f : 실행 중인 컨테이너를 강제로 삭제
    • --volume, -v : 할당한 볼륨을 삭제
    • 도커 컨테이너 전부 삭제 : docker rm `docker ps -a --quiet`
    • 불필요한 이미지/컨테이너 전부 삭제 : docker system prune
  • 컨테이너 식별자

    • 컨테이너 고유 ID 혹은 Name

컨테이너 로그 (logs)

> docker logs [옵션] [컨테이너 식별자]

모든 컨테이너 목록 보기

> docker ps -a

docker 이미지 목록 보기

> docker images

docker 이미지 삭제

> docker rmi [이미지 식별자]
  • 이미지 식별자
    • 이미지 고유 ID 혹은 Name

참고 사이트

https://khj93.tistory.com/entry/Docker-Docker-%EA%B0%9C%EB%85%90

https://aws.amazon.com/ko/compare/the-difference-between-containers-and-virtual-machines/

https://www.redhat.com/ko/topics/containers/containers-vs-vms

https://selog.tistory.com/entry/%EA%B0%80%EC%83%81%ED%99%94-%EA%B0%80%EC%83%81%EB%A8%B8%EC%8B%A0VM%EA%B3%BC-%ED%95%98%EC%9D%B4%ED%8D%BC%EB%B0%94%EC%9D%B4%EC%A0%80-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

https://velog.io/@milkskfk5677/AWS-EC2에-Docker-설치하기

https://imjeongwoo.tistory.com/111

(항상 감사합니다.)

profile
가끔은 정신줄 놓고 멍 때리는 것도 필요하다.

0개의 댓글