
도커파일 ?
도커파일 빌드 와 컨테이너 커밋 비교
Dockerfile build (도커파일 빌드)
Container commit (컨테이너 커밋)
*Dockerfile 작성[ Dockerfile 작성 단계. ] ⇒ FROM / RUN / ENV / CMD

-명령은 관례상 대문자를 사용 / 도커파일명은 Docker 또는 docker
*Dockerfile 빌드
docker build [옵션] <경로>
일반적으로 사용되는 옵션들:
*도커파일은 도커 허브에서 많은 개인이 만들어 놓은 이미지 제공 (hub.docker.com)
주석도 사용가능
#주석내용 입력
-도커파일로 이미지 생성




폴더생성후 진입해서 파일 생성 후 이미지만 다운로드
- mkdir -p docker/sample && cd ~/docker/sample
- centos 이미지만 다운로드하는 내용 입력
- 내용 확인
생성한 도커 파일을 실행해서 이미지 다운로드
- 도커 파일 실행 ( docker build -t, 태그 생성 )
- 생성된 이미지 확인
버전을 바꾼 후 이미지 다운로드
- docker build -t sample:2.0 .
- 생성된 이미지 확인
더미파일을 생성 후
- touch dummyfile
- 도커파일과 더미파일 압축하고 압축된 내용 확인
- tree를 통해 압축된 것 확인
- 압축한 도커.tar 파일을 실행
- 생성된 이미지 확인 ( tag: latest )
*이미지 생성 확인


docker 파일을 압축 후에

docker 파일 실행
2.입력 방식에 의한 빌드 생성 [ 도커파일이 있는 절대경로 지정 ]


이미지 빌드
멀티 스테이지 작성 ( 용량 줄이기 )
- 폴더 하나 생성 후 진입 ( mkdir multi )
- 파일 생성 : vi main.go ( 소스 파일 )
- 코드 작성 ( Go 언어로 작성된 간단한 웹 서버를 생성 )
- 도커 파일 작성 ( 소스 파일, copy를 통해 경로 지정, 이미지를 배포할 때 사용 )
- 도커 파일 실행 ( docker build -t webserver . )
- 실행된 이미지 확인
-컨테이너 가동 및 확인
컨테이너 가동
- 컨테이너 생성
- 상태 확인

*용량줄이기

-용량 확인

도커파일을 수정해서 용량 줄이기
- 도커 파일 수정 ( 버전 변경 및, Go로 작성된 애플리케이션을 컨테이너화 )
- 이미지 확인 ( 용량이 줄어듬 )
*303M의 용량을 추가로 줄이기

-저장 후 빌드 시키고 용량 확인

303M의 용량 줄이기
- 도커 파일 수정 ( golang:alpine 이미지를 build 단계로 사용, 작업 디렉터리 추가하고 main.go의 파일 경로를 추가한 /app 경로에 복사 )
- 이미지 용량 확인
*14.4M의 용량을 한번더 줄이기
#vi Dockerfile ⇒ 아래쪽 alpine 를 scratch 로 수정

*빌드 후 용량 확인하면 7M 로 줄어듬.
14.4M의 용량 줄이기
- 도커 파일 수정 ( scratch 이미지, 컨테이너에 필요한 파일 및 실행 파일만을 포함 )
- docker build -t webserver .
- 이미지 용량 확인
https://docs.docker.com/reference/build
⇒ 도커 관련 전체 명령어 확인
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
⇒도커파일 모범사례
*도커파일 구조
*Dockerfile 명령 및 프로세스 실행 관련 …
run 명령어 사용법 2가지
도커디렉터리 생성 후 그 안에 run디렉터리 생성 후 안으로 이동.
도커 파일 RUN을 이용해서 명령어 실행
- mkdir run && cd run (폴더 생성 후 진입)
- vi Dockerfile2.txt ( 파일 생성 )
- RUN을 이용해서 명령어 실행 ( shell 방식과 exec 방식 )
- Dockerfile2.txt 파일을 이용해서 빌드 (docker build -t test-sample -f Dockerfile2.txt .)
- 생성된 이미지 확인 후 history 확인 ( 명령어 실행 확인 )
⇒ RUN 과 CMD 차이점 : RUN 이미지 빌드 시 사용, CMD 컨테이너 시작시 사용 .

