728x90
반응형
728x90
반응형
반응형

환경: windows11, 아래 설치 진행

2024.02.10 - [서버 세팅 & tool/docker] - [windows] docker; 컨테이너 가상화

 

[windows] docker; 컨테이너 가상화

virtualization 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이션에서 사용할 수 있도록 제공 플랫폼 가상화 리소스 가상화 하이퍼바이저(hypervisor) Virtual machine manager(VMM) 다수의 운영체제를

bangpurin.tistory.com

도커 기본 명령어

docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mysql:5.7
//도커로 mysql:5.7을 백그라운드로 실행하는데 
//포트 포워딩으로 호스트의 3306이랑 도커의 3306이랑 연결
//mysql5.7실행 시 필요한 설정을 -e옵션으로 주고
//이름을 mysql로 설정(아니면 랜덤)

실행 확인

docker ps -a

백그라운드라 로그가 안뜨는데, 지나간 로그를 보려면

docker logs 이름/컨테이너id

잘 뜬건 확인했고 terminal로 실행하려면

 docker exec -it mysql /bin/bash

그러면 터미널로 붙어서 쓰는것과 동일한 효과

여기서  mysql -uroot -p -h127.0.0.1 써서 접속해서 디비 사용하면 됨

삭제 시 중지하고 삭제 해야 

 

서비스를 jar이미지 만들어보기

0. 사용하고자 하는 이미지가 있으면 docker hub에서 확인

1. 아래 경로에 Dockerfile 작성

1-1. Dockerfile 내용물

FROM openjdk:17-ea-slim-buster
VOLUME /tmp
COPY target/user-service-0.0.1-SNAPSHOT.jar user-service.jar
ENTRYPOINT ["java", "-jar", "user-service.jar"]

2. 빌드

1. jar 최신화; Dockerfile 과 동일한 이름으로 jar 생성되었는지 확인 

 mvn clean compile package -DskipTests=true

2. 이미지 올릴 나의 docker hub 계정 확인

3. docker 이미지 만들라는 명령어 실행

맨 마지막에 . 찍어서 현재 폴더임을 나타냄 

 docker build --tag haileyjhbang/user-service:1.0 .

4. repository에 push

docker push haileyjhbang/user-service:1.0

1.0 태그 안주면 latest 를 찾기 때문에 에러가 남 

5. repository 확인 

 

만든 이미지 설치

1. 기존 이미지 삭제(확인 용)

docker rmi 4c828476b26a

2. 이미지 id로 삭제

 docker pull haileyjhbang/user-service:1.0

3. 실행

docker run haileyjhbang/user-service:1.0

728x90
반응형
반응형

환경: windows11

 

virtualization

  • 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이션에서 사용할 수 있도록 제공
  • 플랫폼 가상화
  • 리소스 가상화

하이퍼바이저(hypervisor)

  • Virtual machine manager(VMM)
  • 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼
  • type1(native / bare metal): 하드웨어에 직접 하이퍼바이저를 설치해서 가상화 운영
  • type2(hosted): 하드웨어 위에 os가 있고 그 위세 하이퍼바이저를 설치해서 가상화 운영
    • 보통 사용 방식

OS virtualization; os 가상화

  • host os 위에 guest os 전체를 가상화
  • VMware, VirtualBox
  • 자유도가 높으나 시스템에 부하가 많고 느려
  • 여러 vm을 띄우면 중복적인 리소스가 반복적으로 사용하게 될 수도 있음 

container virtualization; 컨테이너 가상화

  • host os가 가진 리소스를 적게 사용하며 필요한 프로세스 실행
  • 최소한의 라이브러리와 도구만 포함
  • container의 생성 속도 빠름
  • 중복 리소스 제거 가능. 도커 엔진이 가진 리소스 사용

