[ Container란? ]
Linux 기반의 기술 중 하나로 필요한 라이브러리와 어플리케이션을 모아 별도의 서버처럼 구성한 것
[ Docker란? ]
Go 언어로 작성된 Linux 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼
다음 명령어를 통해 도커가 잘 설치 되었는지 확인할 수 있다.
// 존재하는 이미지를 확인할 수 있다
$ docker images

원하는 이미지 검색 후 오른쪽 명령어로 이미지를 다운받을 수 있다.
$ docker pull node
[ Docker 기본 명령어 ]
$ docker rmi 이미지이름(이미지ID)
// 해당 이미지를 이용하여 임의의 이름으로 컨테이너가 생성된다
$ docker run 이미지이름
// 컨테이너의 이름을 지정해줄 수도 있다
$ docker run --name 컨테이너이름 이미지이름
$ docker start 컨테이너이름(컨테이너ID)
$ docker stop 컨테이너이름(컨테이너ID)
$ docker rm 컨테이너이름(컨테이너ID)
// 현재 실행중인 컨테이너 목록
$ docker ps
// 모든 컨테이너 목록
$ docker ps -a
[ MySQL 이미지로 컨테이너 만들어보기 ]
-d 백그라운드에서 컨테이너 실행
-p 호스트 포트 : 컨테이너 포트 (호스트 포트와 컨테이너 포트를 연결)
// MySQL은 실행 시 환경변수 설정을 꼭 해줘야 한다
// 외부에서 3308번 포트로 접속하면 컨테이너의 3306번 포트에 접속이 된다
$ docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql-container mysql
[ Dockerfile이란? ]
[ Dockerfile로 이미지 만들기 ]
Dockerfile
FROM mysql
ENV MYSQL_ROOT_PASSWORD=1234
EXPOSE 3306
이미지 만들기
$ docker build -t 이미지이름 도커파일경로
// docker build -t mysql .
// 현재 위치에 있는 도커파일로 mysql이라는 이미지를 생성한다
[ Dockerfile로 코드 실행하기 ]
index.js
const express = require("express");
const app = express();
app.get('/', (req, res) => {
res.send(req.query.name);
})
app.listen(8000, () => {
console.log("Server is open, port: 8000");
})
Dockerfile
# 부모 이미지 지정 (node 16버전)
FROM node:16
# 작업 디렉토리 생성
WORKDIR /app
# 현재 위치 / 작업할 컨테이너 위치
COPY . /app
# 패키지 설치
RUN npm install
# 실행 포트
EXPOSE 8000
# node index.js
CMD [ "node", "index.js" ]
이미지 만들기
$ docker build -t node_image .
컨테이너 생성
$ docker run --name node_project -p 8080:8000 node_image
[ React 도커 파일 ]
FROM node
WORKDIR /app
COPY . /app
EXPOSE 3000
RUN npm install
CMD [ "npm", "start" ]