# 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/
'Infra Structure > Docker' 카테고리의 다른 글
[Ubuntu] Docker offline 설치 (0) | 2022.10.23 |
---|---|
[Docker] 도커 mongodb 설치 (0) | 2022.08.15 |
[Docker] ubuntu 컨테이너 실행 (0) | 2022.07.16 |
[Docker] sudo 명령없이 docker 사용 (0) | 2022.07.16 |
[Docker Compose] 설치 및 기본 명령어 (0) | 2022.07.16 |