• Dockerfile
    • (Dockerfile에 도커이미지 빌드를 위한 스크립트 작성)
    • FROM == 베이스 이미지 지정.
    • ENV == 해당 컨테이너가 항상가지는 환경변수.
    • ARG == 입력받을 아규먼트.
    • EXPOSE = 해당 컨테이너에게 오픈할 방화벽 포트.
    • USER == 명령을 실행할 사용자 계정 셋팅.
      • 해당 리눅스 계정의... 권한... 삽질... 하지ㅁㅏ18
      • (root 그리고, 계정과 그룹...)
    • RUN == 명령어 실행.
      • 도커이미지는 Layers구조를 이루고, 도커지시어로 Layer를 추가하는 식이다. 
      • RUN의 경우, 새 Layer에서 실행이 되어~ 새 도커이미지를 형성 할 수 있게 한다.
      • 그래서 당연히, 내부에 특정 SW를 설치하는 용도로 사용하면 된다.
    • CMD == 명령어 실행.
      • 디폴트 명령어 및 파라미터 지정
      • 해당 컨테이너 실행시, 파라미터는 오버라이트 가능
    • ENTRYPOINT == 명령어 실행.
      • 해당 컨테이너가 작동시킬것을 설정한다는... 식
      • 즉, 항상 실행을 할 필요가 있을땐 Entrypoint.
    • 명령어 형식
      • Shell-Form : <instruction> <command>
      • Exec-Form : <instruction> ["executable", "param1", "param2", ...] 
    • ...
  • Docker build 및 tag
    • ex) docker build -t TestImage {Dockerfile경로}
    • ex) docker tag TestImage repo.도커허브.com/계정/TestImage:태그
    • 각 도커이미지의 버젼을 관리하고, 'Layer구조'로 용량을 효율적으로 관리할수있다.
    • tip : 빌드시 에러가 나면... docker images -a 으로 none-image를 지워보았다.
    • tip : 기본적으로 /var/lib/docker 에 image 들이 로컬 저장된다.
  • docker save & load
    • ...
  • aws에서 실습
    • Dockerfile
      • FROM python:3.6-alpine
        COPY . /app
        WORKDIR /app
        RUN pip install -r requirements.txt
        EXPOSE 5000
        CMD ["python3", "main.py"]
    • requirements.txt
      • Flask==1.1.2
    • main.py
      • from flask import Flask
        app = Flask(__name__)
        
        @app.route("/")
        def hello():
            return "Hello"
        
        if __name__ == "__main__":
            app.run(host='0.0.0.0', port=5000)
        
    • docker build -t helloflask ./
    • docker run -d -p 5000:5000 helloflask
    • docker exec -it 아이디 /bin/sh    // (bash확인)
    • docker logs -f 아이디
    • docker tag helloflask:latest 계정.dkr.ecr.ap-northeast-2.amazonaws.com/helloflask:first
    • docker push 계정.dkr.ecr.ap-northeast-2.amazonaws.com/helloflask:first
      • EC2를 받고, 파이선3 환경을 셋팅 및 도커설치
      • 포트 5000이하(privileged port) 오픈실행시, root 권한이 필요?한데... sudo실행하면~ flask모듈을 못찾;;;
      • aws configure : 해당권한 사용자 IAM csv정보를 셋팅해둠!
      • pip install git-remote-codecommit : 깃없이, 편하게 CodeCommit의 GRC 사용하기 위해 설치.
  • ...
  • 삽0) docker.sock 마운트 및 권한
    • ...
  • 삽1) puckle/airflow의 "requirments.txt 지원"이 폐쇠망으로 막히면서 --user 관련...
    • COPY ./requirements.txt /requirements.txt 를 주석처리 -> 해당 local docker-volume 제거 -> 설치안됨 확인.
    • USER root
    • RUN pip install --user --no-cache-dir -r requirements.txt # /rootl/.local 설치하면서 경고
    • USER air
    • RUN pip install --user --no-cache-dir -r requirements.txt # /usr/local/air/.local 설치하면서 경고
    • 뭔가 `USER air` 가 더 깔끔해 보여 -> 배포 -> 어... 설치 안되있네?
    • 혹시 그 경고때문? -> hanja 버져닝 -> 에러 사라김 -> 배포 -> 어... 또 설치 안되있네?
    • 아... puckle/airflow 엔트리포인트 차원에서... /usr/local/air 가  덮어씌어지는거였음... 18
    • pip install -t {별도경로} -> ... -> 난잡하게 삽질만 계속 -> 어!!! 원 dockerfile 보니, 그냥 --user 없이 함.
    • USER root
    • RUN pip install --no-cache-dir -r requirements.txt # 경고없음
    • 이미지 빌드시엔 --user 없이 그냥 잘 되는거였음... 18
  • 삽2) 도커 이미지 경량화 과정 후, c++ 관련 디렉토리 및 파일 못찾는 이슈
    • 경량화
      • FROM python:3.6-alpine3.12 as builder
      • RUN apk update && apk add --no-cach build-base libffi-dev openssl-dev && rm -rf /var/cache/apk/*
      • RUN pip install gevent
      • WORKDIR /tmp/site-packages
      • RUN cp -r /usr/local/lib/python3.6/site-packages/gevent* .
      • RUN cp -r /usr/local/lib/python3.6/site-packages/greenlet* .
      • # 패키지들만 임시복사?
      • FROM python:3.6-alpine3.12
      • COPY --from=builder /tmp/site-packages /usr/local/lib/python3.6/site-packages
      • # 패키지들만 옮겨오기?
    • 그런데 특정 패키지 설치시에...  No such file or directory: 'c++': 'c++' 나옴.
  • ...

-끝-

'DevOps' 카테고리의 다른 글

K8S 애플리케이션  (0) 2020.07.19
K8S 리소스  (0) 2020.07.17
Docker-Swarm  (0) 2020.04.06
Kubernetes 란?  (0) 2019.11.04
Docker 란?  (0) 2019.11.04

+ Recent posts