🪴 Daily gardening

Search

Search IconIcon to open search

Dockerfile

Last updated Oct 2, 2023

# 구성

# 간단한 예시

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 베이스 이미지를 선택
FROM ubuntu:20.04

# 필요한 패키지 설치
RUN apt-get update && apt-get install -y nginx

# 로컬 코드 파일 복사 (dockerfile이 있는 path)
COPY index.html /var/www/html/

# 포트 80 열기
EXPOSE 80

# 웹 서버 실행
CMD ["nginx", "-g", "daemon off;"]

# 명령어

# RUN

# Docker 이미지 생성 방법

1
2
3
(dockerfile이 있는 path로 이동 후)
$ docker build 
$ docker build -t {tag} .

# Tips

# .dockerignore 파일

1
2
3
4
# comment
*/temp*
*/*/temp*
temp?

# ADD 보다는 COPY

# Multi-stage builds

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Stage 1: Build your golang executable  
FROM golang as buildStage  
WORKDIR /app  
COPY . .  
RUN go build -o /go/bin/myapp  
  
# Stage 2: Run the application  
FROM alpine:latest  
COPY --from=buildStage /go/bin/myapp /usr/local/bin/myapp  
CMD ["myapp"]

# Multi-layers and caching

# ONBUILD 명령어

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
FROM ruby:2.4

# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

ONBUILD COPY Gemfile /usr/src/app/
ONBUILD COPY Gemfile.lock /usr/src/app/
ONBUILD RUN bundle install

ONBUILD COPY . /usr/src/app

# USER로 유저 변경하기

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
FROM alpine:latest  
  
# Create a new user and switch to that user  
RUN adduser -D -u 1000 appuser  
USER appuser  
  
# Set the working directory to /app  
WORKDIR /app  
  
# Copy the script to the container and make it executable  
COPY script.sh .  
RUN chmod +x script.sh  
  
# Run the script  
CMD ["./script.sh"]

# 컨테이너 health 체크하기

1
2
3
4
5
6
# Set the command to start the web server  
CMD ["python", "app.py"]  
# Add a healthcheck for the web server  
HEALTHCHECK --interval=5s \\  
            --timeout=5s \\  
            CMD curl --fail <http://localhost:5000/health> || exit 1

# SHELL 사용하기

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

# 메타데이터 생성

1
2
3
4
5
6
7
FROM ubuntu:latest  
LABEL maintainer="Your Name <youremail@example.com>"  
LABEL description="This is a simple Dockerfile example that uses the LABEL and EXPOSE instructions."  
RUN apt-get update && \  
apt-get install -y nginx  
EXPOSE 80  
CMD ["nginx", "-g", "daemon off;"]

# Dockerfile 빌드는 사실 그냥 tar 파일

# References