国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

被忽略的后臺開發神器 — Docker

warnerwu / 1107人閱讀

摘要:后來真正用的時候才發覺,這個簡直是個神器。容器可以被創建啟動停止刪除暫停等。項目由編寫,實現上調用了服務提供的來對容器進行管理。此命令將會停止命令所啟動的容器,并移除網絡啟動已經存在的服務容器。停止已經處于運行狀態的容器,但不刪除它。

剛接觸Docker的時候,以為只是用來做運維。后來真正用的時候才發覺,這個Docker簡直是個神器。不管什么開發場景都能輕松應付。想要什么環境都能隨意生成,而且靈活性更高,更輕量,完美實現微服務的概念。

什么是Docker

Docker是一個開源的應用容器引擎,基于Go語言 并遵從Apache2.0協議開源。傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。它占用的資源更少,能做到的事更多。

與傳統虛擬機的對比
特性 容器 虛擬機
啟動 秒級 分鐘級
硬盤啟動 一般為MB 一般為GB
性能 接近原生 弱于
系統支持量 單機支持上千個容器 一般幾十個
安裝Docker

安裝的方法都挺簡單的,我用的是mac,直接通過Docker官網下載軟件安裝,全程無障礙。

Docker概念

鏡像(images):Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。(直白點可以理解為系統安裝包)

容器(container):鏡像和容器的關系,就像是面向對象程序設計中的實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。(可以理解為安裝好的系統

Docker鏡像使用 一、下載鏡像

大概了解了Docker的概念以后,我們就嘗試拉取flask鏡像使用一下。
查找鏡像可以通過https://hub.docker.com/網站來搜索,或者通過命令搜索。

docker search flask


在這里,我是通過Docker hub官網挑選出了python3.7 + alpine3.8組合的運行環境,alpine是精簡版的linux,體積更小、運行的資源消耗更少。

# 拉取鏡像
docker pull tiangolo/uwsgi-nginx-flask:python3.7-alpine3.8
# 下載好可查看鏡像列表是否存在
docker images
二、運行flask鏡像

下載鏡像以后,就開始運行下試試,感受一下Docker的輕量、快捷。
首先創建個flask運行文件來,在這里,我創建了/docker/flask作為項目文件,然后在根目錄下再創建個app文件夾來存放main.py文件,代碼如下:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World from Flask!"

if __name__ == "__main__":
    # 測試環境下才開啟debug模式
    app.run(host="0.0.0.0", debug=True, port=80)

現在的文件結構:

flask
  └── app
      └── main.py

運行命令

docker run -it --name test -p 8080:80 -v /docker/flask/app:/app -w /app tiangolo/uwsgi-nginx-flask:python3.7-alpine3.8 python main.py

這里說明一下命令的參數含義:
-it 是將-i -t合并起來,作用是可以用指定終端對容器執行命令交互。
--name 對容器進行命名。
-p 將主機的8080端口映射到容器的80端口。
-v 將主機的/docker/flask/app文件掛載到容器的/app文件,如果容器內沒有的話會自動創建。
-w 將/app文件作為工作區,后面的執行命令都默認在該文件路徑下執行。
tiangolo/uwsgi-nginx-flask:python3.7-alpine3.8 鏡像名跟標簽。
python main.py 通過python來運行工作區的main.py文件。
運行結果:


現在主機跟容器的鏈接已經建立起來了,主機通過8080端口就能訪問到容器的網站。

自定義鏡像

在使用別人定制的鏡像時總是不能盡善盡美的,如果在自己項目里面,不能每次都是拉取下來重新配置一下。像上面的鏡像,我可不喜歡這么長的名字,想想每次要敲這么長的名字都頭疼(tiangolo/uwsgi-nginx-flask:python3.7-alpine3.8)。

編寫Dockerfile文件

打開我們剛才的/docker/flask路徑,在根目錄下創建Dockerfile文件,內容如下。

# 基礎鏡像
FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.8

# 沒有vim來查看文件很不習慣,利用alpine的包管理安裝一個來
RUN apk add vim

# 順便用pip安裝個redis包,后面用得上
RUN pip3 install redis

# 將我們的app文件加入到自定義鏡像里面去
COPY ./app /app

現在我們的文件結構是:

flask
├── app
│   └── main.py
└── Dockerfile

剩下的就跑一遍就OK啦!記得一定要在Dockerfile文件同級目錄下執行build命令。

docker build -t myflask .

Sending build context to Docker daemon  4.608kB
Step 1/4 : FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.8
 ---> c69984ff0683
Step 2/4 : RUN apk add vim
 ---> Using cache
 ---> ebe2947fcf89
Step 3/4 : RUN pip3 install redis
 ---> Running in aa774ba9030e
Collecting redis
  Downloading https://files.pythonhosted.org/packages/f5/00/5253aff5e747faf10d8ceb35fb5569b848cde2fdc13685d42fcf63118bbc/redis-3.0.1-py2.py3-none-any.whl (61kB)
Installing collected packages: redis
Successfully installed redis-3.0.1
Removing intermediate container aa774ba9030e
 ---> 47a0f1ce8ea2
Step 4/4 : COPY ./app /app
 ---> 50908f081641
Successfully built 50908f081641
Successfully tagged myflask:latest

-t 指定要創建的目標路徑。
. 這里有個點記住啦,表示是當前路徑下的Dockerfile文件,可以指定為絕對路徑。
編譯完后就通過docker images查看一下,就能看到myflask鏡像了,里面能直接運行python main.py來啟動flask,并且內置了vim和redis包。

Docker Compose讓多容器成為一個整體

我們的每個容器都負責一個服務,這樣容器多的時候一個個手動啟動的話是不現實的。在這種情況我們可以通過Docker Compose來關聯每個容器,組成一個完整的項目。

Compose項目由Python編寫,實現上調用了 Docker服務提供的 API 來對容器進行管理。
# 安裝docker-compose
sudo pip3 install docker-compose
實現能記錄訪問次數的web

在這里,我們通過docker-compose.yml文件來啟動flask容器和redis容器,并將兩個不同容器相互關聯起來。
首先在/docker/flask目錄下創建docker-compose.yml文件,內容如下:

version: "3"
services:
  flask:
      image: myflask
      container_name: myflask
      ports:
        - 8080:80
      volumes:
        - /docker/flask/app:/app
      working_dir: /app
      # 運行后執行的命令
      command: python main.py
      
  redis:
    # 如果沒有這個鏡像的話會自動下載
    image: "redis:latest"
    container_name: myredis

然后我們把上面的main.py代碼修改一下,連接redis數據庫并記錄網站訪問次數。main.py修改后內容如下:

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host="redis", port=6379)


