- 도커란
-> 리눅스에서 제공하는 컨테이너를 이용하여 애플리케이션을 묶어서 실행, 배포 할 수 있게 해주는 오픈소스SW
-> 개발, 테스트, 서비스 서버 등의 다양한 환경을 쉽게 관리 할 수 있게 해줌
- 도커의 장점
-> 기존 가상 머신에 비해 성능 오버헤드가 적음
-> 빠르고 쉬운 애플리케이션 배포
-> 이미지 버젼 관리 쉬움
-> 각 컨테이너 사이에 독립적인 동작 환경 제공
- 기존 방식(가상 머신)
-> OS를 가상 머신마다 중복으로 설치하기 때문에 이미지 크기가 커짐
-> 이미지가 커서 네트워크로 배포하는 것이 어려움
-> 배포 및 버전 관리가 어려움
=> OS를 포함하고 있어 용량이 크기때문에 네트워크를 통해 배포하기가 어려움
=> 이미지의 버전관리 즉 변경사힝 추적이 거의 불가능
-> 가상 머신은 OS안에 OS를 포함하여 가상화하여 매우 느리고 비효율적임
- 컨테이너(위의 문제를 해결)
-> OS를 중복으로 설치하지 않아 이미지 크기가 작고 배포에 용이
-> OS를 가상화하지 않고 직접 호스트의 OS 자원을 사용하기 때문에 가상머신에 비해 월등히 빠름
- 이미지와 컨테이너
-> 서버 구성에 필요한 파일들을 묶어 놓은 것
-> 실행 파일, 라이브러리, 설정 파일 등을 포함
-> 배포의 단위로 저장소에 올리고 받을 수 있음(push/pull)
-> 컨테이너는 이미지를 실행한 형태
-> 실행파일과(이미지) 프로세스(컨테이너)의 관계
- 도커 설치(Window)
https://www.docker.com/products/docker-desktop
Docker Desktop for Mac and Windows | Docker
Learn why Docker Desktop is the preferred choice for millions of developers building containerized applications. Download for Mac or Windows.
www.docker.com
-> 도커 데스크탑 설치 오류(WSL2) 발생시
WSL 2 installation is incomplete, 윈도우10 도커 설치시 리눅스 커널 업데이트, Docker Linux Kernel Update on Windows 10

1. 파워쉘 관리자권한으로 실행
2. 리눅스 서브시스템 활성 명령어 입력
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
3. 가상 머신 플랫폼 기능 활성화 명령어 입력
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
4. x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지 다운로드, 설치
wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
5. Docker Desktop - Restart
-> 재시작 없어도 윈도우 재부팅하기
- 도커 개발환경 설정
- 도커 버전 확인
docker -v
- 테스트용 Hello world 도커 컨테이너 실행
docker run hello-world
// "Hello from Docker!" 메시지 출력되면 성공
// 도커 이미지만 다운로드시
docker pull hello-world
- 도커 기본 명령어 실습
- 컨테이너 조회
docker ps -a
// -a 옵션은 실행 종료된 컨테이너까지 조회
- Hello world 컨테이너 삭제
docker rm [컨테이너 ID 또는 NAME]
- 도커 이미지 조회
docker images
- Hello world 도커 이미지 삭제
docker rmi [이미지 ID 또는 이미지명:TAG 명]
//latest태그명은 생략 가능
//프로젝트 코드 다운로드 git clone
- FE 도커이미지 제작(영화프로젝트 - Vue.js)
1. 로컬에서 FE 실행 및 웹 브라우저로 접속(http://localhost:8080) 확인
yarn install
yarn serve
2. Dockerfile 작성
# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
RUN npm run build
# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
3. 도커 이미지 빌드
docker build -t vue-app .
// . -> Dockfile 위치
//실행 이미지 확인
docker images
//docker container 실행
docker run -it -p 8080:80 --rm --name vue-app-1 vue-app
//실행된 컨테이너 확인
docker ps
//docker container 정지
docker stop vue-app-1

- 이미지 TAG 추가/ 삭제
docker tag front:0.1 front:latest
docker rmi front
Untagged: front:latest
- BE 도커 이미지 제작(data visualization - Node.js)
1. Dockerfile 생성
FROM node:12-alpine
WORKDIR /app
COPY package*.json /app
RUN npm install
COPY . /app
CMD [ "npx", "nodemon", "serve" ]
EXPOSE 8080
1. Docker Hub에 있는 node:12-alpine 이미지 사용
2. 이미지 안에 애플리케이션 코드를 넣기 위한 디렉터리 생성. 애플리케이션의 작업 dir가 된다
3. node:12 이미지에 node.js와 npm은 설치되어 있으므로 npm바이너리로 앱 의존성만 설치
4. npm 설치 (RUN은 새로운 레이어 위에서 명령어를 실행 주로 패키지 설치용)
5. Docker 이미지 안에 앱의 소스코드를 넣기 위함
6. CMD는 도커가 실행될때 실행되는 명령어를 정의
7. 8080번 포트로 실행
2. .dockerignore파일 생성
-> Docker image의 파일 시스템의 node_modules 디렉토리가 현재 로컬작업 디렉토리의 node_modules 디렉토리로 덮어지지 않도록 하기 위함.
node_modules
npm-debug.log
3. 도커 이미지 빌드
docker bulid -t node-docker-test .
docker images
docker run -it -p 5000:8080 --rm --name node-docker-test-1 node-docker-test
//host포트 5000로 들어온는 트래픽을 container의 포트 8080으로 포워딩
docker ps
docker stop node-docker-test-1
docker ps // 실행중인 컨테이너 조회
docker ps -a // 중지중인 컨테이너까지 모두 조회
docker images // 이미지 조회
docker rm 컨테이너ID // 컨테이너 삭제, 중지된 것만 삭제가능
docker stop 컨테이너ID // 컨테이너 중지
docker rmi 이미지명 // 이미지 삭제
docker start 컨테이너ID // 컨테이너 시작
docker restart 컨테이너ID // 컨테이너 재부팅
docker attatch 컨테이너ID // 실행 중인 컨테이너에 접속
- 최종 실행 확인 (data visualization PJT - Vue.js/ Node.js)
docker build -t node-docker-test .
docker run -it -p 8080:8080 --rm --name node-docker-test-1 node-docker-test
docker stop node-docker-test-1
docker build -t vue-docker-test .
docker run -it -p 8081:80 --rm --name vue-docker-test-1 vue-docker-test
docker stop vue-docker-test-1'참고' 카테고리의 다른 글
| [WEB에서 Rendering 기술 차이] CSR vs SSR (0) | 2021.12.27 |
|---|---|
| 라즈베리파이 와이파이 연결불가 해결법(conf파일 수정해도 안될때) (0) | 2021.11.23 |
| [리눅스쉘 명령어/ 단축키] (0) | 2021.09.26 |
| 메모리크기, 시간복잡도 (0) | 2021.08.25 |