簡體   English   中英

如何啟動docker容器作為服務器

[英]How to start docker container as server

我想運行一個托管一個簡單的Web應用程序的docker容器,但是我不明白如何設計/運行圖像作為服務器。 例如:

docker run -d -p 80:80 ubuntu:14.04 /bin/bash

這將啟動並立即關閉容器。 相反,我們可以以交互方式啟動它:

docker run -i -p 80:80 ubuntu:14.04 /bin/bash

這有效,但現在我必須為每個正在運行的容器打開交互式shell嗎? 我寧願啟動它並讓它在后台運行。 黑客將使用永不返回的命令:

docker run -d -p 80:80 {image} tail -F /var/log/kern.log

但是現在我再也無法連接到shell,以檢查應用程序正在執行的操作。

有沒有辦法在后台啟動容器(就像我們為vm所做的那樣),允許從主機附加/分離shell? 還是我完全忽略了這一點?

docker run的最后一個參數是在容器中docker run的命令。 當你運行docker run -d -p 80:80 ubuntu:14.04 /bin/bash ,你正在容器中運行bash而已。 您實際上想要在容器中運行Web應用程序並保持該容器存活,因此您應該使用docker run -d -p 80:80 ubuntu:14.04 /path/to/yourapp

但是您的應用程序可能依賴於某些配置才能運行。 如果它從環境變量讀取其配置,則可以將-e key=value參數與docker run 如果您的應用程序需要配置文件,您應該首先使用Dockerfile來設置配置。

本文提供了在容器中運行節點應用程序的完整示例。

docker的用戶傾向於假設容器是一個完整的VM,而docker設計概念更側重於最優的容器化而不是模仿容器內的VM。

兩者都是正確的,但是一些實現細節在開始時並不容易熟悉。 我試圖以一種更容易理解的方式總結一些實現差異。

  1. SSH

SSH將是進入Linux VM(或容器)的最直接的方式,但是許多dockerized模板沒有安裝ssh服務器。 我相信這是因為容器的優化和安全原因。

  1. 碼頭工人附加

如果開箱即用,docker attach可以很方便。 但是在編寫時它並不穩定 - https://github.com/docker/docker/issues/8521 可能與SSH設置相關聯,但不確定何時完全修復。

  1. 碼頭推薦做法(nsenter等)

Docker在https://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/推薦的一些替代方案(或某些意義上的最佳實踐)

這種做法基本上將可變元素從容器中分離出來並將它們映射到docker主機中的某些位置,以便可以從容器外部操作和/或持久化它們。 在生產環境中可能是一個很好的做法,但是當更多與docker相關的項目圍繞開發和暫存環境時,這不是現在。

  1. bash命令行

“docker exec -it {container id} bash”cloud是非常方便實用的工具,可以進入機器。

  1. 一些基礎知識

    • “docker run”會創建一個新容器,因此不會保存以前的更改。
    • “docker start”將啟動一個現有容器,因此之前的更改仍將在容器中,但是您需要在具有相同image-id的許多容器中找到正確的容器ID。 如果需要,需要“docker commit”來抑制版本。
    • 退出時Ctrl-C將停止容器。 您將需要在末尾附加“&”,以便容器可以運行背景並在按Enter鍵時提示您。

對於原始問題,您可以像您提到的那樣拖尾一些文件以保持進程運行。

要訪問shell,而不是“附加”,您有兩種選擇:

  1. docker exec -it <container_id> /bin/bash

要么

  1. 在容器中運行ssh守護程序,端口映射ssh,然后ssh到容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM