目錄
- 准備知識
- 准備工作
- Docker網路
- 運行
- --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就是用來隔離網絡的。容器會分配一個獨立模式,有四種模式:
- Bridge(默認):bridge模式是Docker默認的網絡設置,此模式會為每一個容器 分配Network Namespace、設置IP等,並將一個主機上的Docker容器連接到一個虛擬網橋上。
- Host:不會創建獨立的network namespace。Docker容器中的進程處於宿主機的網絡環境中,相當於Docker容器和宿主機共同用一個network namespace,使用宿主機的網卡、IP和端口等信息。但是,容器的其他方面,如文件系統、進程列表等還是和宿主機隔離的。
- None:沒有網絡,Docker不會和外界進行通訊。Docker容器擁有自己的Network Namespace,但是,並不為Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等信息。需要我們自己為Docker容器添加網卡、配置IP等。
- 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