2023년 5월 12일

코딩 - Docker 을 이용한 개발 환경 만들기 ( SpringBoot + MySql )

 ◼︎ 환경 

  • Model : MacBook Pro (14-inch, 2021)
  • CPU : Apple M1 Pro
  • MENORY : 16GB
  • DISK : 512 GB SSD
  • OS : macOS 13.2.1 (22D68)
  • TOOLS : Visual Studio Code, Java 11, Gradle
  • Version Control : GitHub
  • Programming Language : Java , Vue3
  • DBMS : MySql

Docker(도커) Dasktop 설치하기

도커는 애플리케이션을 빌드, 실행 및 배포하는 데 사용되는 오픈 소스 플랫폼이다. 도커는 애플리케이션을 컨테이너로 패키징하여 어디서나 실행할 수 있도록 한다. 컨테이너는 가볍고 이식 가능하므로 개발, 테스트 및 프로덕션 환경에 이상적이다.

도커는 다음과 같은 여러 가지 이점을 제공한다.

  • 개발 및 테스트 속도 향상: 도커를 사용하면 개발자가 애플리케이션을 빠르고 쉽게 빌드하고 테스트할 수 있다. 이는 개발 프로세스를 가속화하고 버그를 더 빨리 식별하는 데 도움이 될 수 있다.
  • 배포 용이성: 도커를 사용하면 개발자가 애플리케이션을 어디서나 쉽게 배포할 수 있다. 이는 애플리케이션의 배포 프로세스를 단순화하고 애플리케이션의 가용성을 높이는 데 도움이 될 수 있다.
  • 비용 절감: 도커를 사용하면 서버 및 인프라 비용을 절감할 수 있다. 이는 도커가 서버를 사용하지 않고도 애플리케이션을 실행할 수 있도록 하기 때문이다.

도커는 개발자, 시스템 관리자 및 컨설턴트에게 인기 있는 도구이며 기업에서도 애플리케이션의 개발, 배포 및 관리를 위해 도커를 사용하고 있다.

M1 맥 환경에서 도커를 아래와 같이 설치할 수 있다.


❶ Rosetta 2 을 설치한다.

Docker Desktop은 Intel Mac 용으로 빌드되었다. M1 Mac에서 에서 Intel Mac 용으로 빌드된 앱을 실행하려면 Rosetta 2를 설치해야 한다. Rosetta 2는 리눅스 Wine (윈도우 프로그램을 리눅스에서 실행하게 하는 가상머신) 과 유사하게 Intel 코드를 Apple Silicon 으로 번역하는 가상 머신이다.

softwareupdate --install-rosetta

❷ Docker.dmg 프로그램을 다운로드 후 더블 클릭하여 설치를 진행한다.

Docker Dasktop 은 명령 과 데스크탑  UI 프로그램이 제공되어 누구나 쉽게 이용할 수 있다.


MySql  배포하기

❶ MySql Docker 이미지 다운로드

가장 최신 MySql Docker 이미지를 다운로드 한다.  

docker pull mysql

특정 버전 이미지가 필요하다면 tag 을 같이 사용하여 아래와 같은 방법으로 다운로드 한다.

docker pull mysql:8.0.33

docker 는 다운로드 가능한 이미지들에 대한 검색 기능을 제공하고 있는데 docker search [검색어] 명령을 사용하거나  Docker Desktop 에서 mysql 을 검색하여 이미지를 다운로드 할 수도 있다. 

% docker search mysql

NAME                            DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED

mysql                           MySQL is a widely used, open-source relation…   14116     [OK]       

mariadb                         MariaDB Server is a high performing open sou…   5392      [OK]       

percona                         Percona Server is a fork of the MySQL relati…   607       [OK]       

phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   793       [OK]       

circleci/mysql                  MySQL is a widely used, open-source relation…   29                   

bitnami/mysql                   Bitnami MySQL Docker Image                       85                   [OK]

bitnami/mysqld-exporter                                                          5                    

ubuntu/mysql                    MySQL open source fast, stable, multi-thread…   46                   

cimg/mysql                                                                       0                    

rapidfort/mysql                 RapidFort optimized, hardened image for MySQL    14                   

google/mysql                    MySQL server for Google Compute Engine           23                   [OK]

rapidfort/mysql8-ib             RapidFort optimized, hardened image for MySQ…   0                    

hashicorp/mysql-portworx-demo                                                    0                    

rapidfort/mysql-official        RapidFort optimized, hardened image for MySQ…   0                    

