---
# System prepended metadata

title: '[Docker] Dockerfile'
tags: [docker, Dockerfile]

---

# [Docker] Dockerfile
[TOC]

## Dockerfile內的指令
```=dockerfile!
# FROM=使用的基礎映像(images)
FROM ubuntu:latest

# LABEL
# maintainer=此 dockerfile 撰寫者和維護者的資訊
LABEL maintainer="your-email@example.com"

# RUN=在容器內執行的命令
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip

# COPY=將外部檔案複製到容器內
COPY ./app /app

# ADD=將外部檔案複製到容器內。若外部檔案為tar，則會自動解壓縮到容器內;外部檔案可填url。
ADD ./app /app

# WORKDIR=移動至某目錄(等同 cd /xxx)
WORKDIR /app

# ENV=用來設定環境變數
ENV NGINX_MAX_UPLOAD 4m

# RUN=在容器內執行的命令
RUN pip3 install -r requirements.txt

# EXPOSE=容器要開放的端口。docker run時也要下expose。
EXPOSE 80

# CMD=容器啟動時執行的命令。若 docker run 有帶指令(docker run [ContainerID] bash)，則會執行bash，而不執行CMD指令。
CMD ["python3", "app.py"]

# ENTRYPOINT=容器啟動時執行的命令。一定會被執行。
ENTRYPOINT ["docker-entrypoint.sh"]

# ONBUILD=若有人將這一個Image設為基底Image時，才會執行的指令。執行的時機在FROM指令之後。
ONBUILD RUN mkdir my_dir

```

接下來進入 dockerfile 的目錄中下指令建立 docker image
```=cmd
$ cd /xxx/xx/xxx/

$ docker build -t <image-name> .
$ docker build -t my-app .
```

參考來源：
[Dockerfile reference](https://docs.docker.com/engine/reference/builder/)

## CI/CD
[docker docs - Configure CI/CD for your application](https://docs.docker.com/language/java/configure-ci-cd/)