[Docker]
download
밑 링크를 기반으로 설치할 수 있다.
docker id: jjw314king@gmail.com
docker password: google password
docker username: jangjione
memo
image?
이진수 배열을 통해 디스크 등을 복제한 것이라 이해하면 좋을 듯
what
도커란?
개발자 버전 통일 도구라 이해하면 좋을 듯!
개발에서의
makefile!command (gerneration)
배포자
우선 window에서 docker를 먼저 켜야 한다…
여기서 yourusername은 배포자 본인 docker username
임시 디렉토리 생성
mkdir docker-sharecd docker-sharerequirements.txt 생성 (의존성 담겨 있는 파일: 필수 X)
Flask==2.0.1
docker file 생성
FROM python:3.9-slim WORKDIR /app COPY . . RUN pip install -r requirements.txt EXPOSE 5000 CMD ["python", "app.py"] # python3가 아닌 python으로 수정
.py 파일 생성 (ex. Flask)
vim app.pyfrom flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello from shared Docker image!" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
docker login
docker loginimage build
docker build -t yourusername/myapp .(docker build -t yourusername/myapp:v1 . 버전을 하고 싶을 땐 push할 때도 버전 추가)
image push
docker push yourusername/myapp…
사용자
여기서 yourusername은 배포자 docker id
docker login
docker loginimage pull (run시에 image가 없을 시 자동으로 pull 해주기도 한다)
docker pull yourusername/myapprun
docker run -p 8080:5000 yourusername/myappcommand (removing)
이미지는 docker에 존재하는 컨테이너를 모두 꺼야 지울 수 있다.
(자세한 명령어는 지피티한테 물어보기)
이미지는 모든 컨테이너를 끈 이후에, gui에서 지울 수 있다.
volumn and bind-mount
volumn
host dir랑 별개로 저장 공간을 만드는 것
bind mount
host dir에 의존적인 저장 공간을 만드는 것
version managing
해결해야 할 문제: 1. 버전 관리는 어떻게 해야 하는가? 2. 데이터는 어떻게 병합하는가? 3. merge는 어떻게 하는가?
해결책
- github에서 소스 코드 관리
- main branch에 병합할 정도가 되면 docker를 통해서 각자 관리
[Example]
example (front / back / DB)
전체 구조는 다음과 같다.
project_root/
├── frontend/
│ ├── Dockerfile
│ ├── pubspec.yaml
│ └── lib/
│ ├── main.dart
│ ├── models/
│ │ └── user.dart
│ ├── services/
│ │ └── api_service.dart
│ └── screens/
│ └── home_screen.dart
├── backend/
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── alembic.ini
│ ├── migrations/
│ │ └── versions/
│ ├── app/
│ │ ├── main.py
│ │ ├── database.py
│ │ ├── models/
│ │ │ └── user.py
│ │ ├── schemas/
│ │ │ └── user.py
│ │ └── routes/
│ │ └── user.py
│ └── tests/
└── docker-compose.yml