---
# System prepended metadata

title: Docker

---

# Docker
![image](https://hackmd.io/_uploads/Bk9BF5B40.png)

![image](https://hackmd.io/_uploads/r1ydF9BVA.png)

## Dockerfile
1. FROM 決定環境
2. WORKDIR 決定你的程式在容器資料夾
3. COPY 複製
4. RUN 執行指令
5. CMD，ENTRYPOINT 程式進入點
5.1 ENTRYPOINT可以被args修改
ENTRYPOINT ["node","app.js"]
e.g. docker run image --build

## 基本指令
#### docker build .
> 幾個常見
1. -f 指定路徑，如果你不想用Dockerfile當作名稱
2. -t 指定名稱

#### docker tag <old_image>:<old_tag> <new_image>:<new_tag>
> 改名用

#### docker run -p 80:80 image_name
> 幾個常見 
1. --rm  自動刪除container模式
2. -d 分離模式 
3. -it 進入互動模式(前端比較常用)
4. -e 設置環境變數
5. -v 設置volume
6. --network 設置網路

#### docker pull image_name || docker push image_name

#### docker ps 查看現在在用的container

### volume 分三種用log作範例
#### 第一種: annoymous
1. 生命週期隨著container消失而消失
2. 範例
> -v /app/logs
#### 第二種: name
1. 交給docker控管
2. 範例
> -v logs:/app/logs
#### 第三種: bind mounts
1. 交給host的實體路徑控管
2. 範例
> -v ./logs:/app/logs