일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로필사진 업로드
- original set
- json to db
- 댓글지우기
- 프론트엔드
- 개인페이지
- 와이어프레임
- 딥러닝
- js
- 이진 논리 회귀
- class view
- Django
- 팀프로젝트 기획
- DRF
- CNN
- python to json
- API명세
- ERD
- 팔로우 기능 에러
- 장고
- test.py
- docker
- 다항 논리 회귀
- 비밀번호 수정
- 댓글쓰기
- Python
- serializer
- 북마크한 목록 가져오기
- 백엔드
- 머신러닝
- Today
- Total
코딩 개발일지
docker의 기본 (사용법 / port forwarding / Dockerfile) 본문
ssh란 : 네트워크 상에 존재하는 다른 컴퓨터에 접근하거나 파일을 업/다운로드 하는 등의 작업을 할 수 있는 프로토콜
ssh 연결 하는법
1. git bash 실행
2. pem파일 있는 곳으로 이동
3. ssh -i pem파일이름 ubuntu@Public IPv4 address
4. sudo apt update
(aws에 로그인 후 ssh에 연결하면, sudo apt update 무조건 먼저 해주기 !!!!)
※ docker 명령어 앞에는 무조건 sudo 붙여야 정상 작동함 !!!! ※
docker : 다양한 어플리케이션을 컨테이너 환경에서 테스트 및 배포할 수 있는 소프트웨어 플랫폼
- docker를 사용하는 이유 :
docker를 사용할 경우 다양한 어플리케이션을 쉽고 빠르게 배포할 수 있다.
컨테이너는 각각 독립적인 환경에서 구동되기 때문에 안정적인 운영이 가능
docker 이미지를 통해 동일한 환경을 가진 컨테이너를 쉽게 생성하고 관리할 수 있다.
docker 사용법
1. sudo apt update 이후에 sudo apt install docker.io -y : 패키지 설치
2. sudo docker --version : 설치 확인
3. sudo docker run -d -p 80:80 httpd:latest : 컨테이너 생성
sudo docker ps # 실행중인 컨테이너 목록 확인하기
# CONTAINER ID : 컨테이너가 가지고 있는 고유한 id
# IMAGE : 컨테이너가 생성될 때 사용된 이미지
# COMMAND : 컨테이너가 생성될 때 실행되는 명령어
# CREATED : 생성 후 경과 시간
# STATUS : 컨테이너 상태
# PORTS : 사용중인 포트
sudo docker ps -a
# -a : 중지된 컨테이너 목록까지 포함해서 모두 확인하기
sudo docker images
# REPOSITORY : 이미지 저장소 이름
# TAG : 이미지 버전
# IMAGE ID : 이미지의 고유한 id
# CREATED : 이미지 생성일(마지막 업데이트 일)
# SIZE : 이미지 용량
sudo docker exec -it $container_id /bin/bash
# $containser_id : sudo docker ps를 쳤을 때 확인되는 container_id를 입력합니다.
# /bin/bash : 컨테이너에 접속할 때 사용되는 쉘을 입력합니다.
# 이미지에 따라 /bin/bash라는 쉘이 존재하지 않을 수 있는데, 이 경우에는 /bin/sh를 사용해 접속합니다.
포트 포워딩(port forwarding) 이란,
이름과 같이, 외부에서 서버의 특정 포트에 접근했을 때 지정한 서비스로 전달해 주는 것을 의미함
version: '3.8' # docker-compose.yml에 사용될 문법 버전을 정의합니다.
services:
example: # 서비스 이름을 지정합니다. 서비스 이름은 컨테이너끼리 통신할 때 사용됩니다.
container_name: example # 컨테이너 이름을 지정합니다.
image: 'httpd:latest' # 컨테이너를 생성할 때 사용될 이미지를 지정합니다.
ports: # 포트포워딩을 설정해줍니다.
- 80:80 # 외부에서 80 포트로 접속했을 때 컨테이너의 80 포트로 연결해줍니다.
restart: always # 컨테이너가 종료됐을 때 다시 실행시켜 줍니다.
docker 컨테이너는 컨테이너가 종료될 때 변경된 데이터는 모두 초기화 된다는 특징을 가지고 있다.
volume 옵션을 사용해 데이터를 보존시킬 수 있다.
- docker volume
docker 엔진이 관리하는 volume을 생성하는 방식
docker volume 방식을 사용해 생성된 volume은 host의 /var/lib/docker/volumes/ 경로에 저장됨
docker에서 가장 권장하는 방식 - bind mount
docker volume 방식과 매우 유사함
docker container를 생성할 때 사용자가 지정한 경로에 데이터가 저장됨
docker 엔진의 관리를 받지 않는 영역이기 때문에 사용자가 직접 파일을 추가/수정/삭제 할 수 있다.
이 방식은 운영에 영향을 미칠 수 있기 때문에 docker volume 방식이 더 권장됨
Dockerfile 이란?
docker 의 이미지를 직접 생성하기 위한 용도로 작성하는 파일.
Dockerfile을 작성할 때는 기본이 되는 이미지를 지정한 후,
특정 패키지를 설치하거나 파일을 추가하는 등의 작업을 통해 사용자가 직접 이미지를 빌드하고 사용할 수 있다
FROM python:3.9.15
# .pyc 파일을 생성하지 않도록 설정합니다.
ENV PYTHONDONTWRITEBYTECODE 1
# 파이썬 로그가 버퍼링 없이 즉각적으로 출력하도록 설정합니다.
ENV PYTHONUNBUFFERED 1
# /app/ 디렉토리를 생성합니다.
RUN mkdir /app/
# /app/ 경로를 작업 디렉토리로 설정합니다.
WORKDIR /app/
# main.py 파일을 /app/ 경로로 복사합니다.
COPY ./main.py /app/
컨테이너를 두 개 이상 띄울 수도 있다.
depends_on 옵션을 사용해 컨테이너간 실행 순서를 컨트롤 할 수 있다.
주석처리된 부분을 꼭 잘 읽어보길 바란다.
version: '3.8'
services:
example1:
container_name: example1
image: 'httpd:latest'
ports:
- 80:80
depends_on:
- example2 # 해당 컨테이너보다 먼저 실행되어야 하는 컨테이너를 지정합니다.
restart: always
example2: # 서비스 이름이 동일하면 컨테이너가 정상적으로 생성되지 않을 수 있습니다.
container_name: example2 # 컨테이너 이름이 동일하면 컨테이너 생성 시 에러가 발생합니다.
build: .
entrypoint: sh -c "python3 main.py"
restart: always
'AI 본 교육 > AI 12주차' 카테고리의 다른 글
장고DRF 이메일 인증 기능( 동기 방식 ) (0) | 2023.11.03 |
---|---|
docker의 기본 (postgresql / gunicorn / 실 배포) (1) | 2023.11.02 |
리눅스(Linux) - AWS - Ubuntu 기본 명령어 (1) | 2023.10.30 |