來源: https://docker-curriculum.com/
這篇文章不錯,可以作為第一篇 docker 的入門,我簡單總結了下。順便重溫下之前的内容。
如果你是剛學docker,最好跟着敲一遍。
- 安裝,略,自己去官方文檔查
- 執行
docker pull busybox
去官方拉鏡像
BusyBox 是一個內建了三百多個最常用Linux指令和工具的軟體。
簡單的說BusyBox就好像是個大工具箱,它內建壓縮了 Linux 的許多工具和指令,也包含了 Android 系統的自帶的shell。
- 使用
檢視鏡像docker images
- 建立容器啟動
會看到啥都沒有發生,因為沒有提供任何指令,容器啟動後,運作個空指令就退出了。docker run busybox
- 如果提供個指令呢
這個能看到輸出了,但是容器執行完依然退出了。docker run busybox echo "hello from busybox"
- 我想檢視正在運作的容器
docker ps
沒有任何輸出
試試
可以看到剛剛運作過的容器了,注意 status 列docker ps -a
image.png![]()
docker學習系列4 簡單總結 docker-curriculum
- 如果想以互動式方式運作容器,并進入容器終端,就用
注意 -it 一般是同時出現的docker run -it busybox sh
![]()
docker學習系列4 簡單總結 docker-curriculum
-t tty的縮寫 終端控制台
-i interactive 可互動縮寫
如果想知道 run 後面都能帶什麼參數及含義,請使用
docker run --help
- 一些術語:
- Docker Daemon - Docker為C/S架構,服務端為docker daemon,在背景運作,用于管理,建構,分發容器
- Docker Client - 就是咱們用的指令行工具,還有 GUI 圖形化的 Kitematic
- Docker Hub - 分享,查找鏡像資源的網站
WEBAPPS WITH DOCKER
- 我們運作一個容器
prakhar1989/static-sitedocker run --rm prakhar1989/static-site
是作者維護的鏡像
--rm 當退出容器時自動移除
這裡容器啟動會顯示了 nginx is running,但沒有告訴更多的資訊
按 ctrl+c 退出docker學習系列4 簡單總結 docker-curriculum -
docker run -d -P --name static-site prakhar1989/static-site
-d 放到背景運作
-P 将容器内應用運作使用的端口暴露出來 ( Publish all exposed ports to random ports)
--name 給容器起個名字
![]()
docker學習系列4 簡單總結 docker-curriculum
端口有了,可以打開站點了,還可以使用
docker run -p 8888:80 prakhar1989/static-site
指定端口
![]()
docker學習系列4 簡單總結 docker-curriculum
同時運作了兩個容器
![]()
docker學習系列4 簡單總結 docker-curriculum
- 暫停容器用
static-site 是我們給運作時給容器起的名字,也可以用IDdocker stop static-site
- 後面内容是使用 Dockerfile 建構自己的鏡像并上傳到AWS。由于之前講過而且aws國内使用不友善,此處略過。
- 當docker安裝後,會自動建立三個網絡
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
c2c695315b3a bridge bridge local
a875bec5d6fd host host local
ead0e804a67b none null local
預設使用的是 bridge 橋接。使用
docker network inspect bridge
在 Containers 下面看到正在使用該網絡方式的所有容器。預設所有的容器都會使用bridge,通過剛才的指令還可以看到每個容器配置設定到的内部IP。 一般是 172.17.0.xx。 為了安全及友善,我們需要使某幾個容器之間使用自己的橋接網絡,如何做到呢?
-
建立一個新的bridge網絡,比如docker network
docker network create foodtrucks-net
![]()
docker學習系列4 簡單總結 docker-curriculum
- 運作 Elasticsearch 容器并把剛建立的網絡配置設定給他
docker run -d --name es --net foodtrucks-net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2
- 然後運作Python Flask 容器,并進到bash終端
來測試下能否通路到 Elasticsearch 容器docker run -it --rm --net foodtrucks-net finleyma/foodtrucks-web bash
tips: 通路容器網絡沒有輸入容器的IP位址,用的容器名稱表示,這種能力叫 automatic service discoverycurl es:9200
備注:elasticsearch挺占記憶體的,我伺服器4G記憶體,在docker運作啟動後出現了警告