1. 程式人生 > >Docker 一:入門

Docker 一:入門

Docker 可以用來打包應用、依賴以及環境到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上。

docker 兩個關鍵的部分為容器和映象,這兩者的關係可以理解為 OOP 中類和物件的關係,容器作為物件,映象作為類。Docker 映象是用於建立 Docker 容器的模板,容器可以獨立執行一個或一組應用。
參考 這裡

常用命令

從映象倉庫(類似於程式碼倉庫)拉取已有映象:

docker pull training/webapp
當執行容器(建立映象例項)時,使用的映象如果在本地中不存在,docker 就會自動從 docker 映象倉庫中下載,預設是從 Docker Hub 公共映象源下載。
不確定映象是否存在時可使用 docker search imageName

進行搜尋。

執行示例 web 應用:

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
瀏覽器訪問 http://localhost:5000/ 可見輸出 :“Hello world” 字樣。

  • -d: 讓容器在後臺執行
  • -p: 將容器內部使用的網路埠對映到我們使用的主機上
  • -P: 容器內部埠隨機對映到主機的高階口。
  • training/webapp 為映象名
  • python app.py 為容器啟動後執行的命令

docker run -d training/webapp cat app.py 建立容器然後執行 cat app.py

命令,控制檯就會輸出如下內容:

import os

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    provider = str(os.environ.get('PROVIDER', 'world'))
    return 'Hello '+provider+'!'

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

列出映象列表:

docker images

$ docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
frolvlad/alpine-oraclejdk8   slim                b56494ff6c5c        2 months ago        162MB
training/webapp              latest              6fae60ef3446        3 years ago         349MB

檢視正在執行的容器:

docker ps

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
5efd960f44ee        training/webapp     "python app.py"     10 minutes ago      Up 10 minutes       0.0.0.0:5000->5000/tcp   loving_jackson

docker port 5efd960f44ee 可快捷檢視指定 id 容器的埠對映情況

$ docker port 5efd960f44ee
5000/tcp -> 0.0.0.0:5000
檢視 WEB 應用程式日誌

docker logs 5efd960f44ee

$ docker logs 5efd960f44ee
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [14/Nov/2018 07:14:03] "GET / HTTP/1.1" 200 -
172.17.0.1 - - [14/Nov/2018 07:14:03] "GET /favicon.ico HTTP/1.1" 404 -
檢視容器中的程序

docker top 5efd960f44ee

$ docker top 5efd960f44ee
PID                 USER                TIME                COMMAND
10269               root                0:00                python app.py
檢視容器資訊

返回容器當前資訊的 json 格式資料

$ docker inspect 5efd960f44ee
停止/重啟 容器
docker stop 5efd960f44ee
docker start 5efd960f44ee
刪除容器
docker rm 5efd960f44ee3

移除前需要先將容器停止。

構建映象

構建映象需要藉助 DockerFile 檔案:

FROM frolvlad/alpine-oraclejdk8:slim
COPY test.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

建立後 DockerFile 後就可以建立映象了:
docker build -t test-service:0.0.1 .

  • -t :指定要建立的目標映象名
  • . :Dockerfile 檔案所在目錄,可以指定Dockerfile 的絕對路徑