수색…


매개 변수

매개 변수 세부
--손잡이 Dockerfile의 나머지 부분을 만들기 전에 기본 이미지 ( FROM )가 최신인지 확인합니다.

Dockerfile에서 이미지 만들기

당신이 Dockerfile이 있으면, 당신은 사용하여에서 이미지를 구축 할 수 있습니다 docker build . 이 명령의 기본 형식은 다음과 같습니다.

docker build -t image-name path

당신의 Dockerfile 이름이 지정되지 않은 경우 Dockerfile , 당신은 사용할 수 있습니다 -f 구축하는 Dockerfile의 이름을 지정 플래그.

docker build -t image-name -f Dockerfile2 .

예를 들어, 현재 작업 디렉토리의 Dockerfile 에서 dockerbuild-example:1.0.0 이라는 이미지를 빌드하려면 Dockerfile 을 수행하십시오.

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

$ docker build -t dockerbuild-example-2:1.0.0 -f Dockerfile2 .

더 많은 옵션과 설정은 docker build 사용 설명서 를 참조하십시오.

일반적인 실수는 사용자 홈 디렉토리 ( ~ )에 Dockerfile을 만드는 것입니다. 이것은 도 docker build -t mytag . 하기 때문에 나쁜 생각 docker build -t mytag . 이 메시지는 오랜 시간 동안 나타납니다.

컨텍스트 업로드 중

원인은 모든 사용자 파일 (홈 디렉토리와 서브 디렉토리 모두)을 복사하려고하는 docker 디먼입니다. 항상 Dockerfile에 대한 디렉토리를 지정하여이를 피하십시오.

.dockerignore 파일을 빌드 디렉토리 에 추가하는 것이 좋습니다 . 이 구문은 .gitignore 파일과 유사하며 원하는 파일과 디렉토리 만 빌드의 컨텍스트로 업로드되도록합니다.

간단한 Dockerfile

FROM node:5

FROM 지시문은 시작할 이미지를 지정합니다. 모든 유효한 이미지 참조 가 사용될 수 있습니다.

WORKDIR /usr/src/app

WORKDIR 지시문은 컨테이너 내부의 현재 cd 를 실행하는 것과 동일한 컨테이너 내부의 현재 작업 디렉토리를 설정합니다. (참고 : RUN cd 는 현재 작업 디렉토리를 변경 하지 않습니다 .)

RUN npm install cowsay knock-knock-jokes

RUN 은 컨테이너 내부에서 주어진 명령을 실행합니다.

COPY cowsay-knockknock.js ./

COPY 복사 빌드 컨텍스트 (로부터 첫 번째 인수에 지정된 파일이나 디렉토리 path 에 전달 docker build path 2 번째의 인수로 지정된 컨테이너에 위치).

CMD node cowsay-knockknock.js

CMD 는 이미지가 실행 되고 명령이 주어지지 않을 때 실행할 명령을 지정합니다. 그것은 docker run 명령을 전달하여 무시할 수 있습니다.

다른 많은 지침과 옵션이 있습니다. 전체 목록은 Dockerfile 참조 문서참조 하십시오.

ENTRYPOINT와 CMD의 차이점

빌드 된 이미지에서 기본적으로 실행할 명령을 지정하는 Dockerfile 지시문이 두 가지 있습니다. CMD 만 지정하면 도커는 기본 ENTRYPOINT/bin/sh -c 사용하여 해당 명령을 실행합니다. 기본 이미지를 시작할 때 진입 점 및 / 또는 명령 중 하나 또는 모두를 무시할 수 있습니다. 둘 다 지정하면 ENTRYPOINT 는 컨테이너 프로세스의 실행 파일을 지정하며 CMD 는 해당 실행 파일의 매개 변수로 제공됩니다.

예를 들어, Dockerfile

FROM ubuntu:16.04
CMD ["/bin/date"]

그런 다음 /bin/sh -c 의 기본 ENTRYPOINT 지시문을 사용하고 기본 엔트리 포인트를 사용하여 /bin/date 를 실행합니다. 컨테이너 프로세스의 명령은 /bin/sh -c /bin/date 입니다. 이 이미지를 실행하면 기본적으로 현재 날짜가 인쇄됩니다

$ docker build -t test .
$ docker run test
Tue Jul 19 10:37:43 UTC 2016

명령 행에서 CMD 를 겹쳐 쓸 수 있습니다.이 경우 명령은 사용자가 지정한 명령을 실행합니다.

$ docker run test /bin/hostname
bf0274ec8820

ENTRYPOINT 지시문을 지정하면 Docker는 해당 실행 파일을 사용하고 CMD 지시문은 CMD 의 기본 매개 변수를 지정합니다. Dockerfile 에 다음이 포함되어있는 경우

FROM ubuntu:16.04
ENTRYPOINT ["/bin/echo"]
CMD ["Hello"]

그런 다음 그것을 실행하면

$ docker build -t test .
$ docker run test
Hello

