# inrtoduction
지금까지 컨테이너를 띄울때 docker hub에 있는 이미지들을 가져다가 썼었다.
docker run -d nginx:latest
이번 포스팅에서는 Dockerfile을 이용하여 이런 이미지를 원하는대로 커스텀하여 새로운 이미지를 만들 수 있다.
# Dockerfile
아무 디렉토리나 가서 Dockerfile을 만들어주자.
mkdir /muzzi
cd /muzzi
여기서 이제 Dockerfile을 만들어줄거다
vi Dockerfile
이 파일의 내용은 이렇게 작성해줬다.
From nginx:latest
RUN mkdir /muzzi_con
WORKDIR /muzzi_con
RUN touch muzzi_test.txt
첫번째 FROM은 이 커스텀이미지의 기본 이미지이다.
나는 nginx의 lastest 태그로 만들어줬다.
두번째로는 RUN인데 이건 커맨드 명령어를 실행하게 해주는것.
위에선 최상위 디렉토리에 muzzi_con이라는 디렉토리를 만들어줬다.
세번쨰 WORKDIR은 다음으로 쓸 커맨드를 쓸 디렉토리 위치를 적어준다.
디렉토리 이동한다고 보면됨. 커맨드에선 cd /muzzi_con이라고 보면된다.
마지막으로 RUN을 한번 더 썼고
muzzi_test.txt라는 파일을 만들어줬다.
커맨드가 실행될 곳은 /muzzi_con이라는 디렉토리니까 여기에 muzzi_test.txt파일이 만들어질거다.
# 그럼 이미지는 어떻게 만들까? => docker build
docker build -t 이미지이름:태그 .
!!! 이 명령어를 실행할떄는 Dockerfile 파일이 있는 위치에서 실행시켜야 한다.
-t 옵션은 이미지 이름과 태그를 만들려고 쓴다. 이거 안쓰고 걍 docker build . 이렇게만 쓰면 만들어지긴하는데 못찾는다.
docker image ls 쳐도 안보인다. 도커 이미지들이 있는 곳도 찾아봤는데 해시값들이라서 뭔지모르겠음..
그리고 당연히 이미지이름과 태그를 써준다
마지막 . 은 현재 디렉토리에있는 Dockerfile을 가지고 만들어준다는거다.
그래서 첨 주의사항에 파일이 있는 위치에서 사용해야 한다고 한거임.
이것도 -f 옵션으로 바꿔줄수는 있는데 그냥 귀찮.. 중요한것도아니고..
암튼 이 명령어를 실행하면
이런식으로 이미지가 빌드되고 다음명령으로 이미지들을 확인해보면,
docker image ls
이미지가 잘 만들어진걸 볼 수 있다.
# 이제 이 이미지로 컨테이너를 띄워서 Dockerfile에 있는 명령어들이 실제로 먹혔는지 볼까?
docker run -it muzzi:1.0 /bin/bash
아래는 Dockerfile 내용
From nginx:latest
RUN mkdir /muzzi_con
WORKDIR /muzzi_con
RUN touch muzzi_test.txt
원하는대로 모두 잘 작동된걸 볼 수 있다.
# 커스텀 이미지의 구조 살짝..
위에서 만든 muzzi:1.0 이미지는 기본바탕이 nginx이미지이다.
nginx이미지와, muzzi 이미지를 살짝 살펴보면
docker inspect nginx
docker inspect muzzi:1.0
자세히보면 nginx의 inspect 출력물 layer랑 muzzi 출력물 layer랑 비슷하다. 그리고 muzzi:1.0이미지가 더 붙었는데,
muzzi는 nginx를 바탕으로 추가적으로 더 Dockerfile을 작성해서 적어서 일단 두 이미지는 nginx:latest이미지를
기본으로 만든거고 muzzi:1.0이미지에 레이어가 추가적으로 더 붙은거다.
도커의 이미지들은 이렇게 레이어구조로 이루어져있다.
# 추가적인 Dockerfile 요소들
RUN
COPY
CMD
ENTRYPOINT
EXPOSE
ENV
# docker hub
# 실습 httpd in centos
# systemctl 명령어 되게만들기
'k8s > docker' 카테고리의 다른 글
Docker 3tier Arc with nodejs&mysql&nginx (0) | 2023.11.02 |
---|---|
docker publish & volume (0) | 2023.10.29 |
docker 이미지, 네트워크 등 기본 명령어 (0) | 2023.10.29 |
docker 기본 개념 및 리눅스&윈도우버전 설치 (0) | 2023.10.29 |
docker 컨테이너 관련 기본명령어들 (0) | 2023.10.26 |