세 줄 요약
- 도커 데스크탑을 통해 손쉽게 도커 컨테이너를 관리할 수 있다.
- WSL2에 도커 엔진을 설치하면 도커 CLI 클라이언트를 통해 도커 데스크탑 없이도 컨테이너를 생성할 수 있다.
- 도커 컨테이너는 리눅스 환경에서 동작되기 때문에 bash 쉘을 통해 명령어를 입력한다.
도커 데스크탑과 도커 엔진
도커 데스크탑(Docker Desktop)
도커 데스크탑은 각 OS 환경에서 컨테이너화된(containerized) 어플리케이션을 구축하고 공유할 수 있도록 해줍니다.
GUI를 함께 제공해 한 번의 클릭으로 보다 쉽게 컨테이너, 어플리케이션, 이미지 등을 설치하고 관리할 수 있습니다.

포함 요소
도커 데스크탑에는 아래와 같은 요소들이 포함되어 있습니다.
Docker Engine
Docker CLI client
Docker Buildx
Extensions
Docker Compose
Docker Content Trust
Kubernetes
Credential Helper
이처럼 도커 생태계를 구성하는 모든 요소를 GUI를 통해 간편하게 쓸 수 있는 장점이 있습니다.
교육목적, 소규모 또는 비상업적 프로젝트 등에는 무료로 사용가능하나 그 외에는 필요에 따라 구독료를 지불해야 합니다.
자세한 내용은 여기에서 확인할 수 있습니다.


도커 엔진

도커 엔진은 컨테이너화(containerization)를 위환 오픈 소스 컨테이너화 기술입니다.
도커 엔진에는 다음과 같은 요소들이 포함되어 있기 때문에 WSL2에 도커 엔진을 설치하면 도커 데스크탑 없이 도커 컨테이너를 생성하고 관리할 수 있습니다.
도커 CLI 클라이언트
도커 API
도커 데몬(Docker daemon)
도커 CLI 클라이언트는 각종 명령어(혹은 스크립트)를 통해 도커 API를 이용한 도커 데몬과의 상호작용이 가능합니다.
도커 데스크탑없이 컨테이너를 생성하는 방법을 간단하게 요약하면 아래와 같습니다.
1) 도커 엔진은 리눅스 기반이므로 Win OS에서 사용하기위해 WSL2에 설치한다.
2) host(Win OS)에는 도커 CLI 클라이언트를 설치하고, 도커 엔진의 클라이언트 및 daemon에 이를 연결한다.
3) host 터미널(혹은 cmd)에서 명령어를 입력해 도커 컨테이너를 생성한다.

도커 데스크탑 없이 구성하는 자세한 방법은 여기를 참고해주세요.
도커로 MySQL 컨테이너 띄우기
도커 데스크탑 설치
아래 링크에서 Win OS용 도커 데스크탑을 설치하고 실행합니다.
https://docs.docker.com/desktop/install/windows-install/

MySQL 컨테이너 띄우기
명령 프롬프트(cmd) 창에 다음과 같이 입력합니다.
docker run --name some-mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=userpassword -d mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
해당 스크립트에 사용된 명령어와 옵션에 대한 설명입니다.
run : 이미지로부터 새로운 컨테이너를 생성하고 실행한다.
--name (string) : 컨테이너의 이름을 assign한다.
-p (list) : 컨테이너의 포트를 호스트에 publish한다.
-e (list) : 환경변수를 설정한다.
MYSQL_ROOT_PASSWORD : superuser인 'root' 사용자에 대한 비밀번호를 설정한다. (필수요소)
-d : 컨테이너를 background에서 실행시킨다. (터미널을 계속해서 사용할 수 있음)
-d mysql:tag에서 'tag'에는 mysql의 버전이 들어갈 수 있습니다.
'--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci' 문구는 configuration 파일(~.cnf)없이 테이블의 기본 encoding 방식을 UTF-8(utf8mb4)로 설정해줍니다.
실행결과

명령어를 통한 컨테이너 관리
도커 컨테이너 bash쉘 접속
다음과 같이 입력하면 도커 컨테이너의 bash 쉘에 접속할 수 있습니다.
→ bash는 Windows의 Powershell과 같이, 유닉스(Linux, Mac 등)에서 사용되는 CLI입니다.
docker exec -it some-mysql bash
현재 some-mysql1 컨테이너가 실행 중인 상태라면 아래와 같이 bash 쉘에 접속한 것을 확인할 수 있습니다.

다음과 같이 입력하면 mysql의 root 사용자로 접속해 DB를 관리할 수 있습니다.
mysql -u root -p
패스워드는 컨테이너 생성 당시 MYSQL_ROOT_PASSWORD 변수에 설정한 패스워드를 입력합니다.

컨테이너 종료
bash 쉘에서 다음과 같이 입력해 쉘을 빠져나오고 컨테이너를 종료합니다.
1) \q(= quit or exit) : 도커 컨테이너(mysql)에서 빠져나옵니다.
2) exit : bash 쉘을 종료합니다.
3) docker container stop some-mysql1: 컨테이너를 종료합니다.
기존에 생성한 컨테이너 실행
터미널(혹은 cmd)에서 다음과 같이 입력해 mysql root 사용자로 접속합니다.
1) docker container start some-mysql1 : 도커 컨테이너(mysql)를 실행합니다.
2) docker exec -it some-mysql1 bash : 실행중인 도커 컨테이너의 bash 쉘에 접속합니다.
3) mysql -u root -p : mysql DB의 root 사용자로 접속합니다.
주의사항
도커 엔진을 따로 설치하지 않은 경우, 도커 데스크탑을 실행해야 명령어를 통해 컨테이너를 실행할 수 있습니다.

* refs
https://medium.com/@senali/what-docker-desktop-and-docker-engine-in-linux-2ed9f140940
https://hub.docker.com/_/mysql
https://forums.docker.com/t/difference-between-docker-desktop-and-docker-engine/124612
'Spring-Java > Docker' 카테고리의 다른 글
예제로 알아보는 도커(Docker) (0) | 2024.04.29 |
---|