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/
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편 [모니터링] (1) | 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 |