端口映射
默認容器在外部默認是不可訪問的.
比如進入到容器裏面纔可以操作.
這對於提供網絡請求的應用就不大又好了.
比如我們常見的Nginx.
如果想讓容器可被訪問.
這就需要使用-P參數分配端口.
docker run -d -P nginx
這裏Docker給隨機分配了一個端口32768:
通過瀏覽器訪問這個斷就就可以看到Nginx的歡迎頁了.
如果是使用的歌雲服務器需要注意的是要開放端口:
如果想讓Docker分配指定的端口可以使用-p參數:
docker run -d -p 80:80 nginx
80::80左邊的80是宿主機的端口,右邊的80 是容器內的端口.
這裏我們再瞭解一個–name參數,它可以指定容器的NAME,這個NAME可以在跟其他容器互聯的時候非常有用.
docker run -it --name nginx nginx /bin/bash
接着再開一個窗口啓動一個MySQL容器:
docker run -it --name mysql /bin/bash
默認的Nginx和M有SQL容器中很多常用的命令都沒有:
比如ifconfig和ping;有個叫busybox正好就包含了這些命令.
這裏在Nginx和MySQL鏡像中分別安裝busybox:
apt update
apt install busybox
busybox的使用非常簡單,比如要使用ifconfig查看這兩個容器的ip:
/bin/busybox ifconfig
互相ping ip也是通的:
但是這個ip是在容器創建後我們才知道的.
而Nginx容器中我們可能需要先填寫MySQL的ip,這就成了先有雞還是先有蛋的問題.
那如果我們能像使用localhost這個關鍵字一樣來使用剛定義的nginx和mysql容器.那麼問題就迎刃而解了,當然我們ping的時候會發現是不通的.
容器互聯
Nginx是需要對外提供服務的,而MySQL一般不向外提供服務,但是Nginx需要能訪問MySQL容器,而且需要通過容器name來訪問,這時候就需要容器之間互聯了,我們可以創建一個網絡,把這些需要互聯的容器放到一個網絡中.
查看網絡
查看網絡列表:
docker network ls
默認已經有了3個網絡.
創建網絡
創建一個測試網絡:
docker network create test
刪除之前的nginx和mysql容器,這時候就可以使用容器名了.
docker rm -f nginx
docker rm -f mysql
接着創建自帶網絡的容器:
docker run -it --name nginx --network test nginx /bin/bash
docker run -it --name mysql --network test mysql /bin/bash
愉快地ping通了