새소식

인기 검색어

Docker

7/5

  • -

commit -> 컨테이너를 이미지로 만듦

흰색 2개 이미지를 레지스트리에 push

기존 이미지 얘로 바뀔것

 

정상적으로 실행 되는 것 볼 수 있음

 

 

docker image prune -> Dangle image (이름과 태그가 없는 오류 이미지)지울 수 있음

푸룬을 해도 안지워지면 docker rm 으로 관련 컨테이너를 지워야함

 

 

apt update나 install 은 이전의 것을 사용하여 새로 설치가 안됨(예전에 있던 캐쉬를 사용하므로)

9번째는 새로운 파일이므로 복사의 과정을 거침

 

--no-cache 를 붙여주면 캐쉬를 사용하지않고 정상적으로 설치됨(중요!)

 

104 docker run -it ubuntu bash 105 docker run -it ubuntu:18.04 bash 118 vi Dockerfile 119 docker build -t myimage:v1 . 120 vi ports.conf Listen 8080 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule> 121 cat Dockerfiles 122 cat Dockerfile 127 vi index.html 130 docker build -t web:v1 . 131 ls 132 vi Dockerfile FROM ubuntu:20.04 ENV DEBIAN_FRONTEND noninteractive RUN ["apt", "update"] RUN ["apt", "install", "-y", "apache2"] ENTRYPOINT ["apachectl"] CMD ["-D", "FOREGROUND"] EXPOSE 80/tcp ADD ports.conf /etc/apache2/ports.conf COPY index.html /var/www/html/index.html 133 docker build -t web:v1 . 134 docker tag web:v1 web:latest 135 docker image ls 136 docker tag web:v2 web:latest 137 docker image prune 138 docker image ls 139 docker run -d -p 80:8080 web 140 docker ps 141 curl localhost 142 docker build --no-cache -t web:v3 . 143 docker image ls 144 vi Dockerfile 145 vi ports.conf 146 history vagrant@docker:~/build$

확인해보기) 이미지 레이어?

익스포즈에선 포트가 80 이고 리슨에선 8080 으로 다르면 어떻게 되는지?

 

* 이미지레이어 확인방법

-A : After 레이어스 검색한 후속 몇줄을 더 보여달라

-B : Before

 

-f : Go 템플릿을 이용해서 확인 가능

 

 

*포맷이용하여 레이어 확인하기

레이어 하나에서 4개 추가됨

 

도커파일에서 지시어중에 레이어 추가 지시어 4개가 있음 -> RUN 2개, ADD, COPY

이유:

레이어 -> 파일의 모음

apt 업데이트하면 인덱스 파일 추가됨 파일이 삭제 변경 추가되면 레이어로 저장될것

install 도 마찬가지

포트파일복사 -> 변경이 일어나므로 레이어 추가

복사-> 변경이 일어나므로 레이어 추가

 

vi Dockerfile 들어가서 RUN 2줄 지우고 RUN apt update && apt install -y apache2 한줄 써주기

앞 && 뒤 : 앞에 명령어가 실행되면 뒤에 명령어도 실행(앞에 명령어가 실행이 안되면 뒤에도 안됨. AND 와 다름)

 

docker image ls

 -> v4 확인

 

레이어 한줄 지워진것 확인

 

파일 들어가서 레이어 체크해보기

 

 

 

컨테이너를 만들게 되면 원래 이미지 레이어에 추가로 빈 레이어 생김.

 


dockerignore 파일엔 복사하지 않을 파일을 써주면됨

 


 

 

도커파일에서 expose에 지정한 포트는 단순정보일뿐임. expose 는 실제 서비스 포트와 연동되지 않으므로 유의해야함.

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.