Docker 容器為執行應用程式提供了隔離環境,確保了一致性和可移植性。在使用 Docker 容器時,能夠檢查和連線到它們的外殼至關重要。這樣做可以讓您執行命令、排除故障並實時監控容器的行為。
本文將探討如何訪問本地和遠端 Docker 容器進行維護和更新。
為什麼需要接觸容器
訪問容器對於在容器化環境中進行有效管理和故障排除至關重要。通過它,您可以分析容器的日誌和執行時資訊,並輕鬆識別和解決錯誤。
通過訪問容器,還可以執行命令進行快速配置更新、軟體包安裝和其他管理任務。如果沒有訪問許可權,你就必須用更新的配置重建整個容器映像,這可能既耗時又低效。
容器還必須能夠在分散式應用生態系統中相互通訊。因此,您需要訪問容器來診斷命令,並確保容器之間的連線是健康的。
雖然可以通過傳統的安全外殼(SSH)協議訪問容器,但 Docker 提供了幾種內建方法來幫助您節省時間和提高效率。這些方法包括:
docker exec
docker run
docker attach
docker compose exec
docker compose run
每種方法都有其特定的使用情況和優勢。瞭解適合您的使用案例的正確命令,可以幫助您優化方法。
如何以及為什麼使用 docker exec
docker exec
允許你訪問正在執行的容器的 shell 會話並執行命令,而無需啟動一個新例項。需要注意的是,這個命令不是永續性的,也就是說,如果容器關閉或重啟,它不會重新執行。
要訪問一個正在執行的容器,你需要知道它的名稱或 ID(可以通過執行 docker ps -a
獲取)。然後,把它輸入到下面的命令中:
docker exec -it /bin/bash
使用 docker exec 訪問容器
如何以及為什麼使用 docker run
docker run
命令允許你啟動一個新容器,並立即訪問它的 shell。預設情況下,這個容器不會附加到當前的 shell 會話,但你可以使用 -it
選項來附加它。
以下命令允許你啟動一個新容器,將其附加到當前 shell 會話,並生成一個 bash shell:
docker run -it /bin/bash
使用 docker run 訪問容器
如何以及為何使用 docker attach
docker attach
命令對於監控和除錯容器執行非常有用。它允許你連線到正在執行的容器,並實時檢視其標準輸入、輸出和錯誤流。
要使用它,請使用 docker run
啟動容器。然後,按 Ctrl+P 和 Ctrl+Q 從容器中分離。你也可以為該容器提供 -d
標誌。
容器在後臺執行後,可通過以下命令訪問它:
docker attach
使用 docker attach 訪問容器
如何以及為何使用 Docker Compose
Docker Compose 使您能夠建立和執行多容器 Docker 應用程式。您可以用它在 YAML 檔案中定義組成應用程式的服務,然後使用該檔案一起啟動和管理所有容器。它適用於需要快速啟動複雜環境的開發和測試環境。
要訪問已在執行的特定容器,請執行以下 docker compose
命令,然後輸入服務名稱和要執行的命令:
docker compose exec app /bin/bash
該命令會在容器內啟動一個新程序,執行指定的命令。你可以用它在容器內執行任何命令,包括像 bash 這樣的互動式 shell。
同樣,如果你想使用 Docker Compose 啟動一個新容器並立即訪問它,請執行以下命令:
docker compose run app /bin/bash
請注意, docker compose
有兩種不同的語法: docker-compose
(版本 1)和 code>docker compose(版本 2)。版本 2 的語法更靈活、更強大,因此建議儘可能使用它。
使用 Docker Compose 訪問容器
如何在 Docker 容器中新增 SSH 伺服器
在 Docker 容器中新增 SSH 伺服器有助於管理容器化應用程式並排除故障。通過 SSH 伺服器,您可以從任何地方遠端訪問和管理容器、執行命令和檢查日誌。
你可以在構建容器前將 SSH 伺服器新增到 Dockerfile 中,然後用 SSH 客戶端連線它。或者,你也可以通過在執行中的容器內生成一個 shell 並在其中安裝 SSH 伺服器來新增臨時 SSH 訪問。
在構建 Docker 容器時加入 SSH 伺服器
在構建 Docker 容器時,如果希望持續 SSH 進入容器,在容器內包含 SSH 伺服器會很有用。它允許在開發或故障排除期間對容器進行遠端訪問和除錯。在容器內安裝 SSH 伺服器還可以安全地將檔案傳輸到容器或從容器中傳輸出去。
要在構建時加入 SSH 伺服器,只需對容器的 Dockerfile 做一些修改。下面是一個包含 SSH 伺服器的 Dockerfile 示例:
FROM debian:latest RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:root123' | chpasswd RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
使用 SSH 伺服器構建的 Docker 容器
這段程式碼使用最新的 Debian 映像構建一個容器,並安裝 SSH 伺服器。它還會為 SSH 伺服器建立一個新目錄,設定根密碼,並通過 SSH 配置啟用根登入。
最後,它還公開了 SSH 的預設埠 22。
要使用這個 Dockerfile,先用 docker build
命令構建容器,然後用 docker run
執行容器。下面是一個例子:
docker build . -t ssh-container docker run -d -p 2222:22 ssh-container
此命令使用 Dockerfile 構建一個容器,並將其標記為 ssh-container。使用 -d 以分離模式執行容器。然後,用 -p 將容器內的埠 22 對映到主機上的埠 2222。
容器執行後,你可以使用 ssh
命令 SSH 登入:
ssh root@localhost-p 2222
提示輸入密碼時,請鍵入在 YAML 檔案中設定的密碼。在本例中,密碼是 “root123″。現在,你已連線到容器內執行的 SSH 伺服器。這意味著你可以執行遠端除錯或在容器之間傳輸檔案。
為執行中的 Docker 容器臨時新增 SSH 伺服器
你還可以使用 docker exec
命令為執行中的容器新增 SSH 伺服器:
docker exec <container_name_or_id> /bin/bash
獲得容器訪問許可權後,安裝 OpenSSH 伺服器並啟動 SSH 守護程序:
apt update && apt install openssh-server && /usr/sbin/openssh -D
這將在容器內開啟 SSH 伺服器的新例項。現在你可以使用本地計算機上的 SSH 客戶端連線到它了。
請注意,只有您或您的團隊在執行或構建階段暴露了 SSH 埠,您才能通過 SSH 連線到容器。
連線到容器的 SSH 伺服器
首先從容器管理平臺或服務中確定容器的 IP 地址或主機名。
要連線到 IP 地址,請使用 ssh
命令:
ssh [username]@[container-ip-address]
出現提示後,輸入指定使用者名稱的密碼。某些 SSH 伺服器可能會使用基於金鑰的安全性來代替密碼。
現在你應該有一個連線到容器的遠端終端會話了。
小結
隨著 Docker 越來越流行,能夠檢查環境中執行的容器非常重要。這一功能可讓您在開發過程中診斷和解決問題。
Docker 還為各種開發任務提供了一套通用的內建命令。您可以使用這些命令來簡化工作流程,而無需依賴傳統的 SSH 方法。
評論留言