CMD 명령어 ( 데몬 실행 )
- mkdir entry && cd entry
- vi Dockerfile
- CMD를 이용해서 도커 파일 작성 ( EXPOSE : 포트 번호 지정 )
- docker build -t sample .
- 컨테이너 실행
- 컨테이너 호출
- 파이어 폭스에서 확인

ENTRY POINT 명령어 (생성한 컨테이너 중지 후에)
- docker stop web1 (중지)
- vi Dockerfile2.txt
- 도커 파일 작성 ("top" 명령어가 실행 및 "-d 10" 옵션이 전달)
- docker build -t sample -f Dockerfile2.txt .
*Entrypoint 와 cmd 정보값 확인

생성한 이미지 엔트리 포인트와 CMD 정보 확인
- 엔트리 포인트 정보 확인
- CMD 정보 확인
- docker run -it --name s1 sample
- 컨테이너 접속 후 "top -d 10" 확인 ("-d 10", 10초에 한번)
- 컨테이너 정보에서 COMMAND 확인
*문서에 표기 된 사용 법
⇒ 빌드 완료 후에 실행되는 명령어들을 넣어 놓는것.
-베이스 이미지 다운로드

Onbuild
- mkdir onbuild && cd onbuild
- git clone https://github.com/asashiho/dockertext2 (깃 허브 다운로드)
- onbuild(chap05)로 이동
- vi Dockerfile.base
- Onbuild를 이용해 Dockerfile.base 작성 ( Onbuild, 다음 빌드 단계에서 website.tar 파일을 /var/www/html/로 추가하도록 지정 )
- docker build -t web-base -f Dockerfile.base .
html로 보낼 압축된 폴더(website.tar) 확인
- 이미지 생성 확인 후 website 트리 확인
- 압축된 website.tar 확인( tar tf website.tar )
-[root@www onbuild]# docker build -t photo-view .
[root@www onbuild]# docker run -d --rm --name web1 -p 80:80 photo-view
[root@www onbuild]# docker ps -a
Dockerfile.base를 통해 생성한 이미지로 도커 파일 빌드 ( Onbuild )
- 도커 파일 확인 후
- docker build -t photo-view .
- docker run -d --rm --name web1 -p 80:80 photo-view
*onbuild 내용확인
Onbuild 내용 확인
- curl을 통해 Onbuild( website.tar가 html 폴더로 추가 )되었는지 확인
- web-base 이미지 정보의 Onbuild를 inspect를 통해 확인
- 파이어 폭스로 접속해서 Onbuild 확인
*WORKDIR 지정 명령
디렉터리 생성 후 지정 해주지 않으면 기본적인 WORKDIR은 / 가 지정됨.

[root@www workdir]# docker build -t sample-work . ⇒ 빌드 생성시 위 내용의 명령이 실행되는것 확인 가능 함, 또는 history 를 통해서도 확인 가능.
[root@www workdir]# docker history sample-work
Workdir 작성
- mkdir workdir
- cd workdir/
- vi Dockerfile
- WORKDIR을 확인하는 도커 파일 작성
- docker build -t sample-work .
- 이미지의 history를 확인해서 WORKDIR 확인
도커 파일 실행 결과
- WORKDIR /test1: 현재 작업 디렉토리를 /test1으로 변경
- WORKDIR test2: 현재 작업 디렉토리에 상대적으로 test2 디렉토리를 생성, 따라서 /test1/test2로 변경
- WORKDIR test3: 현재 작업 디렉토리에 상대적으로 test3 디렉토리를 생성, 따라서 /test1/test2/test3으로 변경
- RUN ["pwd"]: 현재 디렉토리를 출력하는 명령어, /test1/test2/test3 출력
- ENV DIRPATH /test1: 환경 변수 DIRPATH를 /test1로 설정
- ENV DIRNAME test2: 환경 변수 DIRNAME을 test2로 설정
- WORKDIR $ DIRPATH/$ DIRNAME: 환경 변수를 사용하여 현재 작업 디렉토리를 변경, 따라서 /test1/test2로 변경
- RUN ["pwd"]: 현재 디렉토리를 출력하는 명령어, /test1/test2/ 출력