- 도커2024년 11월 22일
- chantleman
- 작성자
- 2024.11.22.:03
virtual box같은 가상머신은 왜 나왔을까?
- 물리적 자원을 효율적으로 활용하기 위해Docker
컨테이너라는 격리된 환경에서 애플리케이션 실행
이미지
애플리케이션 실행에 필요한 모든 파일을 포함하는 패키지
컨테이너를 생성하기 위한 템플릿
파일 시스템, 소스코드, 라이브러리, 환경 설정등을 담고있음
읽기전용으로 구성
여러개의 레이어로 구성되어있어 효율적으로 공유할 수 있음
Dockerfile을 통해 정의되고 빌드됨
컨테이너
애플리케이션과 그 종속성을 포함하는 경량화된 패키지
이미지를 실행한 격리된 프로세스 환경
이미지를 기반으로 생성되며 실제로 애플리케이션이 동작하는 환경
격리된 환경에서 실행되는 프로세스 그룹
파일 시스템, 네트워크, 프로세스 트리 등이 격리돼있음
호스트 운영체제의 커널을 공유하면서도 서로 독립적으로 동작
프로세스
컨테이너 내에서 실행되는 애플리케이션
메모리, cpu 시간 등의 시스템 리소스 사용
이미지는 프로그램과 같고, 컨테이너 내 실행되는 프로세스는 그 프로그램의 인스턴스와 유사함
하나의 이미지로 여러개의 컨테이너(프로세스)를 생성할 수 있음
컨테이너가 실행되면 이미지 기반의 파일 시스템이 읽기/쓰기 가능한 상태가 되어 프로세스가 동작함
기본 단계
1. docker hub에서 이미지를 가져온다(pull)
2. 이미지를 실행하여 컨테이너를 생성한다 (run)
3. 필요한 경우 자체 이미지를 빌드한다(build)
어쨌든 개발자는 이미지를 잘 가져다 쓰는 것이 중요!!
docker version
클라이언트, 서버 다 나와야함
도커 허브 가입
검색하면 이미지들이 나옴
cmd에서도 다 가능 !
docker login //도커 계정 로그인 docker search //검색 docker search --limit 3 mysql //mysql 검색해서 3개만 출력 docker ps -a //도커로 동작하는 프로세스 확인
도커명령
//도커 허브에서 우분투 이미지를 가져오기(다운). docker pull ubuntu:latest가 디폴트 docker pull ubuntu //가져온 것 확인 docker image ls //우분투 실행 (interactive할 ubuntu terminal을 실행시켜라) docker run -it ubuntu //프로세스 확인 (exited는 실행 안되고있는 것임!) docker ps -a //컨테이너 이름으로 해당 포트번호로 이미지를 실행한당 //원래는 pull을 먼저 하고하는 것을 권장하지만 pull하지 않아도 아래처럼 하면 이미지가 알아서 가져와짐 docker run -d --name 이름 -p 호스트포트번호:컨테이너포트번호 이미지명:버전 //:버전 혹은 :latest는 쓰지 않아도됨. 하지만 톰캣은 9.0으로 한정돼있음 docker run -d --name jinchance -p 8666:8080 tomcat:9.0 //멈추기 (컨테이너 id, 이름은 docker ps -a로 확인) docker stop 컨테이너id 혹은 컨테이너이름 docker stop jinchance //시작 docker start 컨테이너id 혹은 컨테이너이름 //프로세스에서 지우기 docker rm 컨테이너이름 //이미지 확인 docker image ls //이미지 지우기 docker image rm 이미지id //컨테이너 실행시키기(컨테이너 내부 접근) //컨테이너 상태를 디버깅하기 위한 용도로 주로 사용됨 docker exec -it 컨테이너이름 /bin/bash //컨테이너 내부에 다시 접근 //exec와 달리 attach는 처음 컨테이너를 run 할때 /bin/bash를 지정해주지 않으면 bash shell 접근 불가능 docker attach 컨테이너이름 //파일1을 파일2로 copy docker cp 호스트에있는파일명1.확장자 컨테이너명:/컨테이너 안 경로/파일명2.확장자 docker cp jinmo.txt jinchance:/home/merong/sumin.txt
이미지 만들기
vscode에서 cmd 터미널에서 아래 코드 실행
npm create vite@latest cd 프로젝트명 npm install npm run dev
vite.config.js
import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; // https://vite.dev/config/ export default defineConfig({ base: "/", server: { port: 8282, strictPort: true, host: true, }, plugins: [react()], });
여기에서 설정한 포트는 실제 포트번호
Dockerfile
#docker build 명령이 읽어가는 파일 # node 이미지 기반 Docker 이미지 생성 #cmd에서 node -v로 버전 확인 FROM node:20.18.0 # 작업 디렉토리 설정 WORKDIR /app # COPY <복사할 경로/파일명> <붙여넣을 디렉토리> # package 파일을 app 폴더에 붙여넣기 COPY package*.json . # 의존성 설치 명령어 실행, 여기서 렉이 걸릴수도 # 처음은 시간 오래 걸리닝, 맘 비우고 딴 일 하다 오삼, 난 10분 걸렸낭? # 2번째 부터는 빠름 RUN npm install --verbose # 현재 디렉토리의 모든 파일을 도커 컨테이너의 작업 디렉토리(app폴더)에 복사 COPY . . # 8282번 포트 노출 EXPOSE 8282 # npm run dev 스크립트 실행 CMD ["npm","run","dev"]
여기에서 설정한 포트는 도커에서 여는 포트번호
.dockerignore
node_modules .gitignore
dockerize 하기 위해 이 세개의 파일을 프로젝트 가장 최상위 폴더에 dockerfile넣기
cd로 프로젝트 경로로 이동후 cmd 터미널에서 아래 코드 실행하면 컨
docker build . -t 레파지토리:태그 docker build . -t chantleman:manse
docker run -d --name chance -p 8666:8282 chantleman:manse
docker ps docker image ls
를 실행하면 image에 jinwoo:small이 추가된 것 확인
docker start chance docker stop chance
start를 하고 url에 localhost:포트번호를 입력하면 이미지 실행
stop하면 중지
docker ps //컨테이너 id 확인 //docker export -o 파일명.tar 컨테이너id <- 파일.tar를 컨테이너에서 export docker export -o chanee.tar 컨테이너id //tar파일 찾기 dir *.tar //이미지 파일 목록 확인 docker image ls //docker import 파일명.tar 파일명2:태그 <- 파일.tar을 파일2로 import docker import chanee.tar chantle:manmanse docker image ls json 포맷으로 이미지 구성 정보 확인 docker image inspect 컨테이너id
728x90'도커 aws' 카테고리의 다른 글
aws docker 주요용어 (0) 2024.07.19 오라클 docker 설치 (0) 2024.07.01 다음글이전글이전 글이 없습니다.댓글