컨테이너 이미지

  • 컨테이너 실행에 필요한 설정 값 모두
  • 이미지 안에 의존성을 이미 다 가지고 있기 때문에 별도 설치할게 없음 
  • 이미지를 가지고 실체화 한 것이 컨테이너 
  • 이미지 저장소: registry
    • public registry: docker hub
    • private registry 운영 가능 
  • 도커 호스트: 이미지를 실행할 수 있는 곳; 레지스트리에서 다운로드한 이미지를 실행 
    • run: create + start

dockerfile

  • 도커 이미지를 생성하기 위한 스크립트 파일 
  • 자체 문법 DSL(domain specific language) 언어 사용하여 이미지를 생성하기 위한 과정을 기술 
  • docker desktop -> docker container 사용

docker desktop download

docker cmd를 사용하기 위해서는 docker desktop을 실행하여 docker daemon을 실행하여야 함

run 해보고 이상없는지 확인하기 위해 아무 cmd 열어서 아래 명령어 입력

docker info

현재 docker가 가지고 있는 image 확인

docker image ls

현재 docker실행중인 container

docker container ls

명령어

  • create
  • start 실행
  • run = create + start 이미지 없으면 다운로드까지
  • tag: version같은 것; 혹은 용도별 마킹/없으면 자동으로 lastest
  • --name 이름 안 넣으면 랜덤 하게 됨; 중복 안됨, --rm 컨테이너 stop 하고 나서, -it iternative terminal,  --link....
  • 호스트=pc 

 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

도커 이미지 관리; 다운로드 가능

docker pull ubuntu:16.04 //down
docker images | grep 16.04 //검색
docker run ubuntu:16.04 //실행 but 바로 종료
docker ps // 도커 컨테이너 실행중인것 확인
docker container ls -a //전체 히스토리 확인
docker container rm 컨테이너ID //컨테이너 삭제
728x90
반응형
반응형

docker vs kubernetes

docker 도커

  • 도커는 환경이 다른 곳에도 같은 환경을 유지할 수 있도록 하는 기술(개발환경과 배포 환경을 동일하게 관리할 수 있음)
  • 1 docker - n isolated containers; 하나의 같은 서버에서 각기 다른 환경의 컨테이너를 설정 가능
  • 원하는 환경을 파일에 저장하면 도커는 어떤 머신에든 해당 환경을 simulate 해줌
  • 이런 환경들은 각기 독립적으로 존재, 어떠한 환경이든 모듈식으로 관리 가능
  • dockerfile(컨테이너를 어떻게 만들어야 하는지 설명서) -> image 생성(세팅 포함; 스냅샷; 변경 불가 불변) -> 컨테이너로 배포(고립된 환경 안에서 실행)
  • 로컬 pc에서 이미지를 PUSH -> container registry에 저장되고 -> 이걸 서버에서 PULL받아서 실행(서버에도 도커와 같이 container engine 설치되어 있어야)

 

kubernetes 쿠버네티스

  • 여러 컨테이너가 있을 때 편하게 관리하게 할 수 있는 도구
  • 어떻게 운영할지 자원으로 정의
  • 자동 확장/축소/zero time patch/모니터링/로드밸런싱 등 제공

 

container vs vm

https://youtu.be/oKri6LxuPUg

   vm 가상서버 container
size 거대한 이미지 사이즈
재사용성 낮음
작은 이미지 사이즈
레이어 개념으로 이미지에 파일을 추가/삭제하여 관리
레이어 사이즈를 최적화하여 이미지 사이즈를 최소화
starting time 느린 부팅시간
hypervisor -os -middleware- 애플리케이션 실행되어야 함 
빠른 시작 시간
os 부팅이 필요없기 때문에(host os 공유) 부팅 시간 최소화(프로세스 시작)
env vm간 환경 불일치
vm생성 후 개별로 변경사항을 관리하기 때문에 vm 간 구성이나 환경이 불일치
높은 이동성
애플리케이션에 필요한 라이브러리나 의존파일을 이미지에 포함하기 때문에 환경에 의한 문제가 거의 없음
  수동확장/수동복구 자동확장/자동복구
728x90
반응형
반응형

환경: docker, mysql8.0.29

 

r2dbc:mysql://localhost:3306/webflux

 

