/

在安裝 Docker 後的第一步

在安裝 Docker 後的第一步

完成Docker安裝後,您應該會看到一個新視窗,引導您進行使用Docker建立映像檔容器的第一步驟:

這是一種有趣的方式,讓您快速下載並執行第一個容器映像檔。

您可以在此應用程序內建的右側終端中運行命令,但我更喜歡在自己的終端中執行。

我打開 macOS 終端,運行 cd dev 進入家目錄中的 dev 文件夾,然後創建一個 docker 子目錄,將用於容納所有的Docker實驗。我運行 cd docker 進入此目錄,然後執行以下命令:

1
git clone https://github.com/docker/getting-started

此命令創建了一個名為 getting-started 的新文件夾,其中包含 https://github.com/docker/getting-started 倉庫的內容:

現在從該文件夾中,以以下方式運行 docker build 命令:

1
docker build -t docker101tutorial .

這將使用當前文件夾中的內容構建映像檔,並將其標記為 docker101tutorial

這是Dockerfile的內容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 安裝應用程序的基本要求。
# 此階段用於支持開發。
FROM python:alpine AS base
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

# 執行測試以驗證應用程序
FROM node:12-alpine AS app-base
WORKDIR /app
COPY app/package.json app/yarn.lock ./
RUN yarn install
COPY app/spec ./spec
COPY app/src ./src
RUN yarn test

# 清除node_modules並創建zip檔案
FROM app-base AS app-zip-creator
RUN rm -rf node_modules && \
apk add zip && \
zip -r /app.zip /app

# 適合開發用的容器 - 實際文件將被掛載進來
FROM base AS dev
CMD ["mkdocs", "serve", "-a", "0.0.0.0:8000"]

# 執行mkdocs網站的實際構建
FROM base AS build
COPY . .
RUN mkdocs build

# 從構建中提取靜態內容
# 並使用nginx映像檔伺服內容
FROM nginx:alpine
COPY --from=app-zip-creator /app.zip /usr/share/nginx/html/assets/app.zip
COPY --from=build /app/site /usr/share/nginx/html

正如您所看到的,它不僅從一個基礎映像檔創建我們的映像檔,而是從3個基礎映像檔創建:python:alpinenode:12-alpinenginx:alpine

當您運行 docker build -t docker101tutorial . 時,它將從下載第一個基礎映像檔開始:

然後它將運行我們在Dockerfile中定義的所有命令:

它一直繼續運行,直到到達結尾:

現在我們有了映像檔 docker101tutorial,我們可以基於此映像檔運行容器。

運行以下帶有參數的 docker run 命令:

1
docker run -d -p 80:80 --name docker-tutorial docker101tutorial

我們使用 -d 選項在背景中運行容器並打印容器ID。如果您錯過了此標誌,直到容器退出時,您將不會立即返回終端(但如果它具有長期生存,例如運行一個像Node應用程序之類的服務,它將不會自動退出)。

-p 選項用於將容器的80端口映射到主機的80端口。容器在80端口上公開Web伺服器,我們可以將我們計算機上的端口映射到容器公開的端口。

--name 分配一個名稱給容器,最後我們有了我們應該使用來創建容器的映像檔名稱(docker101tutorial)。

如果您對命令選項有任何疑問,運行 docker <命令> --help,在這種情況下運行 docker run --help 將獲得非常詳細的說明:

此命令非常快速,您將立即獲得容器ID: