[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 컨테이너를 중지하자.

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