```bash
# 快速產生一個 python 容器
docker run -ti --rm python bash
# 快速產生一個 ubuntu 沙盒做測試
docker run -it --rm ubuntu bash
docker run -it --name sandbox ubuntu bash
# 快速產生一個 webserver 容器
docker run -d -p 192.168.0.254:7777:80 --rm nginx
# Docker 指定連接埠
# Where the first 8081 is the local port and the second 8080 is the container port.
docker run -p 8081:8080 -tid java
# Docker 容器掛載本地資料夾
docker run -dti --name test \
--rm \
-v /home/local/f1:/home/docker/f1 \
-v /home/local/f2:/home/docker/f2 \
java bash
# Docker 開啟橋接網路
docker network create -d bridge my-net
docker run -it --rm --name busybox1 --network my-net busybox sh
docker run -it --rm --name busybox2 --network my-net busybox sh
# 取得容器 IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
# Open Bash to running container
docker exec -it ubuntu_bash bash
# Docker exec as root
docker exec -ti -u 0 74f86665f0fd bash
# Docker remove <none> TAG images
docker image prune
# 產生一個網頁伺服器
docker run --rm -v /some/content:/usr/share/nginx/html:ro nginx
```
### 設定容器的 log 大小
```bash
docker run --log-opt max-size=10m --log-opt max-file=7 <image>
```
### 確認容器的資源
使用 `docker stats` 命令可以顯示每個正在運行的容器的資源使用情況,包括 CPU、記憶體和網路等。
```bash
docker stats
```
這將顯示正在運行的每個容器的即時資源使用情況,包括記憶體使用量。
### prune
Docker 提供了一系列的 prune 指令,用於清理未使用的資源,包括容器、映像、卷和網絡等。以下是一些常用的 Docker prune 指令:
1. **清理未使用的容器**:
```bash
docker container prune
```
2. **清理未使用的映像**:
```bash
docker image prune
```
3. **清理未使用的卷**:
```bash
docker volume prune
```
4. **清理未使用的網絡**:
```bash
docker network prune
```
5. **清理建置快取檔案**:
```bash
docker builder prune
```
這些 prune 指令會刪除 Docker 中未使用的相應資源,從而釋放磁盤空間並清理系統。在運行這些指令之前,請確保你了解它們的影響,因為它們將永久刪除未使用的資源,這可能會影響你的 Docker 環境。
清理不必要的Docker映像和容器:執行`docker system prune -a`命令可以清理掉所有未使用的映像、容器和網絡。
### images
```bash
docker images --filter 'dangling=false' --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}' | sort -k 4
```
這個命令會列出所有非過期的映像,並根據映像創建的時間進行排序。
`--filter 'dangling=false'` 是一個過濾條件,用來篩選出不是懸空(dangling)的映像檔。懸空的映像檔是指沒有被任何容器使用或參考的映像檔。透過這個過濾條件,我們可以只列出正在被使用中的映像檔,而不包括懸空的映像檔。
`--format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}'` 用於指定Docker映像的顯示格式。在這個例子中,它指定了要顯示的每個映像的四個屬性:存儲庫(repository)、標籤(tag)、ID和創建時間。這將導致輸出以表格形式呈現,每個映像一行,每個屬性在相應的列中。
```bash
# 根據 Image 的名稱(imageName) 搜尋目前的 Images
# 保留數個 Image (keepSize) 剩下的逐一詢問是否刪除
deleteImagesOver() {
imageName=$1
keepSize=$2
images=$(sudo docker images $imageName --filter 'dangling=false' --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}' | sort -r -k 4 | tail -n +$keepSize | awk '{print $3}')
for image in $images; do
sudo docker inspect --format '{{.RepoTags}} {{.Created}}' $image
echo -n "Delete(Y/N) Default Y: "
read -r flag
flag=${flag:-Y}
# 顯示輸入值
if [ "$flag" = "Y" ]; then
sudo docker rmi $image
fi
done
}
```
### 匯出/匯入
要匯出指定的 image,可以使用 `docker save` 指令。以下是具體的步驟:
1. 確認已經下載並且存在該 image,使用 `docker images` 指令查看所有本地的 images。
2. 使用以下指令將 image 匯出到檔案中:
```
docker save -o <匯出的檔案名稱.tar> <image名稱>
```
例如,如果要匯出名稱為 myimage 的 image 到檔案 myimage.tar 中,指令如下:
```
docker save -o myimage.tar myimage
```
3. 執行完上述指令後,即可在當前目錄中找到匯出的檔案 myimage.tar。
要將由 docker save 做成的 tar 檔匯入到 Docker 中,可以使用 docker load 命令來完成。以下是一個示例命令:
```bash
docker load -i /path/to/your/image.tar
```
請將 "/path/to/your/image.tar" 替換為您保存的 tar 檔路徑。執行此命令後,Docker 將會將 tar 檔中的映像恢復到本地 Docker 映像中。