스프링 설정 상, DB url이 위와 같더라도 스프링에서 r2dbc를 사용할 뿐, 인텔리제이 등 다른 DB client에서는 아래와 같이 jdbc로 사용하면 된다.

intellij mysql

연결 후 mysql 명령어를 실행하면 다음과 같은 로그가 지나간다.

mysql        | mbind: Operation not permitted

docker-compose.yml에 위와 같이 security_opt 부분을 추가하고 docker-compose up 으로 다시 구동시키면 에러가 안 난다.

 

https://docs.docker.com/engine/security/seccomp/#run-without-the-default-seccomp-profile

도커 쪽 문서를 보니 seccomp profile이 없을 때 나는 에러인 듯 하다.

728x90
반응형
반응형

환경: docker, mongo 5.0.9

 

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

docker-compose.yml 에 아래와 같이 설정하여 docker-compose up 명령어로 실행 시..

db client tool에서는 아래와 같이 접속을 시도해야한다.

mongodb://nhn:nhn@localhost:3307

유저를 주지 않으면 authentication 에러가 나고, 잘못된 포트를 주면 connection 에러가 난다..

 An error occurred while loading instance info: command hostInfo requires authentication
connect ECONNREFUSED 127.0.0.1:27017

여기서 헷갈렸던 부분이 포트인데, yml에는 3307:27017 이렇게 적혀있어서 왜 저렇게 쓰는지 의문이었는데,

앞 포트(3307)은 외부 노출 포트고 뒤 포트(27017)는 컨테이너 포트인 것 같다.

Expose ports.
Either specify both ports (HOST:CONTAINER), or just the container port (a random host port will be chosen).

어쨋건 mongoDB의 내용을 더 편하게 볼 수 있는 클라이언트(mongo compass)까지 확인 완료.

mongo compass

위 내용은 intellij에서도 확인가능하며 콘솔 명령어로도 조회할 수 있어 더 편리한 것 같다.

intellij

 

mongo db 간단 명령어

# mongo 접속
mongo -u nhn -p nhn

# 현재 로그인 정보
db.runCommand({connectionStatus: 1})

# db list
show dbs
# db change
use webflux
# see table
show tables
= show collections

# table을 collection이라고 부름에 주의
# chat table 조회
db.chats.find()

 

아래 명령어가 정리된 문서가 있는데, collection에 실제 콜랙션 이름을 넣어야 한다. collection은 일반 dbms의 테이블과 같은 용도이다.

https://www.mongodb.com/docs/manual/reference/mongo-shell/

 

mongo Shell Quick Reference — MongoDB Manual

Docs Home → MongoDB ManualYou can retrieve previous commands issued in the mongo shell with the up and down arrow keys. Command history is stored in ~/.dbshell file. See .dbshell for more information.The mongo shell can be started with numerous options.

www.mongodb.com

 

그리고 보다보니 find와 aggregate가 비슷해 보였는데(일반 select절의 where문과 같이 필터링하는 역할) 깊이 보면 차이가 있는 듯하다.

https://secretartbook.tistory.com/21

 

[MongoDB] 확장 검색 쿼리 - Aggregation의 목적 및 작동방식

MongoDB의 Find명령으로는 데이터를 그룹핑해서 특정 조건에 일치하는 도큐먼트의 개수를 확인한다거나 하는 복잡한 처리는 수행할 수 없었다. MongoDB의 Aggregation은 FIND 명령으로는 처리할 수 없는

secretartbook.tistory.com

아직 실제로 막 써보지 않아서 와닿지는 않는다.


https://blog.silnex.kr/dockerdocker-compose-%EC%A0%95%EB%A6%AC/

 

[Docker]docker-compose 정리

Docker Compose 여러 docker를 한번에 up(setup)할때 사용하는 방법이다. yml 파일을 사용하며, docker-compose up명령어로 실행하여 사용할 수 있다. TL;DR version: '{버전}' services: {도커 이름}: driver: {네트워크 이

blog.silnex.kr

 

728x90
반응형

+ Recent posts