溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用docker創(chuàng)建app

發(fā)布時間:2021-12-13 16:13:42 來源:億速云 閱讀:262 作者:iii 欄目:云計算

本篇內容主要講解“怎么用docker創(chuàng)建app”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用docker創(chuàng)建app”吧!

docker-app 將docker容器編排為一個bundle,命名為 application 應用程序。希望將一組docker容器打包為一個應用程序進行分發(fā)。

啟用app插件

app 是一個體驗特性,默認不會啟用,最低版本為 19.03 ,因此首先要確保docker引擎不低于此版本。

編輯 ~/.docker/config.json ,增加:

{
  "experimental": "enabled",
  "debug": true
}

檢查:

docker
...
app*        Docker Application (Docker Inc., v0.8.0)
builder     Manage builds
buildx*     Build with BuildKit (Docker Inc., v0.3.1-tp-docker)
checkpoint  Manage checkpoints
...

標記 * 的指令為體驗特性指令。

# docker app version
Version:               v0.8.0
Git commit:            7eea32b
Built:                 Wed Nov 13 07:28:05 2019
OS/Arch:               linux/amd64
Experimental:          off
Renderers:             none
Invocation Base Image: docker/cnab-app-base:v0.8.0

創(chuàng)建app

在當前工作目錄初始化一個docker應用程序。

# docker app init myapp
# tree .
.
└── myapp.dockerapp
    ├── docker-compose.yml
    ├── metadata.yml
    └── parameters.yml

1 directory, 3 files

默認地,會在工作目錄創(chuàng)建一個項目目錄,其中包含了三個文件:

docker-compose.yml 服務的編排文件
metadata.yml 項目的基本配置文件
parameters.yml 服務compose引用的變量

創(chuàng)建單文件項目:眾做周知,分發(fā)一個目錄比分發(fā)單個文件要麻煩的多,因此docker-app 支持將應用程序的項目文件整合為一個獨立的文件。

# docker app init demo --single-file
# ll
-rw-r--r--. 1 root root 508 Dec  2 07:13 demo.dockerapp

項目文件并不是創(chuàng)建后就不可更改了,你隨時可以將目錄格式的應用轉換為單文件:

docker app merge myapp

反過來講單文件項目轉換為目錄格式:

docker app split myapp

編輯服務

vi myapp.dockerapp/docker-compose.yml

version: "3.6"
services: {
  "nginx": {
    "image": "nginx"
  }
}

安裝app

  • app 需要在swarm環(huán)境中運行,最簡單的測試環(huán)境就是在一個單機環(huán)境執(zhí)行:docker swarm init --advertise-addr=你的IP地址

# docker app install myapp

# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
i2ceu8f82bsh        myapp_nginx         replicated          1/1                 nginx:latest

# docker app ls
INSTALLATION APPLICATION   LAST ACTION RESULT  CREATED   MODIFIED  REFERENCE
myapp        myapp (0.1.0) install     success 6 seconds 4 seconds

查看服務

使用render 子命令可以查看docker應用的服務編排:

# docker app render myapp
version: "3.6"
services:
  nginx:
    deploy:
      replicas: 2
    image: nginx

如果myapp 項目文件不在當前目錄,和鏡像一樣,docker引擎會首先去中央倉庫拉取。

使用參數

修改parameters.json 文件:

"DEPLOY_REPLICAS": 5

修改docker-compose引用該變量:

version: "3.6"
services: {
  "nginx": {
    "image": "nginx",
    "deploy": {
      "replicas": "${DEPLOY_REPLICAS}"
    }
  }
}

查看服務:

# docker app render myapp
version: "3.6"
services:
  nginx:
    deploy:
      replicas: 5
    image: nginx

多級變量:參數配置文件是yaml格式,很容易想到 —— 可以使用多級參數名,這樣就可以對不同的變量進行分組。

deploy:
  replicas: 2

對應的compose中:

"replicas": "${deploy.replicas}"
  • image 中不允許使用變量。

更新app

  • upgrade 只能更新變量里的值。

  • upgrade 不會重新加載app的配置文件,只能通過 --set-s 傳入變量的鍵值。

執(zhí)行更新:

# docker app upgrade myapp -s DEPLOY_REPLICAS=2
Updating service myapp_nginx (id: t9n7hcic2ek42qhn35kyfh3lj)
Application "myapp" upgraded on context "default"

# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
ud4sms7cx9yx        myapp_nginx         replicated          2/2                 nginx:latest

刪除應用

docker app uninstall myapp

發(fā)布應用

docker login 192.168.33.10:5000
docker app push myapp
  • login成功

  • 修改了metadata中的name: 192.168.33.10:5000/library/myapp

  • 已經配置了insecure-registries.

但是失敗了:

# docker app push myapp
192.168.33.10:5000/library/myapp:0.1.0-invoc
fixing up "192.168.33.10:5000/library/myapp:0.1.0" for push: failed to resolve "192.168.33.10:5000/library/myapp:0.1.0-invoc", push the image to the registry before pushing the bundle: failed to do request: Head https://192.168.33.10:5000/v2/library/myapp/manifests/0.1.0-invoc: http: server gave HTTP response to HTTPS client
  • 看起來還是找https,insecure-registries 沒有效果。

嘗試不修改metadata中的name,在命令行中使用tag參數:

# docker app push myapp -t 192.168.33.10:5000/library/myapp
192.168.33.10:5000/library/myapp:latest-invoc
fixing up "192.168.33.10:5000/library/myapp:latest" for push: failed to resolve "192.168.33.10:5000/library/myapp:latest-invoc", push the image to the registry before pushing the bundle: failed to do request: Head https://192.168.33.10:5000/v2/library/myapp/manifests/latest-invoc: http: server gave HTTP response to HTTPS client

- 可以在docker images中看到指定tag的鏡像,但是push還是失敗

使用https協(xié)議的倉庫,仍然失敗。

對于私服,暫時沒辦法解決,官網文檔不多。

常用推送到中央倉庫,通過:

docker app push myapp -t pollyduan/myapp

紅藍日志閃爍,看起來正常了。但結局還是殘酷的:

fixing up "docker.io/pollyduan/myapp:latest" for push: failed commit on ref "manifest-sha256:f5dc44557f1d666381791c3d01300d64899ba7b74dc26f4d681bd1827caf61ca": no response

登錄hub.docker.com查看,鏡像存在了。

到此,相信大家對“怎么用docker創(chuàng)建app”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI