佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Docker簡(jiǎn)單安裝與應(yīng)用入門教程

Docker簡(jiǎn)單安裝與應(yīng)用入門教程

熱門標(biāo)簽:使用U盤裝系統(tǒng) 網(wǎng)站建設(shè) 百度競(jìng)價(jià)點(diǎn)擊價(jià)格的計(jì)算公式 智能手機(jī) 檢查注冊(cè)表項(xiàng) 阿里云 硅谷的囚徒呼叫中心 美圖手機(jī)

本文實(shí)例講述了Docker簡(jiǎn)單安裝與應(yīng)用。分享給大家供大家參考,具體如下:

作為一個(gè)初次接觸Docker的人來說,最大的問題是Docker是什么?Docker是一個(gè)開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。比如,我們?cè)诠P記本上編譯測(cè)試通過的容器可以批量地在生產(chǎn)環(huán)境中部署,可以用于自動(dòng)化測(cè)試和持續(xù)集成、發(fā)布。

還可以用于web應(yīng)用的自動(dòng)化打包和發(fā)布;在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫(kù)或其他的后臺(tái)應(yīng)用;從頭編譯或者擴(kuò)展現(xiàn)有的OpenShift或Cloud Foundry平臺(tái)來搭建自己的PaaS環(huán)境。

在Mac下安裝Docker

打開Docker下載網(wǎng)址下載穩(wěn)定版本,并安裝和運(yùn)行Docker。頂部狀態(tài)欄中的鯨魚指示Docker正在運(yùn)行,并可以從終端訪問。

點(diǎn)擊頂部狀態(tài)欄中的鯨魚,選擇About Docker以驗(yàn)證是否有最新版本。

運(yùn)行這些命令來測(cè)試docker、docker-ompose、docker-machine版本是否是最新的,并且和Docker.app兼容。

$ docker --version
$ docker-compose --version
$ docker-machine --version

打開一個(gè)命令行終端,你可以運(yùn)行一些Docker命令來驗(yàn)證Docker是否正常工作。比如使用docker version來檢查你是否安裝了最新版本,使用docker ps來列出正在運(yùn)行的容器,使用docker run hello-world運(yùn)行示例程序。

使用docker run命令可以啟動(dòng)一個(gè)新容器,這種單一的命令將觸發(fā)安裝運(yùn)行序列:先在本機(jī)尋找該鏡像,如果本機(jī)找不到就去Docker Hub下載這個(gè)鏡像,并把鏡像加載到容器中,然后啟動(dòng)該程序,這樣容器就運(yùn)行起來了。其他系統(tǒng)可以參考官網(wǎng)文檔安裝。

Docker示例項(xiàng)目

現(xiàn)在開始使用Docker構(gòu)建應(yīng)用程序,從Docker應(yīng)用程序的層次結(jié)構(gòu)底部開始,應(yīng)用程序是一個(gè)容器,在這個(gè)層次上面是一個(gè)服務(wù),它定義了容器在運(yùn)行時(shí)的行為方式,最后,在頂層是堆棧,定義了所有服務(wù)的交互。

在過去,如果要開始編寫一個(gè)Python應(yīng)用程序,第一步就是在機(jī)器上安裝一個(gè)Python運(yùn)行庫(kù),但是,這會(huì)造成應(yīng)用程序只能在您的機(jī)器運(yùn)行。使用Docker可以將一個(gè)可移植的Python運(yùn)行時(shí)環(huán)境作為一個(gè)鏡像來獲取,無(wú)需安裝。然后構(gòu)建可以將基礎(chǔ)Python鏡像與應(yīng)用程序代碼一起包括在內(nèi),確保您的應(yīng)用程序、依賴項(xiàng)和運(yùn)行時(shí)環(huán)境都一起移動(dòng)。

這些可移植的鏡像是由一個(gè)叫做Dockerfile的東西來定義的。

用Dockerfile定義容器

Dockerfile將定義容器內(nèi)的環(huán)境中發(fā)生了什么,訪問像網(wǎng)絡(luò)接口和磁盤驅(qū)動(dòng)器這樣的資源是在這個(gè)環(huán)境中虛擬化的,這個(gè)環(huán)境與系統(tǒng)的其他部分是隔離的,所以必須將端口映射到外部世界,并具體說明想復(fù)制哪些文件到那個(gè)環(huán)境。完成這些工作后,這個(gè)Dockerfile中定義的應(yīng)用程序在任何地方運(yùn)行都將有完全相同的表現(xiàn)。

