맥 OS + 리눅스 뿐만 아니라 맥 OS + 윈도우즈 서버 환경도 같이 지원해야 하는 입장에선 가상환경에 머무는게 최선 맥을 사용하면서 어쩔 수 없이 윈도우즈 어플리케이션을 사용하기 위해 가상화 프로그램을 사용
- 버추어 박스는 몇번 설치한 os가 부팅이 안될정도로 깨진 경우가 있어서 vm을 사용중입니다.
- 괜히 비싼 돈주고 쓰는게 아니죠. VM Ware도 써봤는데, 안정성이나 속도나 편의성이나 패럴에 못미칩니다
- 성능의 패럴렐즈, 범용성의 VMware, 무료의 버추얼박스
무료로 사용
원도우즈와 리눅스 다시 말해 맥을 제외한 거의 모든 컴퓨터 시스템에서 가장 큰 가상화 프로그램 개발사로 페러렐즈와 비교될 수 없는 수준
원도우즈나 리눅스 기반의 가상 프로그램 개발을 포기하고, 맥에 집중
각 프로젝트별로 확실히 분리됨 ⇒ 버전이 달라도 혼란x
- 가상환경
- 도커
효율적으로 환경을 분리할 수 있음 컴퓨터 자원이 낭비되는 부분이 크지 않음
# 컨테이너 생성
docker run [이미지명]
# 동일한 이미성로 컨테이너 2개 생성하기
docker run httpd
docker run --name ws2 httpd# 컨테이너 생성하면서 포트포워딩하기
docker run --name ws3 -p 8081:80 httpd# 컨테이너 생성 + 컨테이너에 대해 상호작용 가능한 터미널 세션을 시작
docker run -it [이미지명]# 컨테이너를 생성
# + 호스트의 8888 포트를 컨테이너의 80 포트로 매핑
# + 호스트의 htdocs 디렉토리를 컨테이너의 htdocs 디렉토리로 매핑
docker run -p 8888:80 -v ~/Desktop/htdocs:/usr/local/apache2/htdocs/ httpd# 실행 중인 특정 컨테이너에 접속
# + 상호작용 가능한 Bash 셸을 시작
# 컨테이너 내부에서 직접 명령어를 실행하거나 디버깅 작업을 수행할 때
docker exec -it [컨테이너명] /bin/bashdocker ps : 실행중인 컨테이너 확인
docker stop ws2 : 컨테이너 중지
docker ps -a :
docker start ws2 : 재시작
docker logs ws2 : 로그 출력
docker logs -f ws2 : 로그의 변화를 실시간 watching 가능
docker stop ws2 : 컨테이너 중지
docker rm ws2 : 컨테이너 삭제
docker images : 이미지 확인
docker rmi httpd: 이미지 삭제도커 이미지를 생성하기 위한 스크립트 파일
여러 키워드를 사용하여 dockerfile을 작성하여 빌드를 보다 쉽게 수행할 수 있음
node 이미지를 다운받고 dockerfile로 내가 원하는 설정을 이미지로 만들어 컨테이너로 쉽게 만들 수 있도록 한다
# 공식 이미지를 개조
FROM openjdk:17-jdk-slim
ARG JAR_FILE=build/libs/app.jar
COPY ${JAR_FILE} ./app.jar
ENV TZ=Asia/Seoul
ENTRYPOINT ["java", "-jar", "./app.jar"]# 공식 이미지를 개조
FROM node: 12.18.4
# '이미지 생성 과정'에서 실행할 명령어 : npm명령어로 http-server를 설치한다
RUN npm install -g http-server
# 이미지 내에서 명령어를 실행할(현 위치로 잡을) 디렉토리 설정
WORKDIR / home/node/app
# 컨테이너 실행시 실행할 명령어
CMD ["http-server", "-p", "8080", "•/public" ]# docker build : Docker 이미지를 생성
# -t [이미지명] : 이미지를 web-server-build라는 이름으로 태그
# . : Docker 빌드 컨텍스트의 위치를 현재 디렉토리로 지정
# 빌드 컨텍스트는 Dockerfile과 이미지 생성에 필요한 모든 파일이 위치한 디렉토리
# 이 명령어가 실행되려면 현재 디렉토리에 Dockerfile이 있어야 함.
docker build -t [이미지명] .RUN : 이미지를 빌드할 때 실행할 명령어
CMD : 컨테이너가 가동될 때 실행할 명령어
CMD 예시
# 공식 이미지를 개조
FROM node: 12.18.4
# '이미지 생성 과정'에서 실행할 명령어 : npm명령어로 http-server를 설치한다
RUN npm install -g http-server
# 이미지 내에서 명령어를 실행할(현 위치로 잡을) 디렉토리 설정
WORKDIR / home/node/app
# 컨테이너 실행시 실행할 명령어
# 컨테이너는 실행 시 이 사이트를 8080으로 송출할 것
CMD ["http-server", "-p", "8080", "•/public" ]- 볼륨 : 연결
# path 디렉토리를 볼륨으로 설정
VOLUME ["/container/path"]- 컨테이너를 실행할 때 호스트의 디렉토리와 매핑하려면 docker run 명령어에서 -v 옵션을 사용
# 호스트의 /host/path 디렉토리를 컨테이너의 /container/path 디렉토리에 마운트
# 호스트 시스템의 파일이 컨테이너에서 사용될 수 있음
# 컨테이너 내부에서 수정된 파일은 호스트 시스템에 그대로 반영
docker run -v /host/path:/container/path my-image- COPY : 복사
- 컨테이너 초기화 과정에 필요해서 이미지 안에 미리 넣어두어야 할 때
- 이미지 빌드 시 정적 파일 추가
- 애플리케이션 코드, 설정 파일, 바이너리 등 정적 파일을 이미지에 포함시키기 위해 사용
- 이 파일들은 컨테이너가 시작될 때 이미 이미지 내부에 존재하게 됨
- 파일 시스템 변경
- Dockerfile에서 이미지를 빌드하는 동안 파일 시스템을 수정하는 데 사용
# 호스트 시스템의 ./scripts를 이미지 내부의 /docker-entrypoint-initdb.d/로 복사
# 이 파일은 이미지 빌드 시점에 컨테이너 파일 시스템에 추가됨
FROM ubuntu:20.04
COPY ./scripts /docker-entrypoint-initdb.d/




















