위 글에 이어서 작성합니다.
도커 이미지는 Dockerhub에 이미 다른사람들이 만들어 놓은것을 이용 할 수도 있고
직접 도커 이미지를 만들어서 사용할 수도 있다.
도커 이미지 생성하는 순서
dockerfile 작성 -> docker client -> docker server -> 이미지 생성
dockerfile
Docker Image를 만들기 위한 설정파일, 컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의해준다.
dockerfile 만드는 순서
1. 베이스 이미지를 명시해준다(파일 스냅샷)
2. 추가적으로 필요한 파일을 다운 받기 위한 명령어들을 명시(파일 스냅샷)
3. 컨테이너 시작시 실행 될 명령어를 명시
base image란 image를 사용하기 위해 os image(window, linux, mac...)를 생성하는것을 의미한다.
도커 파일 만들기
1. 도커 파일을 만들 폴더를 하나 생성해준다.
해당 폴더를 vscode로 열어주겠다.
Dockerfile을 생성해준다.(확장자 없음)
기본적인 Dockerfile의 구조는 다음과 같다
#베이스 이미지를 명시한다.
FROM baseImage
#추가적으로 필요한 파일들을 다운로드 받는다
RUN command
#컨테이너 시작시 실행 될 명령어를 명시해준다.
CMD [ "executable" ]
From
이미지 생성시 기반이 되는 이미지 레이어 로써
<이미지 이름>:<태그> 형식으로 작성한다
태그를 붙이지 않으면 가장 최신 버전으로 다운받는다(ex: ubuntu: 20.04)
RUN
도커이미지가 생성되기 전에 수행할 쉘 명령어
CMD
컨테이너가 시작되었을 때 실행할 실행 파일 또는 쉘 스크립트.
DockerFile내 1회만 사용가능
WORKDIR
이미지 안에서 어플리케이션 소스코드를 갖고 있을 디렉토리를 생성 하는것
해당 디렉토리가 어플리케이션의 working directory 가 된다.
WORKDIR 을 지정하지 않고 그냥 COPY를 하게 되면
원래 파일 이름과 같은 경우 원래 있던 폴더가 덮어씌워져 버린다.
따라서 어플리케이션을 위한 소스들은 WORK 디렉토리를 따로 만들어서 보관한다.
COPY
HOST의 파일과 디렉토리를 WORKDIR을 기준으로 이미지에 복사한다
SHELL
기본 쉘을 재정의한다.
ENV
이미지 내 사용할 환경 변수 값을 지정
EXPOSE
해당 포트를 외부로 나타낸다.
ENTRYPOINT
컨테이너를 구동 할 떄 실행할 명령어를 지정한다.
VOLUME
디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정합니다.
데이터의 볼륨을 호스트의 특정 디렉터리와 연결하려면 docker run에서 -v 옵션을 사용해야한다.
Dockerfile
#베이스 이미지를 명시한다.
FROM alpine
#추가적으로 필요한 파일들을 다운로드 받는다
#shell 명령어 실행
#RUN command
#컨테이너 시작시 실행 될 명령어를 명시해준다.
CMD [ "echo", "hello" ]
#명령어가 실행될 경로 설정
WORKDIR
#HOST의 파일과 디렉토리를 이미지에 복사한다.WORKDIR로 지정한 디렉토리 기준
COPY
#기본 쉘을 재정의한다
SHELL
#환경변수 설정
ENV
#호스트와 통신할 port를 지정
EXPOSE
#컨테이너를 구동 할 때 실행할 명령어를 지정한다
ENTRYPOINT
docker build
docker build .
디렉토리내 dockerfile 파일을 찾아서 docker client에 전달시켜 준다.
위 코드 방식으로 빌드하게 되면
alpine 이미지(base image)의 파일 스냅샷(etc, dev, bin...)등이 하드디스크에 저장된다
임시컨테이너로 alpine 이미지의 스냅샷을 넣어주고 시작시 실행될 명령어(echo hello)를 넣어준다
이를 토대로 새로운 이미지를 생성한다.
따라서 베이스 이미지에서 다른 종속성이나 새로운 커맨드를 추가 할 때는 임시 컨테이너를 만든 후
그 컨테이너를 토대로 새로운 이미지를 만든다. 그리고 나서 임시 컨테이너는 삭제한다.
도커 이미지에 이름 부여하기
위와같이 만들어진 이미지를 보게 되면 NONE이라 나와있고 IMAGE ID 만 나와있다.
따라서 태그명을 부여하면 조금더 알아보기 쉽고 명확하게 만들 수 있다.
docker build -t 도커아이디/저장소의프로젝트이름:버전 .
위 글은
해당 강의를 듣고 정리하는 내용입니다.
'Docker, CI' 카테고리의 다른 글
docker - docker compose (0) | 2020.12.26 |
---|---|
docker - node.js 어플만들기 (0) | 2020.12.26 |
docker - 기본 명령어 (0) | 2020.12.25 |
docker- docker 정의 및 docker 설치하기 (0) | 2020.12.25 |
Docker 활용해보기 - express 서버 올려보기 (0) | 2020.06.20 |