創(chuàng)建一個(gè)新的目錄,在新目錄下創(chuàng)建一個(gè)名為Dockerfile的文件,將以下內(nèi)容復(fù)制并粘貼到該文件中保存。

# 使用官方的Python運(yùn)行時(shí)環(huán)境作為父鏡像
FROM python:2.7-slim
# 將工作目錄設(shè)置為“/app”
WORKDIR /app
# 將當(dāng)前目錄內(nèi)容復(fù)制到“/app”的容器中
ADD . /app
# 安裝requirements.txt中指定的所有需要的軟件包
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 將端口80映射到外部世界
EXPOSE 80
# 定義環(huán)境變量
ENV NAME World
# 容器啟動(dòng)時(shí)運(yùn)行app.py
CMD ["python", "app.py"]

創(chuàng)建并編輯應(yīng)用程序

創(chuàng)建requirements.txt文件,并放在與Dockerfile相同的目錄下。

Flask
Redis

創(chuàng)建app.py文件,并放在與Dockerfile相同的目錄下。

from flask import Flask
from redis import Redis, RedisError
import os
import socket
# 連接到Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
  try:
    visits = redis.incr("counter")
  except RedisError:
    visits = "<i>cannot connect to Redis, counter disabled</I>"
  html = "<h3>Hello {name}!</h3>" \

      "<b>Hostname:</b> {hostname}<br/>" \

      "<b>Visits:</b> {visits}"
  return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
  app.run(host='0.0.0.0', port=80)

很簡(jiǎn)單的就完成了應(yīng)用程序部分,當(dāng)Dockerfile被內(nèi)置到鏡像中時(shí),由于DockerfileADD命令,app.pyrequirements.txt將會(huì)出現(xiàn),并且app.py的輸出將可以通過HTTP訪問,這要?dú)w功于EXPOSE命令。

構(gòu)建應(yīng)用程序

打開一個(gè)命令行終端,確保仍然在新目錄的頂層,運(yùn)行構(gòu)建命令,這會(huì)創(chuàng)建一個(gè)Docker鏡像。

$ docker build -t friendlyhello .

構(gòu)建的鏡像可以在本地Docker鏡像注冊(cè)表中看到。

$ docker images

運(yùn)行應(yīng)用程序

運(yùn)行應(yīng)用程序,使用-p將機(jī)器的端口4000映射到容器的已發(fā)布端口80。

$ docker run -p 4000:80 friendlyhello

現(xiàn)在應(yīng)該看到一條消息,Python在http://0.0.0.0:80上提供應(yīng)用程序,但是這個(gè)消息來自容器內(nèi)部,它并不知道該容器的端口80映射到4000,因此正確的URL為http://localhost:4000。

也可以在命令行終端中使用curl命令來查看相同的內(nèi)容。

$ curl http://localhost:4000

這個(gè)4000:80的端口重映射是為了演示Dockerfile中的EXPOSE與使用docker run -p發(fā)布的內(nèi)容之間的區(qū)別。在后面的步驟中,會(huì)將主機(jī)上的端口80映射到容器中的端口80,并使用http://localhost。

在Mac下,在命令行終端中點(diǎn)擊CTRL + C即可退出。而在Windows系統(tǒng)下,CTRL + C不會(huì)停止容器。因此,首先鍵入CTRL + C來獲取提示,或打開另一個(gè)Shell,然后鍵入docker container ls列出正在運(yùn)行的容器,接著是docker container stop <Container NAME或ID>以停止容器。否則,當(dāng)嘗試在下一步中重新運(yùn)行容器時(shí),將從守護(hù)程序中收到錯(cuò)誤響應(yīng)。

現(xiàn)在以分離模式在后臺(tái)運(yùn)行應(yīng)用程序。

$ docker run -d -p 4000:80 friendlyhello

容器正在后臺(tái)運(yùn)行,您還可以使用docker container ls查看CONTAINER ID。

$ docker container ls

可以看到CONTAINER IDhttp://localhost:4000上的內(nèi)容匹配?,F(xiàn)在使用docker container stop來結(jié)束進(jìn)程。

$ docker container stop 9dfc794cdc52

分享鏡像

