Docker 노트: 웹 서 비 스 를 실행 하고 미 러 파일 을 구축 합 니 다.

docker 에서 웹 서 비 스 를 실행 합 니 다.
1) nginx 를 예 로 들 어 웹 서 비 스 를 실행 합 니 다.
  • nginx 를 예 로 들 면 nginx 를 실행 하려 면 nginx 미 러
  • 가 있어 야 합 니 다.
  • hub. docker. com 에서 nginx 미 러 를 검색 하면 여러 버 전 을 볼 수 있 습 니 다. 우 리 는 alpine 기반 버 전 (부피 가 작 기 때문에 최신 부피 가 클 것 입 니 다)
  • 을 찾 았 습 니 다.
  • $docker pull nginx:alpine 이때 우 리 는 알파 인 기반 으로 제 작 된 nginx 미 러
  • 를 다운로드 했다.
  • 이 용 기 를 실행 하면 $docker run --rm nginx:alpine 가 걸 립 니 다. nginx 가 계속 서 비 스 를 제공 하기 때 문 입 니 다
  • 저 희 는 나중에 서 비 스 를 하 는 방식 으로 저희 의 nginx 를 운영 합 니 다. $docker run -d --rm nginx:alpine 이 때 터미널 이후 의 서비스 방식 을 사용 하지 않 고 실 행 됩 니 다
  • .
    2) docker 서 비 스 를 실행 하고 포트 노출
  • 우 리 는 기 존의 docker 용 기 를 검사 합 니 다. $docker ps 이 nginx 서비스 가 80 포트 를 차지 하여 서 비 스 를 제공 하 는 것 을 볼 수 있 습 니 다
  • 물리 기기 의 ip 주소 (기본 80 포트) 를 직접 방문 하면 접근 할 수 없습니다. 용기 안에 폐쇄 된 환경 이기 때문에 현재 기계 에 80 포트
  • 를 열지 않 았 습 니 다.
  • 용기 와 물리 기 사이 에 두 가 지 는 분리 되 어 있 습 니 다. 우 리 는 먼저 이 nginx 서 비 스 를 끝 냅 니 다. $docker kill nginx ID
  • nginx 가 노출 된 포트 를 물리 기 에 투사 해 야 합 니 다. $docker run -d --rm -P nginx:alpine 대문자 P 옵션
  • 입 니 다.
  • 용 기 를 다시 봅 니 다. $docker ps 출력 내용 을 발 견 했 습 니 다. 예 를 들 어 0.0.0.0:32768->80/tcp 물리 기기 의 32768 포트 가 docker 용기 의 80 포트
  • 에 비 쳤 습 니 다.
  • 우 리 는 접근 ip:32768 을 통 해 docker 에 있 는 용 기 를 방문 할 수 있 습 니 다. 우 리 는 -P 옵션 을 사용 하 는 의 미 는 물리 기 에 사용 되 지 않 은 포트 와 docker 용기 에 있 는 포트 를 매 핑 하 는 것 입 니 다
  • .
  • 그러나 이와 같은 문제 가 존재 합 니 다. docker 용기 가 다시 실 행 된 후에 포트 는 32768 이 아 닐 수도 있 습 니 다. 다른 것 일 수도 있 습 니 다
  • 만약 에 그렇다면 고정된 포트 가 없 으 면 우 리 는 대외 적 으로 안정 적 인 서 비 스 를 제공 할 수 없다. 우 리 는 실제 응용 에서 다른 옵션 -p 을 사용 할 것 이다. 여기 p 는 소문 자 이 고 우 리 는 스스로 포트
  • 를 지정 할 수 있다.
  • 즉: $docker run -d --rm -p 8080:80 nginx:alpine, 우 리 는 물리 기의 8080 포트 를 용기 의 80 포트 에 연결 합 니 다. 그러면 착란 이 발생 하지 않 을 것 입 니 다
  • 용기 와 용기 사이 의 포트 는 서로 영향 을 주지 않 고 그들 사 이 는 모두 분리 되 어 있다
  • .
  • docker 용기 에서 사용 할 수 있 는 -q 방식 을 조회 합 니 다. 예 를 들 어 $docker ps -q, 실행 용기 의 ID 목록 을 출력 합 니 다
  • .
  • 우 리 는 $docker kill $(docker ps -q) 를 통 해 모든 운행 중인 용 기 를 모두 닫 을 수 있 습 니 다
  • 자신의 docker 미 러 구축
  • docker 에서 $docker build 를 사용 하여 docker 미 러 를 구축 합 니 다
  • 미 러 를 구축 하기 전에 dockerfile 파일 을 작성 하여 새로운 미 러 를 구축 해 야 합 니 다
  • docker 의 공식 문 서 를 조회 합 니 다.https://docs.docker.com/engine/reference/builder/
  • 오른쪽 에 있 는 몇 가지 주요 명령 을 살 펴 보 자. FROM, RUN, CMD, LABEL, COPY
  • WORKDIR: 지정 한 기초 미 러
  • FROM: 구축 과정 에서 수행 해 야 할 명령
  • RUN: 용기 시작 시 실행 해 야 할 명령
  • CMD: 태그, 미 러 에 확 장 된 정 보 를 추가 하 는 데 사 용 됩 니 다. 예 를 들 어 버 전 정보, 관리자 정보 등
  • LABEL: 파일 을 거울 에 복사 하 는 데 사용 합 니 다
  • COPY: 명령 을 설정 하 는 작업 디 렉 터 리
  • 우 리 는 Dockerfile, $WORKDIR
    #   ubuntu,    
    # FROM ubuntu:16.04
    FROM alpine
    LABEL version="1.0"
    LABEL description="my image"
    #   ubuntu     
    # RUN apt update && apt -y install python3
    #   alpine     ,             ,   &&   ,          
    RUN apk update && apk add python3
    #                   code  ,.       
    COPY . /code
    #       
    WORKDIR /code
    #               
    CMD ["python3", "app.py"]
    
  • 를 편집 합 니 다.
  • 같은 디 렉 터 리 에서 python 파일 vi Dockerfile
    print("Hello Python")
    
  • 을 작성 합 니 다.
  • 새로운 미 러 를 구축 하기 시 작 했 습 니 다. $app.py
  • docker build -t myapp .-t 의 줄 임 말
  • 이다.
  • --tag 는 현재 디 렉 터 리 이 고 dockerfile 은 현재 디 렉 터 리
  • 에 있 습 니 다.
  • 구축 완료 후 $. 를 통 해 확인 할 수 있 습 니 다. 하나의 미 러 docker images
  • 가 더 보 입 니 다.
  • 이 미 러 를 실행 하기 시 작 했 습 니 다. $myapp, 출력 docker run --rm myapp
  • 미 러 를 통 해 용 기 를 시작 할 때 가끔 뒤에서 명령 을 따 를 때 가 있 습 니 다. 예 를 들 어 $Hello Python
  • 여기 docker run --rm myapp echo hi 는 dockerfile 에 있 는 CMD 의 내용 과 같 으 며 CMD 의 명령
  • 을 덮어 씁 니 다.
  • 이때 출력 echo hi 이 아니 라 hi
  • 이미 구 축 된 미 러 에서 상세 정 보 를 $Hello Python, 미 러 에서 더 많은 상세 정 보 를 볼 수 있 습 니 다
    "Labels" : {
        "description" : "my image",
        "version": "1.0"
    },
    "Cmd" : [
        "python3",
        "app.py"
    ],
    "WorkingDir": "/code",
    # ... #     
    
  • 우리 미 러 를 구축 할 때 기본 docker inspect myapp:latest 을 사용 하 는 것 이 좋 습 니 다. 그렇지 않 으 면 Dockerfiledocker build 를 사용 하여 파일 이름
  • 을 지정 해 야 합 니 다.

    좋은 웹페이지 즐겨찾기