[E-commerce App] 컨테이너 가상화 및 컨테이너 생성
컨테이너 가상화
Virtualization
- 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이션에서 사용할 수 있도록 제공
- 플랫폼 가상화
- 리소스 가상화 - 하이퍼바이저 (Hypervisor)
- Virtual Machine Manager (VMM)
- 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼
- Type 1: Native or Bare-metal
- Type 2: Hosted (일반적으로 많이 사용한다.)
Container Virtualization
- 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) 언어 사용 -> 이미지 생성 과정 기술
Docker 컨테이너 생성과 실행
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”를 검색하자.
그리고 첫 번째 이미지를 클릭한 뒤에 16.04
태그를 검색하자.
사이트에서 나오는 docker pull ubuntu:16.04
로 이미지를 다운받게 되면, create
와 start
커맨드까지 실행해야하는데,
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 이름]
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;
mysql 5.7 버전의 특징 중 하나가, 반드시 root password를 지정해야 실행할 수 있다.
따라서 MYSQL_ALLOW_EMPTY_PASSWORD=true
옵션을 부여함으로써 root password를 지정하지 않도록 했다.
mysql 컨테이너에 접속해보자.
테이블은 생성하지 않고 mydb 데이터베이스까지만 생성해두자.
docker ps -a
커맨드를 통해 mysql이 실행중임을 확인한 뒤, mysql 워크벤치로 접속해보자.
그리고 새로운 connection을 추가하는데, 이 때 포트번호는 빨간색 동그라미로 표시한 두 개가 일치해야 한다.
(참고로, 초기에는 비밀번호 없이 접속할 수 있는데, host에 127.0.0.1
로 설정하면 접속이 되지 않고, localhost
로 생성해야 접속이 된다.)
접속해보면, 아까 생성한 mydb
라는 데이터베이스를 확인할 수 있다.
이제 mysql 컨테이너를 중지하자.
💛 개인 공부 기록용 블로그입니다. 👻