ㅁ 컨테이너 변경사항을 commit 명령어를 사용하여 신규 이미지 생성하기
베이스 이미지로 실행된 컨테이너의 변경사항을 이미지화 하는 방법이다.
1
|
$ docker commit [옵션] 컨테이너명 [이미지명[:태그]]
|
ㅁ Dockerfile 생성하여 직접 이미지 제작하기
Dockerfile은 이미지를 직접 만들고자 할때 설정에 대한 정보를 담는 파일이다.
Dockerfile을 만들어 이미지를 직접 제작해보자
우선 테스트를 진행할 폴더를 신규 생성해서 해당 폴더에서 테스트를 진행하자
1
2
|
$ mkdir image-test
$ cd image-test
|
폴더에서 Dockerfile이라는 파일을 신규 생성해주고 안에 해당 내용을 붙여넣어주자
1
2
3
4
5
|
FROM ubuntu:latest
MAINTAINER jaehonglee <jaehong.lee@solarconnect.kr>
RUN apt-get -y update
RUN apt-get -y install vim
|
설정파일 내용을 살펴보면 ubuntu 파일을 베이스 이미지로 저자는 jaehonglee 이고 이미지를 생성하면서 update하고 vim을설치하는 .. 뭐 그런내용이다.
( Dockerfile 설정에 대한 내용은 테스트 이미지를 만들어보고 아래에서 자세하게 알아보기로 하자)
이후 터미널에서 build 명령어를 입력한다 ex. docker build -t testimage .
1
|
$ docker build -t <이미지명> <Dockerfile경로>
|
build 후 images 목록을 확인하면 정상 이미지 생성이 된것을 알 수 있다.
ㅁ Dockerfile 명령어 알아보기
이미지를 생성하는데 사용했었던 Dockerfile의 명령어에 대해서 알아보자
FROM
베이스 이미지를 설정하는 명령어
1
2
3
4
5
|
FROM <이미지명:태그>
// 사용 예
FROM ubuntu:latest
|
MAINTAINER
관리자의 정보를 기재하는 부분, 빌드에 영향을 주지 않기 때문에 생략하는 경우도 있다.
1
2
3
4
|
MAINTAINER <name>
// 사용 예
MAINTAINER jaehong <jaehong.lee@solarconnect.kr>
|
COPY
파일이나 디렉토리를 이미지로 복사하는 명령어
소스를 복사할때 많이 사용된다. 이미지 파일이 위치할 경로는 절대경로 방식으로 설정해야한다.
URL을 사용할 수 없고 압축이 해제되지 않고 그대로 복사된다
1
2
3
4
|
COPY <복사할 파일 경로> <이미지 파일이 위치할 절대경로>
// 사용 예
COPY . /app
|
ADD
파일이나 디렉토리를 이미지로 복사하는 명령어이다. COPY와 사용법까지 유사하지만 차이점이 있다.
ADD는 이미지 파일이 위치할 경로를 상대경로로 사용할 수 있고, URL을 사용할 수 있다.
또한 압축파일이 있으면 압축파일을 풀어서 추가된다.
1
2
3
4
|
ADD <복사할 파일 경로> <이미지 파일이 위치할 경로>
// 사용 예
ADD . /app
|
RUN
이미지를 만드는 과정에서 이미지에서 사용해야하는 명령어를 실행해주는 명령어
1
2
3
4
|
RUN <명령어>
// 사용 예
RUN mkdir -p /app
|
CMD
컨테이너가 실행되었을때 실행되는 명령어를 정의하는 명령어
Dockerfile에 CMD명령어가 여러번 사용되어도 맨 마지막 명령어만 유효하다.
여러 명령어를 사용하고자 한다면 run.sh 파일을 만들어 해당 파일에 실행하고자 하는 명령어를 입력 해주어야 한다.
docker run 을 통해 인자값을 전달하게되면 CMD 명령어에 명시된 인자는 무시된다.
1
2
3
4
5
6
7
8
9
|
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
// 사용 예
CMD touch test.txt
CMD ./bin/run.sh
|
ENTRYPOINT
컨테이너가 run으로 실행 되었을때 실행되는 명령어를 정의하는 명령어이다.
CMD명령어와 유사해 보이는데 차이점은 run을 통해 인자값이 전달 되어도 ENTRYPOINT로 지정 해놓은 명령어가 그대로 실행된다.
1
2
3
4
5
|
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
// 사용 예
ENTRYPOINT ["/entrypoint.sh"]
|
ENTRYPOINT와 CMD 비교
ENTRYPOINT와CMD형태를 같게하여 이미지 생성 후run을 했을때 결과를 비교해보자
CMD Dockerfile
123 FROM ubuntu:latestCMD ["echo", "Hello World"]ENTRYPOINT Dockerfile
123 FROM ubuntu:latestENTRYPOINT ["echo", "Hello World"]두개의 이미지를 각각 cmdtest, entrytest의 이름으로 생성하였고 이미지에 매개변수를 전달하면서 run 해보자
1234567 $ docker run -it --rm cmdtest echo "hi"$ docker run -it --rm entrytest echo "hi"# 결과hiHello world echo hiCMD 에서는 매개변수에 영향을 받아 매개변수를 출력시킨것을 볼수 있고 ENTRYPOINT 는 매개변수를 무시하고 기존 명령어를 실행한 후 전달된 매개변수는 단순 출력된것을 알 수 있다.
WORKDIR
COPY, ADD, RUN, CMD등이 수행될 기본 디렉토리를 설정해주는 명령어.
1
2
3
4
|
WORKDIR <경로>
// 사용 예
WORKDIR /app
|
EXPOSE
컨테이너와 호스트를 연결할 포트를 지정해주는 명령어.
1
2
3
4
5
|
EXPOSE <포트번호>
// 사용 예
EXPOSE 80
EXPOSE 3000
|
ENV
RUN, CMD, ENTRYPOINT 명령어에서 사용하는 환경 변수를 지정하는 명령어
사용할떄는 환경변수명 앞에 $를 붙여주면 된다
1
2
3
4
5
6
7
8
9
10
11
12
13
|
ENV <key> <value>
// 사용 예
FROM ubuntu:latest
ENV age 27CMD echo $age
// build & run 실행 시
docker build -t envtest .
docker run -it --rm envtest
#결과
27
|
VOLUME
VOLUME 은 컨테이너의 외부에 파일시스템을 연결하기 위해 사용한다.
1
2
3
4
5
6
|
VOLUME <경로>
VOLUME ["경로1", "경로2"]
// 사용 예
VOLUME /data
VOLUME ["/data"]
|
'Server > Docker' 카테고리의 다른 글
[Docker] 명령어 정리 (0) | 2022.05.31 |
---|---|
[Docker] ubuntu 컨테이너 생성 (0) | 2022.05.30 |
[Docker] vi 편집기 설치 (0) | 2022.05.19 |
[Docker] 컨테이너를 만들고 프로젝트 넣기 (0) | 2022.05.18 |
[Docker] 도커 컨테이너를 위한 오라클 21c (0) | 2022.05.16 |
댓글