為了演示鏡像的可移植性,上傳我們構(gòu)建的鏡像,并在其他地方運(yùn)行它,畢竟,將容器部署到生產(chǎn)環(huán)境中時(shí),需要學(xué)習(xí)如何使用注冊(cè)表。

一個(gè)注冊(cè)表是一個(gè)存儲(chǔ)庫(kù)的集合,一個(gè)存儲(chǔ)庫(kù)是一個(gè)鏡像集合,有點(diǎn)像GitHub存儲(chǔ)庫(kù),除了代碼已經(jīng)建立。注冊(cè)表上的帳戶可以創(chuàng)建許多存儲(chǔ)庫(kù)。Docker CLI默認(rèn)使用Docker的公共注冊(cè)表。在這里使用Docker的公共注冊(cè)表,是因?yàn)樗赓M(fèi),并且是預(yù)配置的,但是有許多公共選項(xiàng)可供選擇,甚至可以使用Docker Trusted Registry設(shè)置您自己的私有注冊(cè)表。

使用Docker ID登錄

如果沒有Docker帳戶,請(qǐng)?jiān)贒ocker官網(wǎng)注冊(cè)一個(gè)。然后,登錄到本地機(jī)器上的Docker公共注冊(cè)表。

$ docker login

標(biāo)記鏡像

將本地鏡像與注冊(cè)表中的存儲(chǔ)庫(kù)相關(guān)聯(lián)的符號(hào)是username/repository:tag,該tag是可選的,但推薦使用,因?yàn)檫@是注冊(cè)管理機(jī)構(gòu)為Docker鏡像提供版本的機(jī)制。給存儲(chǔ)庫(kù)標(biāo)記一個(gè)有意義的名字,比如get-started:part2,這會(huì)將鏡像放入啟動(dòng)存儲(chǔ)庫(kù),并將其標(biāo)記為part2。

現(xiàn)在,把它們放在一起來標(biāo)記鏡像,使用用戶名、存儲(chǔ)庫(kù)、標(biāo)簽名稱運(yùn)行docker tag image,以便鏡像將上傳到想要的目的地。

# 語(yǔ)法
$ docker tag image username/repository:tag
# 示例
$ docker tag friendlyhello john/get-started:part2

運(yùn)行docker imagesdocker image ls以查看新標(biāo)記的鏡像。

發(fā)布鏡像

將您標(biāo)記的鏡像上傳到存儲(chǔ)庫(kù)。

# 語(yǔ)法
$ docker push username/repository:tag
# 示例
$ docker push john/get-started:part2

一旦完成,這個(gè)上傳的結(jié)果是公開的,如果你登錄到Docker Hub ,你將會(huì)看到那個(gè)新的鏡像和它的pull命令。

從遠(yuǎn)程存儲(chǔ)庫(kù)中提取并運(yùn)行鏡像

從現(xiàn)在開始,可以使用docker run并使用此命令在任何機(jī)器上運(yùn)行您的應(yīng)用程序。

# 語(yǔ)法
$ docker run -p 4000:80 username/repository:tag
# 示例
$ docker run -p 4000:80 john/get-started:part2

如果鏡像在機(jī)器上本地不可用,Docker將從存儲(chǔ)庫(kù)中取出。無(wú)論docker run在哪里,它都會(huì)將您的鏡像、Python以及所有依賴項(xiàng)從requirements.txt中提取出來,并運(yùn)行您的代碼。它們被打包在行李箱中一起旅行,主機(jī)不需要安裝任何東西,除了Docker環(huán)境來運(yùn)行它。

希望本文所述對(duì)大家docker容器的使用有所幫助。

標(biāo)簽:懷化 煙臺(tái) 通遼 湘潭 黃山 山南 賀州 湖北

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Docker簡(jiǎn)單安裝與應(yīng)用入門教程》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    柏乡县| 红安县| 来凤县| 大埔县| 微山县| 鄂尔多斯市| 罗田县| 将乐县| 丽江市| 建德市| 西城区| 应城市| 罗城| 天津市| 济源市| 策勒县| 山西省| 常熟市| 六盘水市| 鹿泉市| 正蓝旗| 岫岩| 沿河| 台江县| 仁怀市| 沙雅县| 安康市| 巫溪县| 山东省| 郑州市| 江阴市| 文水县| 桂东县| 镇宁| 青川县| 报价| 达州市| 和平区| 政和县| 定边县| 大名县|