도커 / 다커 / 도커파일
Dockerfile
기본적으로 Dockerfile 의 syntax 는 아래와 같은 모양을 갖는다.
- Dockerfile 에 적힌 순서대로 실행된다.
INSTRUCTION
이나#
(comment) 앞에 공백은 없어야 한다.(가능은 하지만, 이건 backward compatibility 때문이다.)\
은 Line continuation characters 이다.# directive=value
는 parser directives 이다.
# Comment
INSTRUCTION arguments
# example
RUN echo 'we are running some # of cool things'
RUN echo hello \
world
parser directives
말그대로 parser 에게 "어떻게 해라" 라고 가르치는 지시자 같은 것이다.
현재 아래 2가지를 지원한다.
- syntax
- escape : escape 문자를 어떤것으로 할지 정한다. window
등에서는 이미
\
가 쓰이기 때문에,\
를 다른 것으로 정해서 사용해야 하는데, 이럴때 이 directive 를 사용하면 된다.
# syntax=docker.io/docker/dockerfile:1
# escape=\ (backslash)
변수지정
${foo:-word}
: foo 변수가 없으면 word 를 사용${foo:+word}
: foo 변수가 있으면 word 를 사용
ENV foo /bar
WORKDIR ${foo} # WORKDIR /bar
.dockerignore
file
docker CLI 가 docker deamon 에 context 를 보내기 전에,
.dockerignore
file 을 확인한다.
아래처럼 작성하면 된다. 이 match rule 은 Go의 filepath.Match rules 을 따른다고 한다.
# comment
*/temp* --> root 의 모든 level 1 의 subdirectory 의 temp* file
*/*/temp*
temp? --> tempa, tempb 등 temp뒤에 character 1개가 붙은 file
# 순서대로 읽으면 된다.
# - 아래는 모든 .md 를 exclude 한다.
# - README.md 는 exclude 에서 제외한다.
# - README-secret.md 는 exclude 한다.
*.md
!README.md
README-secret.md
Instructions
RUN : image 를 생성할때 실행할 명령어
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
CMD : container에서 실행할 명령어
MAINTAINER (deprecated)
-
EXPOSE 5900
: container 에게 tcp 5900 번 port 를 listen 하라고 알려준다.EXPOSE 80/tcp
docker run -p 80:80/tcp
, 이렇게-p
option 으로 override 된다.docker run -P
:-P
option 에 의해EXPOSE
에 적힌 port 가 실제로 publish 된다.
-
ADD --chown=myid:mygroup home.txt relativeDir/
- file 을 image 로 copy
- 자동으로 recursive 하게 copy 를 해준다.
- Best
practices ADD or COPY : copy 가 더 선호된다.
-
COPY --chown=myid:mygroup home.txt relativeDir/
- file 을 container 로 copy
- docker 를 실행파일처럼 사용하게 해준다.
docker run <image> -d
라는 명령어를 실행하면,-d
가 entrypoint 의 parameter 로 전달된다. - 예를 들어 ENTRYPOINT 를 'python3' 로 해놨다면, docker run
<image> a.py 라고 치면, docker 가 load 되고 나서, python3 a.py 가
실행된다.
- docker 를 실행파일처럼 사용하게 해준다.
-
- image 에 trigger instruction 을 넣을 수 있다. 이 trigger instruction 은 추후에 사용된다. 예를 들면 docker image 가 다른 build 의 base build 로 사용되는 경우에, 즉, docker image 를 하나 받고 나서, 그 것을 기반으로 build 를 하려는 경우에 쓰일 수 있다.
examples
# Firefox over VNC
#
# VERSION 0.3
FROM ubuntu
ENF myName2 Gaed
ENV myName="John Doe" myDog=Rex\ The\ Dog \
myCat=fluffy
WORKDIR /home/gaga
# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
RUN mkdir ~/.vnc
RUN echo ${myName2}
# Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way, but it does the trick)
RUN bash -c 'echo "firefox" >> /.bashrc'
# home.txt file 을 docker image 내의 /home/gaga/relativeDir 로 copy
# --chown 은 linux 에서만 쓰이는데, file 에 대해 소유자를 변경시켜준다.
# --chown 이 없다면, 0 에대한 UID, GID 를 사용한다.(아마도 root)
ADD --chown=myid:mygroup home.txt relativeDir/
EXPOSE 5900
EXPOSE 80/tcp
CMD ["x11vnc", "-forever", "-usepw", "-create"]
See Also
- 쿠...sal: [컴][유틸] kali linux 에서 Docker 설치 및 사용
- 쿠...sal: [컴] docker 에서 /etc/hosts 변경
- 쿠...sal: [컴] docker commands
- 쿠…sal: [컴] 간단한 Jekyll Dockerfile 만들기
- 쿠…sal: [컴] Dockerfile 내의 VOLUME command 와 -v 의 차이
- 쿠…sal: [컴][웹] nginx build 방법
댓글 없음:
댓글 쓰기