원하는 경우 다른 매개 변수를 제공 할 수 있지만 모두 /bin/echo 실행 /bin/echo

$ docker run test Hi
Hi

Dockerfile에 나열된 진입 점을 무시하려는 경우 (즉,이 컨테이너에서 echo 과 다른 명령을 실행하려는 경우) 명령 행에서 --entrypoint 매개 변수를 지정해야합니다.

$ docker run --entrypoint=/bin/hostname test
b2c70e74df18

일반적으로 ENTRYPOINT 지시문을 사용하여 실행할 기본 응용 프로그램을 가리키고 CMD 를 기본 매개 변수로 지정합니다.

Dockerfile에 포트 노출

EXPOSE <port> [<port>...]

Docker의 문서에서 :

EXPOSE 명령은 컨테이너가 런타임에 지정된 네트워크 포트에서 수신 대기한다는 것을 Docker에 알립니다. EXPOSE 는 컨테이너의 포트를 호스트가 액세스 할 수있게하지 않습니다. 이를 수행하려면, -p 플래그를 사용하여 포트 범위를 공개하거나 노출 된 모든 포트를 공개하는 -P 플래그를 사용해야합니다. 하나의 포트 번호를 노출하고 다른 번호로 외부에 게시 할 수 있습니다.

예:

Dockerfile 내부 :

EXPOSE 8765

호스트 컴퓨터에서이 포트에 액세스하려면 docker run 명령에 다음 인수를 포함시킵니다.

-p 8765:8765

동사와 매개 변수로 본 ENTRYPOINT 및 CMD

Dockerfile이 다음으로 끝나는 것으로 가정하십시오.

ENTRYPOINT [ "nethogs"] CMD ["wlan0"]

이 이미지를

docker built -t inspector .

그런 Dockerfile로 빌드 된 이미지를 다음과 같은 명령으로 실행하십시오 :

docker run -it --net=host --rm inspector

nethogs는 wlan0이라는 인터페이스를 모니터합니다.

이제 eth0 (또는 wlan1, 또는 ra1 ...) 인터페이스를 모니터링하려면 다음과 같이하면됩니다.

docker run -it --net=host --rm inspector eth0

또는

docker run -it --net=host --rm inspector wlan1

Docker 허브 또는 다른 레지스트리로 이미지 밀어 넣기 및 당기기

로컬로 생성 된 이미지는 Docker Hub 또는 레지스트리라고하는 다른 docker repo 호스트에 푸시 될 수 있습니다. docker login 을 사용하여 기존의 도커 허브 계정에 로그인하십시오.

docker login

Login with your Docker ID to push and pull images from Docker Hub.
If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: cjsimon
Password:
Login Succeeded

서버 이름을 지정하여 다른 도커 레지스트리를 사용할 수 있습니다. 이는 개인 또는 자체 호스팅 레지스트리에서도 작동합니다. 또한 안전을 위해 외부 자격 증명 저장소 를 사용할 수도 있습니다.

docker login quay.io

그런 다음 로그인 한 레지스트리에 이미지를 태그하고 푸시 할 수 있습니다. 저장소는 server/username/reponame:tag 로 지정해야합니다. 현재 서버를 생략하면 기본적으로 Docker Hub가 기본값으로 설정됩니다. 기본 레지스트리는 다른 공급자로 변경할 수 없으며이 기능을 구현할 계획없습니다 .

docker tag mynginx quay.io/cjsimon/mynginx:latest

다른 태그를 사용하여 동일한 이미지의 다른 버전 또는 분기를 나타낼 수 있습니다. 여러 개의 다른 태그가있는 이미지는 각 태그를 동일한 repo에 표시합니다.

docker images 를 사용하여 새로 태그 지정된 이미지를 포함하여 로컬 컴퓨터에 설치된 설치된 이미지 목록을 확인하십시오. 그런 다음 밀어 넣기를 사용하여 레지스트리로 업로드하고 이미지를 다운로드하십시오.

docker push quay.io/cjsimon/mynginx:latest

-a 옵션을 지정하여 이미지의 모든 태그를 가져올 수 있습니다.

docker pull quay.io/cjsimon/mynginx:latest

프록시를 사용하여 빌드

종종 Docker 이미지를 작성할 때 Dockerfile은 인터넷에서 리소스를 가져 오는 프로그램을 실행하는 지침을 포함합니다 (예 : GitHub에서 프로그램 바이너리 빌드를 가져 오는 것과 같은 wget ).

Docker가 설정된 세트 환경 변수를 전달하도록 지시하여 해당 프로그램이 프록시를 통해 이러한 페치를 수행하도록 할 수 있습니다.

$ docker build --build-arg http_proxy=http://myproxy.example.com:3128 \
               --build-arg https_proxy=http://myproxy.example.com:3128 \
               --build-arg no_proxy=internal.example.com \
               -t test .

build-arg 는 빌드시에만 사용 가능한 환경 변수입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow