# Dockerfile 작성예

 

$ vi Dockerfile

# 베이스 이미지 지정
FROM openjdk:11.0.10-jre-slim-buster

# 디렉토리 생성 및 이동
WORKDIR /usr/local/tomcat9

# jar파일 복제
COPY target/hello-spring-0.0.1-SNAPSHOT.jar /home/user/tomcat9

# jar파일 실행
CMD java -jar /home/user/tomcat9/hello-spring-0.0.1-SNAPSHOT.jar
FROM python:3.9

LABEL maintainer="ys.ha"

# 해당 디렉토리에 있는 모든 하위항목들을 복사
COPY . /usr/local/python_source

# image의 directory로 이동
WORKDIR /usr/local/python_source

# 의존성 설치
RUN pip3 install -r requirements.txt

# container가 구동되면 실행
ENTRYPOINT ["python", "app.py"]
FROM ubuntu:16.04

RUN apt-get update && apt-get install -y vim apache2

COPY index.html /var/www/html/

CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

 

# docker image 생성

docker build <옵션> <Dockerfile 경로>

docker build -t myweb:0.1 .

docker build -t myweb:0.1 /root/test/

 

# docker run 실행

docker run -it ubuntu:20.04

docker run -d -p 80:80 nginx

docker run -i -t --name my_ubuntu ubuntu:16.04 /bin/bash

docker run -d --name my_nginx -p 80:80 -p 3306:3306 nginx:latest

 

 

 

# RUN 명령어 (Docker 이미지를 생성할 때 실행)

# Shell 방식
RUN apt-get install apache2 vim -y

# Exec 방식
RUN ["/bin/bash", "-c", "apt-get install apache2 vim -y"]

 

# CMD 명령어 (컨테이너 실행 시 매번 명령을 실행 : 여러줄을 작성할 수 있으나 마지막 CMD명령문만 실행)

# Shell 방식
CMD apachectl -D FOREGROUND

# Exec 방식
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

 

# ENTRYPOINT 명령어 (컨테이너 실행 시 매번 명령을 실행)

# Shell 방식
ENTRYPOINT apachectl -D FOREGROUND

# Exec 방식
ENTRYPOINT ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

 

# ENV 명령어

# Key Value 형식
ENV ServerName "myweb"
ENV ServerPw mypass

# Key = Value 형식
ENV ServerName="myweb" \
    ServerPw=mypass

 

# WORKDIR 명령어 (작업용 디렉토리를 지정)

WORKDIR /test
WORKDIR abc

 

# ADD 명령어 (호스트상의 파일을 Docker Image에 추가 - URL 원격파일 가능)

ADD index.php /var/www/html/

 

# COPY 명령어 (호스트상의 파일을 Docker Image에 복사 - URL 원격파일 불가능)

COPY index.php /var/www/html/

 

# VOLUME 명령어 (파일을 컨테이너에 저장하지 않고 호스트의 "/var/lib/docker/volumes/" 경로에 저장)

VOLUME /var/log

 

# USER 명령어 (사용자를 지정)

RUN ["useradd", "-m", "testuser"]

USER testuser
RUN ["touch", "/home/testuser/abcd"]

 

# LABEL 명령어

LABEL maintainer "Hong <hong@abc.com>"
LABEL title="Test"
LABEL version="0.1"
LABEL description="Test Label"
docker inspect --format="{{ .Config.Labels }}" <컨테이너명>

 

# EXPOSE 명령어 (공개 포트를 호스트와 연결)

EXPOSE 80
EXPOSE 443

or 

EXPOSE 80 443

 

# SHELL명령어 (Default로 리눅스 경우 "/bin/sh"로 설정)

# "RUN", "CMD", "ENTRYPOINT" 명령어를 사용할 때 유효

SHELL ["/bin/bash", "-c"]

RUN echo "TEST"

 

 

# 참고

https://blog.d0ngd0nge.xyz/docker-dockerfile-write/

 

 

+ Recent posts