newrelic/mysql-plugin           New Relic Plugin for monitoring MySQL databa…   1                    [OK]

databack/mysql-backup           Back up mysql databases to... anywhere!          84                   

linuxserver/mysql               A Mysql container, brought to you by LinuxSe…   38                   

bitnamicharts/mysql                                                              0                    

mirantis/mysql                                                                   0                    

docksal/mysql                   MySQL service images for Docksal - https://d…   0                    

linuxserver/mysql-workbench                                                      49                   

vitess/mysqlctld                vitess/mysqlctld                                 1                    [OK]

eclipse/mysql                   Mysql 5.7, curl, rsync                           0                    [OK]

drupalci/mysql-5.5              https://www.drupal.org/project/drupalci          1                    [OK]

drupalci/mysql-5.7              https://www.drupal.org/project/drupalci          0                    



다운로드된 이미지들은 docker images 명령 또는 Docker Desktop 프로그램에서 목록을 확인할 수 있다. 

 

 % docker images

 mysql                      latest     5371f8c3b63e   3 weeks ago    592MB




❷ MySql 이미지 컨테이너 생성 및 실행
아래와 같은 명령으로 간단하게 컨테이너를 생성하고 실행한다.  (<password> 값은 원하는 값으로 변경)

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=<password> -d -p 3306:3306 mysql:latest

생성되어 실행중인 컨테이너는 docker ps 명령을 사용하거나 Docker Desktop Containers 에서 확인 할 수 있다.


❸ 데이터베이스 생성 및 권한 부여 
아래 명령으로 Docker 컨테이너 MySql 에 접속한다. MySql root 계정의 비밀번호는 앞서 입력한 값을 사용한다.

docker exec -it mysql-container bash 
mysql -u root -p 


% docker exec -it mysql-container bash 

bash-4.4# mysql -u root -p 

Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 10

Server version: 8.0.33 MySQL Community Server - GPL


Copyright (c) 2000, 2023, Oracle and/or its affiliates.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> 



이제 새로운 데이터베이스 및 계정을 추가한다 . (아래는 예시)

-- testdb 생성
CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- test 계성 생성
CREATE USER 'tester'@'%' IDENTIFIED BY 'tester';
-- testdb에 대한 권한을 tester 에게 부여한다.
GRANT ALL PRIVILEGES ON testdb.* TO 'tester'@'%' WITH GRANT OPTION;

마지막으로 Workbench 와 같은 클라이언트 도구를 사용하여 생성된 데이터베이스에 접속한다.


SprinbBoot 이미지 생성 및  배포하기

Spring 2.3 이상부터는 bootBuildImage Task 가 지원되고 있는데, 이 Task를 사용하면 Dockerfile 없이 Docker 이미지를 쉽게 생성할 수 있다. 이미지는 ./gradlew bootBuildImage 명령을 사용하여 이미지를 생성한다. 


 ./gradlew bootBuildImage



주의 할 것은 bootBuildImage 는 Buildpacks 기술을 사용하고 있는데 Buildpacks 는 기본적으로 docker daemon을 사용하고 있기 때문에 docker가 설치되어 있어야지 동작할 수 있다.

컨테이너 배포 및 실행은 다음과 같은 명령을 사용하면 된다.


 docker run -p 8080:8080 [이미지 이름]



VS Code 에서 도커 사용하기 

Docker 확장을 사용하면 Visual Studio Code에서 컨테이너화된 애플리케이션을 쉽게 빌드, 관리 및 배포할 수 있습니다. 이때 도커 서비스는 실행중이여야 한다.
 
Docker 확장 설치는 VS Code 에서 ⇧⌘X 명령을 입력하여 좌측 사이드 확장 뷰를 열고  docker  이름을 검색하여 설치하면 된다. 


Docker 확장 프로그램은 VS Code에 Docker 탐색기 보기를 제공한다.  Docker Explorer를 사용하면 컨테이너, 이미지, 볼륨, 네트워크 및 컨테이너 레지스트리와 같은 Docker 자산을 검사하고 관리할 수 있다.

여기에서는 mysql 컨테이너를 시작하고 중지하는 용도로만 사용하고 있다. 
 

참고자료 

  1. https://spring.io/guides/topicals/spring-boot-docker/ 
  2. https://docs.spring.io/spring-boot/docs/current/reference/html/native-image.html#_enable_native_image_support 
  3. Docker in Visual Studio Code

댓글 없음:

댓글 쓰기