@app.route("/")
def hello():
    count = redis.incr("visit")
    return f"Hello World from Flask! 該頁面已被訪問{count}次。"


if __name__ == "__main__":
    # Only for debugging while developing
    app.run(host="0.0.0.0", debug=True, port=80)

目前的文件結構是:

flask
├── app
│   └── main.py
└── Dockerfile
└── docker-compose.yml

這些編排的文件參數都是取自于Docker,基本都能看懂,其它就沒啥啦,直接命令行跑起來:

docker-compose up

就辣么簡單!現在我們在瀏覽器上訪問http://localhost:8080/就能看到結果了,并且每訪問一次這頁面都會自動增加訪問次數.


在這里,我們也能通過docker ps命令查看運行中的容器:

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
66133318452d        redis:latest        "docker-entrypoint.s…"   13 seconds ago      Up 12 seconds       6379/tcp                        myredis
0956529c3c9c        myflask             "/entrypoint.sh pyth…"   13 seconds ago      Up 11 seconds       443/tcp, 0.0.0.0:8080->80/tcp   myflask

有了Docker ComposeDocker才是完整的Docker,有了這些以后開發簡直不要太爽,每個容器只要維護自己的服務環境就ok了。

Docker的日常操作 鏡像常用操作
# 下載鏡像
docker pull name
# 列出本地鏡像
docker images
# 使用鏡像運行生成容器
docker run name:tag
# 刪除鏡像
docker rmi id/name
容器常用操作

可以通過容器的id或者容器別名來啟動、停止、重啟。

# 查看運行中的容器
docker ps
# 查看所有生成的容器
docker ps -a
# 開始容器
docker start container
# 停止容器
docker stop container
# 重啟容器
docker restart container
# 移除不需要的容器(移除前容器必須要處于停止狀態)
docker rm container
# 進入后臺運行的容器
docker exec -it container /bin/sh
# 打印容器內部的信息(-f參數能實時觀察內部信息)
docker logs -f container

通過-i -t進來容器的,可以先按ctrl + p, 然后按ctrl + q來退出交互界面組,這樣退出不會關閉容器。

docker-compose常用操作
# 自動完成包括構建鏡像,(重新)創建服務,啟動服務,并關聯服務相關容器的一系列操作。
docker-compose up
# 此命令將會停止 up 命令所啟動的容器,并移除網絡
docker-compose down
# 啟動已經存在的服務容器。
docker-compose start
# 停止已經處于運行狀態的容器,但不刪除它。通過start可以再次啟動這些容器。
docker-compose stop
# 重啟項目中的服務
docker-compose restart

默認情況,docker-compose up啟動的容器都在前臺,控制臺將會同時打印所有容器的輸出信息,可以很方便進行調試。當通過Ctrl-C停止命令時,所有容器將會停止。

結語

這次接觸Docker的時間雖然不長,但是這種微服務細分的架構真的是驚艷到我了。以前玩過VM虛擬機,那個使用成本太高,不夠靈活,用過一段時間就放棄了,老老實實維護自己的本機環境。有了這個Docker以后,想要什么測試環境都行,直接幾行代碼生成就好,一種隨心所欲的自由。
上面寫的那些都是日常使用的命令,能應付基本的需求了,真要深入的話建議去找詳細的文檔,我就不寫太累贅了,希望大家都能去接觸一下這個Docker,怎么都不虧,你們也會喜歡上這小鯨魚的。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27652.html

相關文章

  • 忽略后臺開發神器Docker

    摘要:后來真正用的時候才發覺,這個簡直是個神器。容器可以被創建啟動停止刪除暫停等。項目由編寫,實現上調用了服務提供的來對容器進行管理。此命令將會停止命令所啟動的容器,并移除網絡啟動已經存在的服務容器。停止已經處于運行狀態的容器,但不刪除它。 showImg(https://segmentfault.com/img/remote/1460000017531120?w=1200&h=500); ...

    CollinPeng 評論0 收藏0
  • Docker監控及日志采集神器

    摘要:因此,另一種解決辦法像這樣的工具,則只是將和進行了結合,其功能尤其關注日志管理,比如格式檢查,日志語法分析,數據改進地址地理位置信息,元數據標簽等以及日志路由。 由Rancher社區維護的應用商店最近迎來了兩個明星項目——SPM 和 Logsene,來自Sematext的監控與日志工具。如果你已經熟悉Logstash,Kibana,Prometheus,Grafana這些監控或日志解決...

    PAMPANG 評論0 收藏0

發表評論

0條評論

warnerwu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<