Skip to main content

Docker 筆記

Docker 常用 command line

docker images # 查看本機所有 images
docker ps -a # 列出所有容器

命令會啟動一個新的 Docker 容器,並在其中執行 Node.js 命令列 shell。-i 標誌會允許您與容器進行互動,而-t 標誌會為容器分配一個終端。node 部分會指定要執行的 Node.js 命令。

docker run -it node

Docker run 命令

-d : 在後台執行
-p : 對應的port
--name: container 名稱
--rm:容器停止後,自動刪除(測試用)
-t : 開啟終端機
-i : 可以輸入
info

範例:執行 docker 建立一個 nginx container 並且把本地的 7777 對應到 container nginx 的 80 port

docker run -d -p 7777:80 --name webserver nginx

Docker ps 命令

docker ps [option] # 列出所有容器
# option
-a :顯示所有的容器,包括未運行的。
-f :根據條件過濾顯示的內容。
--format : 指定返回值的模板文件。
-l : 顯示最近創建的容器。
-n 目錄:最近創建的n個目錄。
--no-trunc :不截斷輸出。
-q :靜默模式,只顯示容器編號。
-s :顯示總的文件大小。

實例

runoob@runoob:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
09b93464c2f7 nginx:latest "nginx -g 'daemon off" ... 80/tcp, 443/tcp myrunoob
96f7f14e99ab mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysql

輸出詳情介紹:

  1. CONTAINER ID:容器 ID。
  2. IMAGE: 使用的鏡像。
  3. COMMAND:啟動容器時運行的命令。
  4. CREATED: 容器的創建時間。
  5. STATUS:容器狀態。
    • 狀態有 7 種:
      1. 創建(已創建)
      2. restarting(重啟中)
      3. 運行(運行中)
      4. 移除(遷移中)
      5. paused(暫停)
      6. 退出(停止)
      7. 死亡(死亡)
  6. PORTS:容器的端口信息和使用的連接類型(tcp\udp)。
  7. NAMES:自動分配的包含名稱。

參考文章

docker --help

讓你可以進到 docker 去輸入一些 input 好可以進行程式的運算

-i interactive
-t

docker images & containers: Core Building Blocks

說明主要 build image 和 如何做用 container 的內容

delete image & containers

docker rm [container_id, container_id2, container_id3...]

removing stopped containers automatically

這個比較不懂

簡單的範例

建立一個簡單的 express server,

const express = require("express");
const app = express();
const port = 3000;

app.get("/", (req, res) => res.send("Hello World!"));

app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`));

dockerFile

FROM node

WORKDIR /app

COPY package.json /app

RUN npm install

COPY . /app

EXPOSE 3000

CMD ["node", "server.js"]

# docker build
# 這樣子我們建立了一個 image,接下來我們要把這個 image 執行起來,就可以看到我們的 server 了
# docker run -p 3000:3000 -d <image id>
# -p 3000:3000 代表我們要把 container 的 3000 port 對應到 host 的 3000 port
# -d 代表我們要把 container 在背景執行
# <image id> 就是我們剛剛 build 出來的 image id
這些是 Docker 的命令,用於管理容器和映像。以下是每個命令的解釋:

1. docker ps
列出當前運行中的容器。

2. docker stop <container id>
停止運行中的指定容器,<container id> 是容器的唯一標識符。

3. docker rm <container id>
刪除指定的容器,必須在容器停止後才能刪除。

4. docker rmi <image id>
刪除指定的映像,<image id> 是映像的唯一標識符。

5. docker run -p 3000:3000 -d <image id>
使用指定的映像啟動一個新的容器,並將容器的 3000 端口映射到主機的 3000 端口,-d 表示在後台運行。

6. docker exec -it <container id> /bin/bash
在指定的容器中啟動一個交互式的 Bash 終端,允許用戶進入容器進行操作。

7. docker logs <container id>
查看指定容器的日誌輸出,這對於調試和監控容器的運行狀態非常有用。

這些命令是 Docker 的基本操作,幫助用戶管理和操作容器及映像。
docker run build .
docker run -p 3000:3000 [image_id]

檢查 image 的方法

看看我有多少的 images

docker images
docker image inspect [image_id]

sharing images & container

Managing Data & Working with Volumes

在 image 裡面我們所能抓到的值,只能用來 read,但是在 container 裡面我們可以對裡面的值做 read, write 的動作

data 種類

  1. application (code + env)

    read-only (images)

  2. temporary (cache, log, user input)

    read-write (container)

  3. persistent (database, config) read-write (container && volume)

Networking(Cross-container communication)

Building Multi-Container Applications

Docker Compose: Elegant Multi-Container Management

Working with "Utility" Containers & Executing Commands in Containers

A More Complex Setup bla bla bla

Deploying Docker Container

Docker & Container Summary

Kubernetes in Action - Diving into the Core Concepts

Managing Docker & Volumes with Kubernetes

Kubernetes - Deploying

Roundup & Next Steps