---
# System prepended metadata

title: Docker 學習筆記
tags: [Docker]

---

# Docker 學習筆記
此篇記錄[Docker and Kubernetes - Full Course for Beginners 教學影片](https://www.youtube.com/watch?v=Wf2eSG3owoA&feature=youtu.be&ab_channel=freeCodeCamp.org)中提到的及一些常用指令

停止容器
```
docker stop [container id/ container name]
```
用start則可重新啟動容器
```
docker start [container id/ container name]
```
若要刪除容器
```
docker rm [container id/ container name]
```
若用docker ps -aq可取得所有容器的id only可以用來帶入參數
```
docker rm $(docker ps -aq)
```
加入-f則可強制刪除正在執行的容器
```
docker rm -f $(docker ps -aq)
```
將映像檔加入不同標籤名
```
docker tag [image名]:[tag名] [image名]:[tag名2]
```
**Debug**可用docker logs查看log
```
docker logs [container id前三碼]
```
加上-f則可自動追蹤這個容器的log，若需停止需按CTRL+C
```
docker logs -f [container id 前三碼]
```
也可用inspect取得更多資訊
```
docker inspect [container id/ container name]
```
**Docker Volume**可以讓host主機和container之間的檔案互通
例如要將電腦中的html檔案放到運行nginx的容器的資料夾中則先cd到有html檔案的目錄後再下指令
pwd 會帶入 present working directory
:ro 為read only
```
docker run --name website -v $(pwd):[容器目標路徑]:ro -d -p 8080:80 nginx
```
如此一來當我們主機中的html檔案被更新時docker上的該檔案也會同步更新
若需查看container內容可用exec進去container內再下ls看檔案列表
-it interactive mode 
sh/bash 後面執行shell script或bash指令
```
docker exec -it [container id 前三碼] sh
```
```
docker exec -it [container id/ container name] bash
```
若進去container中的目錄路徑touch某個檔案則我們主機中之前指定連通的資料夾中也會出現該檔案

若今天要在其他container使用相同的資料則可用 --volumes-from
```
docker run --name [新的容器名] --volumes-from [舊的容器名] -d -p 8081:80 nginx
```
**Dockerfile**範例(運用cache提升效能)
```
FROM node:latest
WORKDIR /app
ADD package*.json /.
RUN npm install
ADD . . (current directory, working directory)
CMD node index.js
```
若需減少映像檔的體積可下載Alpine Linux的版本
###### tags: `Docker`