2 분 소요

컨테이너 가상화

Virtualization

  • 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이션에서 사용할 수 있도록 제공
    - 플랫폼 가상화
    - 리소스 가상화
  • 하이퍼바이저 (Hypervisor)
    - Virtual Machine Manager (VMM)
    - 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼
    - Type 1: Native or Bare-metal
    - Type 2: Hosted (일반적으로 많이 사용한다.)

스크린샷 2022-10-17 오전 12 10 06

Container Virtualization

스크린샷 2022-10-17 오전 12 14 54 스크린샷 2022-10-17 오전 12 15 45

  • OS Virtualization
    - Host OS 위에 Guest OS 전체를 가상화
    - VMWare, VirtualBox
    - 자유도가 높으나, 시스템에 부하가 많고 느려짐
  • Container Virtualization
    - Host OS가 가진 리소스를 적게 사용하며, 필요한 프로세스 실행
    - 최소한의 라이브러리와 도구만 포함
    - Container의 생성 속도 빠름

Container Image

  • Container 실행에 필요한 설정 값
    - 상태값 X, Immutable
  • Image를 가지고 실체화 -> Container

Dockerfile

  • Docker Image를 생성하기 위한 스크립트 파일
  • 자체 DSK(Domain-Specific language) 언어 사용 -> 이미지 생성 과정 기술

스크린샷 2022-10-17 오전 12 20 48

Docker 컨테이너 생성과 실행

Docker Desktop

https://www.docker.com/products/docker-desktop

위 사이트에 접속해 회원가입을 하자.
그리고 운영체제에 맞는 Docker Desktop을 설치한다.
설치 후, 아래 커맨드로 확인할 수 있다.

# 설치 확인
$ docker info

# 가지고 있는 이미지 확인
$ docker image ls

# 현재 실행중인 컨테이너 확인
$ docker container ls

컨테이너 실행

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
  • -d: detaged mode, 흔히 말하는 백그라운드 모드
  • -p: 호스트와 컨테이너의 포트를 연결 (포워딩)
  • -v: 호스트와 컨테이너의 디렉토리를 연결 (마운트)
  • -e: 컨테이너 내에서 사용할 환경변수 설정
  • --name: 컨테이너 이름 설정
  • --rm: 프로세스 종료 시 컨테이너 자동 제거
  • -it: -i-t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
  • --link: 컨테이너 연결 [컨테이너명:별칭]

도커 허브 사이트로 이동해 로그인하자.
https://hub.docker.com

상단 검색어에 “ubuntu”를 검색하자.
스크린샷 2022-10-17 오전 12 41 28
그리고 첫 번째 이미지를 클릭한 뒤에 16.04 태그를 검색하자.
사이트에서 나오는 docker pull ubuntu:16.04로 이미지를 다운받게 되면, createstart 커맨드까지 실행해야하는데,
docker run ubuntu:16.04이라는 커맨드로 실행하게 되면, 기존에 해당 이미지가 존재하지 때 다운로드(pull) 받은 뒤에 컨테이너로 만들고(create) 실행(start)까지 한번에 수행한다.

# 이미지 다운로드
$ docker pull ubuntu:16.04

# 다운로드 확인
$ docker images | grep ubuntu

# 컨테이너 실행
$ docker run ubuntu:16.04

# 컨테이너 목록 확인
$ docker ps -a

# 컨테이너 삭제
$ docker rm [CONTAINER_ID]

# 컨테이너 종료
$ docker stop [CONTAINER 이름]

# 종료된 컨테이너 실행
$ docker start [CONTAINER 이름]

스크린샷 2022-10-17 오전 12 46 43

docker run ubuntu:16.04 커맨드로 컨테이너를 실행한 뒤, docker ps -a 커맨드로 확인해보면, 바로 종료된 것을 확인할 수 있는데,
이는 ubuntu 이미지가 독립적으로 실행될 수 있는게 아니라, ubuntu 이미지를 베이스로 다른 이미지를 실행해야하기 때문이다.
docker rm 커맨드로 해당 컨테이너를 삭제하자. (이 때, CONTAINER_ID의 앞 4글자만 입력해도 삭제된다.)

mysql 컨테이너 실행

이제 도커를 이용해 mysql을 실행해보자.
m1 Mac의 경우 --platform linux/x86_64 옵션을 부여해주어야 한다.

# 이미지 pull
$ docker pull --platform linux/x86_64 mysql:5.7 # m1 Mac

# 컨테이너 실행
$ docker run --platform linux/x86_64 -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mysql:5.7 # 제일 마지막 mysql:5.7 이 컨테이너를 생성하기 위한 이미지 이름이다.

# 컨테이너를 실행하는 동안 발생한 로그 확인
$ docker logs mysql # 맨 마지막은 컨테이너 이름 혹은 ID

# mysql 컨테이너 쉘 접속
$ docker exec -it mysql /bin/bash
bash-4.2# mysql -uroot

# 데이터 베이스 확인
mysql> show databases;

# 데이터 베이스 생성 
mysql> create database mydb;

스크린샷 2022-10-17 오전 1 27 00

mysql 5.7 버전의 특징 중 하나가, 반드시 root password를 지정해야 실행할 수 있다.
따라서 MYSQL_ALLOW_EMPTY_PASSWORD=true 옵션을 부여함으로써 root password를 지정하지 않도록 했다.

mysql 컨테이너에 접속해보자.
스크린샷 2022-10-17 오전 1 32 08

스크린샷 2022-10-17 오전 1 32 37

테이블은 생성하지 않고 mydb 데이터베이스까지만 생성해두자.
스크린샷 2022-10-17 오전 1 34 31

docker ps -a 커맨드를 통해 mysql이 실행중임을 확인한 뒤, mysql 워크벤치로 접속해보자.
그리고 새로운 connection을 추가하는데, 이 때 포트번호는 빨간색 동그라미로 표시한 두 개가 일치해야 한다.
스크린샷 2022-10-17 오전 1 44 48
(참고로, 초기에는 비밀번호 없이 접속할 수 있는데, host에 127.0.0.1로 설정하면 접속이 되지 않고, localhost로 생성해야 접속이 된다.)

접속해보면, 아까 생성한 mydb라는 데이터베이스를 확인할 수 있다.
스크린샷 2022-10-17 오전 1 47 01

이제 mysql 컨테이너를 중지하자.
스크린샷 2022-10-17 오전 1 49 52



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기