1. 가상화
1). 호스트 OS 가상화
- Host OS 위에 Guest OS 전체를 가상화
- VMWare, VirtualBox
- 자유도가 높으나 시스템에 부하가 많고 느려짐
2). 컨테이너 가상화
- Host OS가 가진 리소스를 적게 사용하며 필요한 프로세스 실행
- 최소한의 라이브러리와 도구만 포함
- Container의 생성 속도 빠름
Container Image : Container 실행에 필요한 설정 값
Image만 가지고 있으면 바로 하나의 운영체제나 소프트웨어를 바로 실행할 수 있는 상태
Dockerfile
- Docker Image를 생성하기 위한 스크립트 파일
- 자체 DSL(Domain-Specific language) 언어 사용 -> 이미지 생성과정 기술
2. Docker Desktop 설치
https://www.docker.com/products/docker-desktop/
Docker Desktop: The #1 Containerization Tool for Developers | Docker
Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.
www.docker.com
1). 오류
importing WSL distro "WSL2는 현재 컴퓨터 구성에서 지원되지 않습니다.\r\n\"가상 머신 플랫폼\" 선택적 구성 요소를 사용하도록 설정하고 BIOS에서 가상화가 사용하도록 설정되어 있는지 확인하세요.\r\n실행하여 \"가상 머신 플랫폼\"을 사용하도록 설정: wsl.exe --install --no-distribution\r\n자세한 내용은 https://aka.ms/enablevirtualization 참조하세요.\r\nError code: Wsl/Service/RegisterDistro/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED\r\n" output="docker-desktop": exit code: 4294967295: running WSL command wsl.exe C:\WINDOWS\System32\wsl.exe --import docker-desktop \AppData\Local\Docker\wsl\distro C:\Program Files\Docker\Docker\resources\wsl\wsl-bootstrap.tar --version 2: WSL2는 현재 컴퓨터 구성에서 지원되지 않습니다.
"가상 머신 플랫폼" 선택적 구성 요소를 사용하도록 설정하고 BIOS에서 가상화가 사용하도록 설정되어 있는지 확인하세요.
실행하여 "가상 머신 플랫폼"을 사용하도록 설정: wsl.exe --install --no-distribution
자세한 내용은 https://aka.ms/enablevirtualization 참조하세요.
// 버전 확인
wsl --version
// update
wsl --update
// wsl 설치
wsl --install
//Hyper-v 켜기
bcdedit /set hypervisorlaunchtype auto
// 설치된 docker 정보 확인
docker info
// docker image 목록 확인
docker image ls
// docker container 목록 확인
docker container ls
// 컨테이너 실행
$ docker run [OPTIONS] image[:TAG|@DIGEST] [COMMAND] [ARG...]
옵션 | 설명 |
-d | 백그라운드 모드 |
-p | 호스트와 컨테이너 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
-name | 컨테이너 이름 설정 |
-rm | 프로세스 종료시 컨테이너 자동 제거 |
-it | -i, -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
-link | 컨테이너 연결 [컨테이너명:별칭] |
2). 우분투 실행
// 없음을 확인
docker images | findstr 16.04
// docker images 가져오기
docker pull ubuntu:16.04
// 실행
docker run ubuntu:16.04
// 컨테이너 목록
docker ps
// 종료된 컨테이너 목록까지 확인
docker ps -a
// 컨테이너 삭제
docker container rm 컨테이너ID
3). mysql 실행
$ docker pull mysql:5.7
$ docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mysql:5.7
$ docker exec -it mysql /bin/bash
// 비번은 없으므로 그냥 엔터
bash-4.2# mysql -uroot -p -h127.0.0.1
$ docker stop mysql
포트 중복 [13306:3306으로 해본다] name이 같기 때문에 컨테이너 삭제 후 다시 run
PS C:\Windows\system32> docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mysql:5.7
a5b654d7481373ba3a17ec70f87cff5a540857615b52e13a6f1368a4c3875f96
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
3. Dockerfile
// Dockerfile
FROM openjdk:17-ea-jdk-slim
VOLUME /tmp
COPY target/user-service-1.0.jar UserService.jar
ENTRYPOINT ["java", "-jar", "UserService.jar"]
// 클린, 컴파일, 빌드를 함
$ mvn clean compile package -DskipTests=true
// jar 파일 확인
PC@DESKTOP-IQVPSQI MINGW64 ~/Desktop/project/msaproject/user-service (master)
$ ls -l ./target/
// .은 현재 디렉토리 dockerfile 사용
$ docker build -t noory/users-service:1.0 .
// 업로드
$ docker push noory/user-service:1.0
// 다운로드
$ docker pull noory/user-service:1.0
// 이미지 삭제
$ docker rmi imageID
// 이미지 다운로드
$ docker pull noory/user-service:1.0
// 실행, 실행은 되지만 같이 켜져야 하는 서버들이 없기때문에 오류가 당연히 난다
$ docker run noory/user-service:1.0
'Java > Spring Boot' 카테고리의 다른 글
[MSA] Spring Cloud로 MSA를 개발해보자 15편 [배포] (0) | 2024.09.15 |
---|---|
[MSA] Spring Cloud로 MSA를 개발해보자 13편 [모니터링] (3) | 2024.09.12 |
[MSA] Spring Cloud로 MSA를 개발해보자 12편 [장애 처리, 분산 추적] (0) | 2024.09.09 |
[MSA] Spring Cloud로 MSA를 개발해보자 11편 [Kafka-2] (0) | 2024.09.06 |
[MSA] Spring Cloud로 MSA를 개발해보자 10편 [Kafka-1] (0) | 2024.09.01 |