도커 알아둘 것
docker-compose.yml
version: '2.3'
services:
main:
build:
context: ./
dockerfile: Dockerfile
runtime: nvidia
restart: always
env_file:
- "docker-compose-env/main.env"
volumes:
- ./data/:/data
expose:
- "8000"
- "22"
ports:
- "10000:8000"
- "10022:22"
stdin_open: true
tty: true
Dockerfile
FROM nvidia/cuda:11.6.1-cudnn8-devel-ubuntu20.04
ENV TZ Asia/Seoul
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get -y install python3 \
python3-pip \
python3-dev \
git ssh vim
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
RUN ln -s /usr/bin/python3 /usr/bin/python
RUN echo "root:password" | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes #prohibit-password/' /etc/ssh/sshd_config
RUN pip install --upgrade pip
RUN pip install setuptools
WORKDIR /workspace
ADD . .
RUN chmod -R a+w /workspace
EXPOSE 8000
Dockerfile 과 Docker-compose.yml의 차이점
dockerFile과 docker-compose.yml 의 차이점 (velog.io)
dockerFile과 docker-compose.yml 의 차이점
도커를 공부하다보니 궁금한 점이 생겼다. 원하는 어플리케이션을 도커에 띄울 때 dockerFile을 사용하기도 하고 docker-compose.yml을 사용하기도 한 다. 왜 둘이 분리해놓은 것일까? 다른 점은 무엇일
velog.io
8. Dockerfile 과 Docker-compose.yml (tistory.com)
8. Dockerfile 과 Docker-compose.yml
1. Dockerfile 1) 목적 - base image 파일로 수정된 image 만드는 일련의 과정들을 정리해 놓은 파일 입니다. - docker는 Dockerfile을 이용하여 손쉽게 동일한 이미지를 반복해서 만들수 있습니다. 2) 문법 #FROM
doitnow-man.tistory.com
Dockerfile : Docker 이미지 설정 파일. 여기에 설정된 내용대로 이미지를 생성
docker-compose.yml : 앱이 실행되는 동안 컨테이너 관리
두 번째 링크에 어느 정도가 정리된 상태. docker-compose.yml의
1) 목적
- 연결된 다수의 container를 하나로 통합하여 관리 하는 도구
2) 유의 사항
- docker-compose는 host level에서만 동작 합니다.
- docker swarm에 배포 하기 위해서는 docker stack deploy를 사용 해야 합니다.
3) docker-compose.yml
- container실행 옵션을 미리 정의한 문서 입니다.
- docker-compose를 docker-compose.yml에 정의된 데로 container를 실행 합니다.
4) 설치
- apt-get install docker-compose
#버전 정의
# 버전에 따라서 지원하는 형식이 다릅니다.
version: '3.0'
#service 정의
# docker-compose로 생성 할 container의 옵션을 정의 합니다.
# service안의 container들은 하나의 project로서 docker-compose로 관리 됩니다.
services:
#생성 할 container 이름을 지정 합니다.
container-이름:
#container 생성시 사용 할 이미지 지정
image: node-server:v1
#build 옵션
# docker-compose build 옵션에서 사용 됩니다.
# dockerfile에 명시된 FROM의 image를 사용하여 위에 명시된image 이름과 tag로 새로운 image를 생성 합니다.
build:
#dockerfile의 위치를 지정 합니다.
context: .
#container port mapping 정보
ports:
- "80:80"
#EXPOSE
# 도커 컨테이너가 실행되었을 때 요청을 기다리고 있는(Listen) 포트를 지정합니다. 여러개의 포트를 지정할 수 있습니다.
expose:
- "80"
#환경 변수 리스트를 정의
environment:
UPDATE_URL: "https://www.doitnow-man.com"
#실행 환경 설정
stdin_open: true #docker run -i
tty: true #docker run -t
entrypoint: /bin/bash #exec /bin/bash
위는 일종의 docker-compose.yml 포맷이라 함.
이전에 제공받은 것
docker-compose.yml
version: '2.3'
services:
main:
container_name: RoadView_datagen
build:
context: ./
dockerfile: Dockerfile
restart: always
env_file:
- "docker-compose-env/main.env"
volumes:
- type: volume
source: nfs_shared
target: /nfs_shared
volume:
nocopy: true
- "/media/mmlab/hdd:/hdd"
expose:
- "8000"
ports:
- "40000:22"
- "40050:6006"
- "40100:8000"
ipc: host
stdin_open: true
tty: true
volumes:
nfs_shared:
driver_opts:
type: "nfs"
o: "addr=mldisk.sogang.ac.kr,nolock,soft,rw"
device: ":/volume3/nfs_shared_"
Dockerfile
FROM nvidia/cuda:11.6.0-cudnn8-devel-ubuntu20.04
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install python \
apt-utils \
python3-pip \
python-dev \
git vim \
openssh-server
RUN DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata
RUN pip install --upgrade pip
RUN pip install setuptools
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes #prohibit-password/' /etc/ssh/sshd_config
WORKDIR /workspace
ADD . .
ENV PYTHONPATH $PYTHONPATH:/workspace
# RUN pip install -r requirements.txt
RUN chmod -R a+w /workspace
Docker의 port 번호에 관해...
[Docker] ports와 expose의 차이 (tistory.com)
[Docker] ports와 expose의 차이
개발, 배포, 운영에 큰 장점이 있는 가상화/컨테이너 애플리케이션인 도커(docker)는 그 이점들이 있기 때문에 최근 많이 사용이 되고 있습니다. 도커를 사용함에 있어서 초보자들에게 매우 헷갈
growd.tistory.com
docker-compose.yml을 보면 expose와 ports가 있는 것을 볼 수 있다.
expose는 하나의 번호로 구성되어 있고, ports는 ###:NNN 로 구성되어 있으며, 여러개가 있을 수 있는 것으로 보임. 이 때
호스트 : 도커를 설치한 호스트를 뜻함. 따라서 나의 경우는 내가 할당받은 서버 mango.
expose : 호스트 내부의 다른 컨테이너만 액세스 가능
따라서, 도커 내부에서 컨테이너 간의 통신만 필요한 경우에 쓰임.
ports : ports에 설정한 호스트 포트번호로 호스트 외부의 다른 호스트도 액세스가 가능.
따라서, 파이참을 보면 SSH 연결 시, Host의 ports를 기입하라고 나오는데, 이 때 ###를 넣는 것으로 보임.
도커를 설치한 호스트의 ###를 컨테이너의 NNN에 연결하는 방식이니, 파이참의 한 프로젝트를 Host의 ###과 연결하면, 그 ###는 마치 파이프라인처럼 NNN과 연결되니 그곳으로 연결되는 것.
15. [Docker] 도커에서 Container 포트와 Host 포트의 개념 : 네이버 블로그 (naver.com)
15. [Docker] 도커에서 Container 포트와 Host 포트의 개념
Docker를 처음 접하는 사람이라면 응당 리눅스를 사용할 것이고, 포트에 대한 개념도 알고 있을 것이다. ...
blog.naver.com
0.0.0.0:40000->22/tcp, :::40000->22/tcp, 0.0.0.0:40050->6006/tcp, :::40050->6006/tcp, 0.0.0.0:40100->8000/tcp, :::40100->8000/tcp
위의 PORTS는 아래로부터 기인한다.
expose:
- "8000"
ports:
- "40000:22"
- "40050:6006"
- "40100:8000"
말 그대로 ###:NNN 의 형태를 띠고 있는 것을 볼 수 있다.
그런데 내가 직접 다른 것을 작성한 결과, 이상한 결과를 획득했다.
expose:
- "5565"
ports:
- "5565::5565"
0.0.0.0:49154->5565/tcp, :::49154->5565/tcp
49154는 대체 어디서 튀어나온 거임?
아무래도 expose와 ports의 ###는 서로 다르게 해야 하는 건지도?
추후 수정. yaml파일 작성법이 뭔가 잘못 되어있었나봄.
그리고 파이참과 연결하려면, NNN을 무조건 22로 하고 파이참엔 22를 넣어야 함.