728x90
개념
- 나만의 이미지를 만들기 위한 설계도
- 각 프로젝트 폴더(frontend, backend 등)마다 가지고 있어야 하는 파일
- 레시피
- FROM, WORKDIR, ENV, RUN, COPY, CMD
[실습 1]
1. Frontend(node.js)
프로젝트 폴더 내 Dockerfile
FROM node:12.18.4 # 이미지 생성 과정에서 실행할 명령어 # node.js니까 npm 명령어 사용 RUN npm install -g http-server # 이미지 내에서 명령어를 실행할(현 위치로 잡을) 디렉토리 설정 # 아래 명령어가 해당 디렉토리에서 실행됨 WORKDIR /home/node/app # 컨테이너 실행시 실행할 명령어 CMD ["http-server", "-p", "8080", "./public"]
- RUN과 CMD 차이점 구분하기
> docker build -t node .
> docker run --name frontend-img -v %cd%:/home/node/app -p 8080:8080 node
- Dockerfile과 같은 디렉토리에서 명령어 실행
- build -t : 이미지 생성 명령어
- . : Dockerfile 이름이 Dockerfile일 경우 따로 명시 안 함
2. Database(mysql)
Dockerfile
FROM mysql:5.7 # 이미지 환경변수들 세팅 # 실전에서는 비밀번호 등을 이곳에 입력하지 말 것! # 서버의 환경변수 등을 활용하세요. ENV MYSQL_USER mysql_user ENV MYSQL_PASSWORD mysql_password ENV MYSQL_ROOT_PASSWORD mysql_root_password ENV MYSQL_DATABASE visitlog # 도커환경에서 컨테이너 생성시 스크립트를 실행하는 폴더로 미리 작성된 스크립트들을 이동 # mysql은 아래 폴더 안의 SQL 파일들에 적힌 쿼리 명령들을 실행하도록 설계되어 있음 # Volume과 차이점 주의 COPY ./scripts/ /docker-entrypoint-initdb.d/
> docker build -t {이미지명} .
> docker run --name {컨테이너명} -it -p 3307:3307 {이미지명}
또는
> docker run --name {컨테이너명} -d -p 3307:3307 {이미지명}
- -d : demon. 안 보이는 곳에서 알아서 컨테이너 깔고 돌려라.
3. Backend(python)
Dockerfile
FROM python:3.8.5 # 이미지 생성 과정에서 실행할 명령어 RUN pip3 install flask flask-cors flask-mysql # 이미지 내에서 명령어를 실행할(현 위치로 잡을) 디렉토리 설정 WORKDIR /usr/src/app # 컨테이너 실행시 실행할 명령어 # backend.py로 서버를 실행함 CMD ["python3", "backend.py"]
> docker build -t {이미지명} .
> docker run --name {컨테이너명} -v $(pwd):/usr/src/app -p 5000:5000 {이미지명}
[실습 2]
1. Backend(python)
Dockerfile
# pull official base image # 알파인 리눅스를 기본으로 python:3.8을 받아라 FROM python:3.8.0-alpine # set work directory # 우리가 작업할 공간 WORKDIR /usr/src/app # set environment variables # 파이썬의 바이트 코드 환경변수 설정 ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 # apk : 알파인 리눅스에서 패키지를 다운받는 명령어 RUN apk update # 설치 파일들 설치해라 RUN apk add postgresql-dev mariadb-dev gcc python3-dev musl-dev zlib-dev jpeg-dev #--(5.2) # 현재 파일을 /usr/src/app에 복사해 COPY . /usr/src/app/ # install dependencies # pip 설치해 RUN pip install --upgrade pip # rquirements.txt 설치해 # 현재 파일을 복사하므로 requiremets.txt 파일 준비 RUN pip install -r requirements.txt
> docker build -t {이미지명}:{태그명} ./
> docker run -it encore:0.1
2. Web Server(apache)
Dockerfile
FROM ubuntu:14.04 MAINTAINER encore LABEL "purpose"="practice" RUN apt-get update #apache 설치 RUN apt-get install apache2 -y #test.html을 /var/www/html에 복사' #현재 디렉터리에 test.html있어야 함 ADD test.html /var/www/html #작업디렉터리 WORKDIR /var/www/html #명령어 실행 RUN ["/bin/bash", "-c", "echo hello >> test2.html"] #외부포트 80 EXPOSE 80 #백그라운드 실행 CMD apachectl -DFOREGROUND
> docker run -d -P --name {컨테이너명} {이미지명}
- -P : 컨테이너의 현재포트를 80과 연결
배포
> docker run -it --name {컨테이너명} {이미지명}:{태그명}
> docker commit -a '{이름}' -m '{dev_env}' share_test {이미지명}:{태그명}
> docker save -o {파일이름(dev.tar)} {이미지명}:{태그명}
> docker load -i ./{파일이름(dev.tar)}
- save -o : dev:first 이미지를 dev.tar 파일로 만들어라
- load -i : tar 파일을 읽어줘
'두두의 IT' 카테고리의 다른 글
Docker에 Spring Boot 컨테이너 띄우기 (0) | 2022.03.14 |
---|---|
도커 컴포즈 파일(docker-compose.yml) 개념/작성/실행 (0) | 2022.03.12 |
도커 명령어(pull, create, start, attach, commit, run, stop, images, ps, exec, rm, container, volume, inspect, logs) (0) | 2022.03.12 |
쿠버네티스 / 도커 / 도커 허브 / 도커 이미지 / 도커 컨테이너 / 도커 볼륨 (0) | 2022.03.12 |
Spring / Spring Boot / Gradle 용어 정리 (0) | 2022.03.07 |