天天看點

docker學習系列4 簡單總結 docker-curriculum

來源: https://docker-curriculum.com/

這篇文章不錯,可以作為第一篇 docker 的入門,我簡單總結了下。順便重溫下之前的内容。

如果你是剛學docker,最好跟着敲一遍。

  1. 安裝,略,自己去官方文檔查
  2. 執行

    docker pull busybox

    去官方拉鏡像

    BusyBox 是一個內建了三百多個最常用Linux指令和工具的軟體。

    簡單的說BusyBox就好像是個大工具箱,它內建壓縮了 Linux 的許多工具和指令,也包含了 Android 系統的自帶的shell。

  3. 使用

    docker images

    檢視鏡像
  4. 建立容器啟動

    docker run busybox

    會看到啥都沒有發生,因為沒有提供任何指令,容器啟動後,運作個空指令就退出了。
  5. 如果提供個指令呢

    docker run busybox echo "hello from busybox"

    這個能看到輸出了,但是容器執行完依然退出了。
  6. 我想檢視正在運作的容器

    docker ps

    沒有任何輸出

    試試

    docker ps -a

    可以看到剛剛運作過的容器了,注意 status 列
docker學習系列4 簡單總結 docker-curriculum
image.png
  1. 如果想以互動式方式運作容器,并進入容器終端,就用

    docker run -it busybox sh

    注意 -it 一般是同時出現的
docker學習系列4 簡單總結 docker-curriculum

-t tty的縮寫 終端控制台

-i interactive 可互動縮寫

如果想知道 run 後面都能帶什麼參數及含義,請使用

docker run --help

  1. 一些術語:
  • Docker Daemon - Docker為C/S架構,服務端為docker daemon,在背景運作,用于管理,建構,分發容器
  • Docker Client - 就是咱們用的指令行工具,還有 GUI 圖形化的 Kitematic
  • Docker Hub - 分享,查找鏡像資源的網站

WEBAPPS WITH DOCKER

  1. 我們運作一個容器

    docker run --rm prakhar1989/static-site

    prakhar1989/static-site

    是作者維護的鏡像

    --rm 當退出容器時自動移除

    這裡容器啟動會顯示了 nginx is running,但沒有告訴更多的資訊

    docker學習系列4 簡單總結 docker-curriculum
    按 ctrl+c 退出
  2. 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
  1. 暫停容器用

    docker stop static-site

    static-site 是我們給運作時給容器起的名字,也可以用ID
  2. 後面内容是使用 Dockerfile 建構自己的鏡像并上傳到AWS。由于之前講過而且aws國内使用不友善,此處略過。
  3. 當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。 為了安全及友善,我們需要使某幾個容器之間使用自己的橋接網絡,如何做到呢?

  1. docker network

    建立一個新的bridge網絡,比如

    docker network create foodtrucks-net

docker學習系列4 簡單總結 docker-curriculum
  1. 運作 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

  2. 然後運作Python Flask 容器,并進到bash終端

    docker run -it --rm --net foodtrucks-net finleyma/foodtrucks-web bash

    來測試下能否通路到 Elasticsearch 容器

    curl es:9200

    tips: 通路容器網絡沒有輸入容器的IP位址,用的容器名稱表示,這種能力叫 automatic service discovery

備注:elasticsearch挺占記憶體的,我伺服器4G記憶體,在docker運作啟動後出現了警告