【Docker-4】-Docker啟動nginx


目錄

  1. 准備知識
  2. 准備工作
  3. Docker網路
  4. 運行
  5. --help

一、准備知識

Docker 運行Nginx。Nginx是一個web服務器,需要持久運行

前台掛起或后台運行:前台可以通過ctrl+C關閉進程,進程關閉,鏡像也會關閉,所以要選擇后台運行

進入容器內部:看看什么情況

二、准備工作

1、安裝nginx

從國內https://hub.daocloud.io下載安裝

docker pull daocloud.io/library/nginx

參看是否安裝成功:

2、運行:docker run daocloud.io/library/nginx

發現啥都沒有出現,其實已經運行了,這種方式是前台運行的情況。

3.1、再打開一個窗口,查看運行的情況:

status是up,表示nginx在運行,

3.2 docker stop 35129

關閉ID為35129開頭的進程。

4、運行docker run -d daocloud.io/library/nginx

這個是后台運行的方式

5、進入容器的內部(調試,看日志等)docker exec

5.1 獲取幫助:docker exec --help

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

比較常用的-i以交互模式運行容器,通常與 -t 同時使用; -t分配一個偽終端,多個option可以寫道一起,比如下面的命令:

5.2 docker exec -it 439b7119631a bash

進入439b7119631a ,即是4步開啟的nginx所在的容器。

5.3 ls pwd

和Linux一樣,查看文件和打印當前工作目錄

5.3 which nginx

查看路徑:

5.4 exit

退回原來的界面

三、Docker網路

3.1 網絡類型:

隔離,Linux使用namespace用於文件隔離 pid namespace隔離進程,network namespace就是用來隔離網絡的。容器會分配一個獨立模式,有四種模式:

  1. Bridge(默認):bridge模式是Docker默認的網絡設置,此模式會為每一個容器 分配Network Namespace、設置IP等,並將一個主機上的Docker容器連接到一個虛擬網橋上。
  2. Host:不會創建獨立的network namespace。Docker容器中的進程處於宿主機的網絡環境中,相當於Docker容器和宿主機共同用一個network namespace,使用宿主機的網卡、IP和端口等信息。但是,容器的其他方面,如文件系統、進程列表等還是和宿主機隔離的。
  3. None:沒有網絡,Docker不會和外界進行通訊。Docker容器擁有自己的Network Namespace,但是,並不為Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等信息。需要我們自己為Docker容器添加網卡、配置IP等。
  4. Container:Container模式指定新創建的容器和已經存在的一個容器共享一個Network Namespace,而不是和宿主機共享。新創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口范圍等。同樣,兩個容器除了網絡方面,其他的如文件系統、進程列表等還是隔離的。兩個容器的進程可以通過lo網卡設備通信。

3.2 端口映射:

Host模式:相當於和主機共享接口,不需要做映射。

Bridge模式:主機的端口到網橋,網橋映射到橋接模式的虛擬網口

四、運行

docker run -d -p 8080:80 daocloud.io/library/nginx

-p:前面8080是主機的端口,容器的端口是80,

netstat -na | grep 8080

這條命令在windows下的docker不能映射出來,也不能從網頁訪問(具體實現方法見文末附件),臨時從Vmware的虛擬機,在Linux上面安裝好docker后,進入root權限,執行上述步驟,發現能成功映射,如下圖所示:

再網址上輸入:localhost:8080,能成功進入nginx,表明已經運行成功,如下圖所示:

docker run -d -P daocloud.io/library/nginx

注意這里使用大寫的P,表示使用隨機端口取映射,操作如下圖所示:

目前啟動的即使隨機端口:

五、Docker Debug tips

1、Docker 起不來,怎么辦?

---$docker run –v

2、看log日志

---$docker logs [container_id]

3、Inspect獲取容器/鏡像的元數據

$docker inspect [container_id]

4、在Docker實例中執行shell命令

$docker exec -it [container_id] bash

附件:Window下無法對docker容器進行端口映射

1、問題原因

  docker是運行在Linux上,我們在Windows系統中運行docker,實際上是先在Windows下先安裝了一個Linux環境,然后在這個環境中運行的docker。所以,訪問服務中使用的localhost指的是這個Linux環境的地址,而不是我們的Windows。

2、解決方法:

QuickStart終端 執行docker-machine ip default,找到Window系統下的Linux環境的地址,如下圖:

本機瀏覽器用 上圖返回的地址+端口號訪問服務192.168.99.100:8080

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM