Compose 項目是Docker官方的開源項目,負責實現Docker容器集羣的快速編排,開源代碼在https://github.com/docker/compose 上node
咱們知道使用Dockerfile模板文件可讓用戶很方便的定義一個單獨的應用容器,其實在工做中,常常會碰到須要多個容器相互配合來完成的某項任務狀況,例如工做中的web服務容器自己,每每會在後端加上數據庫容器,甚至會有負責均衡器,好比LNMP服務python
Compose 就是來作這個事情的,它容許用戶經過一個單獨的docker-compose.yml模板文件(YAML格式)來定義一組相關聯的應用容器爲一個項目(project)mysql
Compose 中有兩個重要的概念:nginx
[root@operation ~]# curl -L https://github.com/docker/compose/releases/download/1.23.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 617 0 617 0 0 373 0 --:--:-- 0:00:01 --:--:-- 373 100 11.1M 100 11.1M 0 0 368k 0 0:00:31 0:00:31 --:--:-- 444k [root@operation ~]# chmod +x /usr/local/bin/docker-compose [root@operation ~]# docker-compose version docker-compose version 1.23.0-rc2, build 350a555e docker-py version: 3.5.0 CPython version: 3.6.6 OpenSSL version: OpenSSL 1.1.0f 25 May 2017
3.2. pip 安裝(安裝的是最新穩定版本)git
Compose 既然是用python編寫的那麼確定是能夠用pip install 進行安裝的 [root@operation ~]# pip install docker-compose # 安裝完須要作個軟連接 [root@operation ~]# ln -s /usr/bin/docker-compose /usr/local/bin/ [root@operation ~]# docker-compose version docker-compose version 1.22.0, build f46880f docker-py version: 3.5.0 CPython version: 2.7.5 OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
3.3. 容器安裝github
[root@operation ~]# curl -L https://github.com/docker/compose/releases/download/1.23.0-rc2/run.sh > /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 596 0 596 0 0 158 0 --:--:-- 0:00:03 --:--:-- 158 100 1670 100 1670 0 0 343 0 0:00:04 0:00:04 --:--:-- 1630k [root@operation ~]# chmod +x /usr/local/bin/docker-compose [root@operation ~]# docker-compose Unable to find image 'docker/compose:1.23.0-rc2' locally 1.23.0-rc2: Pulling from docker/compose 3489d1c4660e: Pull complete 2e51ed086e7d: Pull complete 07d7b41c67a1: Pull complete Digest: sha256:14f5ad3c2162b26b3eaafe870822598f80b03ec36fd45126952c891fd5e5a59a # 實際上就是下的鏡像(能夠看下下載的run.sh腳本) [root@operation ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker/compose 1.23.0-rc2 dc59a0b5e981 5 days ago 45.6MB alpine latest 196d12cf6ab1 4 weeks ago 4.41MB [root@operation ~]# docker-compose version docker-compose version 1.23.0-rc2, build 350a555e docker-py version: 3.5.0 CPython version: 3.6.6 OpenSSL version: OpenSSL 1.1.0f 25 May 2017
Compose 大部分命令的對象便可以是項目的自己,也能夠是指定爲項目中的服務或者容器 執行docker-compose [COMMAND] --help 或者docker-compose help [COMMAND]能夠查看命令的幫助信息 具體的使用格式 docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS] 參數選項 -f,--file file指定模板文件,默認是docker-compose.yml模板文件,能夠屢次指定 -p,--project-name name指定項目名稱,默認使用所在目錄名稱做爲項目名稱 --x-networking 使用Docker的後端可插拔網絡特性 --x-networking-driver driver指定網絡的後端驅動,默認使用bridge --verbose 輸入更多的調試信息 -v,--version 輸出版本信息
Compose所支持的命令 build Build or rebuild services (構建項目中的服務容器) bundle Generate a Docker bundle from the Compose file (從Compose文件生成分佈式應用程序包) config Validate and view the Compose file (驗證並查看Compose文件) create Create services (爲服務建立容器) down Stop and remove containers, networks, images, and volumes (中止容器並刪除由其建立的容器,網絡,卷和圖像up) events Receive real time events from containers (爲項目中的每一個容器流式傳輸容器事件) exec Execute a command in a running container (這至關於docker exec。使用此子命令,您能夠在服務中運行任意命令。默認狀況下,命令分配TTY,所以您可使用命令docker-compose exec web sh來獲取交互式提示。) help Get help on a command (得到一個命令的幫助) images List images () kill Kill containers (經過發送SIGKILL信號來強制中止服務容器) logs View output from containers (查看服務容器的輸出) pause Pause services (暫停一個容器) port Print the public port for a port binding (打印某個容器端口所映射的公共端口) ps List containers (列出項目中目前全部的容器) pull Pull service images (拉取服務依賴鏡像) push Push service images (推送服務鏡像) restart Restart services (重啓項目中的服務) rm Remove stopped containers (刪除全部中止狀態的服務容器) run Run a one-off command (在指定服務上執行一個命令) scale Set number of containers for a service (設置指定服務執行的容器個數) start Start services (啓動已存在的服務容器) stop Stop services (中止已存在的服務容器) top Display the running processes (顯示容器正在運行的進程) unpause Unpause services (恢復處於暫停狀態的容器) up Create and start containers (自動完成包括構建鏡像、建立服務、啓動服務並關聯服務相關容器的一系列操做) version Show the Docker-Compose version information (輸出版本)
這些命令的使用方法可使用執行docker-compose [COMMAND] --help 或者docker-compose help [COMMAND]能夠查看命令的幫助信息web
由於太多的緣由我這裏就不寫了,有時間我在把每一個命令的使用方法補上吧redis
針對模板文件的使用纔是重中之重,我在後面會對模板文件詳細講解sql
環境變量能夠用來配置 Compose 的行爲,以DOCKER_開頭的變量和用來配置 Docker 命令行客戶端的使用同樣。若是使用 boot2docker , $(boot2docker shellinit) 將會設置它們爲正確的值 COMPOSE_PROJECT_NAME 設置經過 Compose 啓動的每個容器前添加的項目名稱,默認是當前工做目錄的名字。 COMPOSE_FILE 設置要使用的 docker-compose.yml 的路徑。默認路徑是當前工做目錄。 DOCKER_HOST 設置 Docker daemon 的地址。默認使用 unix:///var/run/docker.sock,與 Docker 客戶端採用的默認值一致。 DOCKER_TLS_VERIFY 若是設置不爲空,則與 Docker daemon 交互經過 TLS 進行。 DOCKER_CERT_PATH 配置 TLS 通訊所須要的驗證(ca.pem、cert.pem 和 key.pem)文件的路徑,默認是 ~/.docker
在使用的時候在作解釋和操做吧,由於通常不會改環境變量的東西,默認的就OK,作個簡單的瞭解
官方連接:https://docs.docker.com/compose/reference/envvars/#compose_project_name
模板文件時Compose的核心,涉及的指令關鍵字比較多,可是大部分的指令與docker run相關的參數的含義是相似的
默認的模板名是docker-compose.yml
官網連接:https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples
Compose和Docker兼容性: Compose 文件格式有3個版本,分別爲1, 2.x 和 3.x 目前主流的爲 3.x 其支持 docker 1.13.0 及其以上的版本 經常使用參數: version # 指定 compose 文件的版本 services # 定義全部的 service 信息, services 下面的第一級別的 key 既是一個 service 的名稱 build # 指定包含構建上下文的路徑, 或做爲一個對象,該對象具備 context 和指定的 dockerfile 文件以及 args 參數值 context # context: 指定 Dockerfile 文件所在的路徑 dockerfile # dockerfile: 指定 context 指定的目錄下面的 Dockerfile 的名稱(默認爲 Dockerfile) args # args: Dockerfile 在 build 過程當中須要的參數 (等同於 docker container build --build-arg 的做用) cache_from # v3.2中新增的參數, 指定緩存的鏡像列表 (等同於 docker container build --cache_from 的做用) labels # v3.3中新增的參數, 設置鏡像的元數據 (等同於 docker container build --labels 的做用) shm_size # v3.5中新增的參數, 設置容器 /dev/shm 分區的大小 (等同於 docker container build --shm-size 的做用) command # 覆蓋容器啓動後默認執行的命令, 支持 shell 格式和 [] 格式 configs # 不知道怎麼用 cgroup_parent # 不知道怎麼用 container_name # 指定容器的名稱 (等同於 docker run --name 的做用) credential_spec # 不知道怎麼用 deploy # v3 版本以上, 指定與部署和運行服務相關的配置, deploy 部分是 docker stack 使用的, docker stack 依賴 docker swarm endpoint_mode # v3.3 版本中新增的功能, 指定服務暴露的方式 vip # Docker 爲該服務分配了一個虛擬 IP(VIP), 做爲客戶端的訪問服務的地址 dnsrr # DNS輪詢, Docker 爲該服務設置 DNS 條目, 使得服務名稱的 DNS 查詢返回一個 IP 地址列表, 客戶端直接訪問其中的一個地址 labels # 指定服務的標籤,這些標籤僅在服務上設置 mode # 指定 deploy 的模式 global # 每一個集羣節點都只有一個容器 replicated # 用戶能夠指定集羣中容器的數量(默認) placement # 不知道怎麼用 replicas # deploy 的 mode 爲 replicated 時, 指定容器副本的數量 resources # 資源限制 limits # 設置容器的資源限制 cpus: "0.5" # 設置該容器最多隻能使用 50% 的 CPU memory: 50M # 設置該容器最多隻能使用 50M 的內存空間 reservations # 設置爲容器預留的系統資源(隨時可用) cpus: "0.2" # 爲該容器保留 20% 的 CPU memory: 20M # 爲該容器保留 20M 的內存空間 restart_policy # 定義容器重啓策略, 用於代替 restart 參數 condition # 定義容器重啓策略(接受三個參數) none # 不嘗試重啓 on-failure # 只有當容器內部應用程序出現問題纔會重啓 any # 不管如何都會嘗試重啓(默認) delay # 嘗試重啓的間隔時間(默認爲 0s) max_attempts # 嘗試重啓次數(默認一直嘗試重啓) window # 檢查重啓是否成功以前的等待時間(即若是容器啓動了, 隔多少秒以後去檢測容器是否正常, 默認 0s) update_config # 用於配置滾動更新配置 parallelism # 一次性更新的容器數量 delay # 更新一組容器之間的間隔時間 failure_action # 定義更新失敗的策略 continue # 繼續更新 rollback # 回滾更新 pause # 暫停更新(默認) monitor # 每次更新後的持續時間以監視更新是否失敗(單位: ns|us|ms|s|m|h) (默認爲0) max_failure_ratio # 回滾期間容忍的失敗率(默認值爲0) order # v3.4 版本中新增的參數, 回滾期間的操做順序 stop-first #舊任務在啓動新任務以前中止(默認) start-first #首先啓動新任務, 而且正在運行的任務暫時重疊 rollback_config # v3.7 版本中新增的參數, 用於定義在 update_config 更新失敗的回滾策略 parallelism # 一次回滾的容器數, 若是設置爲0, 則全部容器同時回滾 delay # 每一個組回滾之間的時間間隔(默認爲0) failure_action # 定義回滾失敗的策略 continue # 繼續回滾 pause # 暫停回滾 monitor # 每次回滾任務後的持續時間以監視失敗(單位: ns|us|ms|s|m|h) (默認爲0) max_failure_ratio # 回滾期間容忍的失敗率(默認值0) order # 回滾期間的操做順序 stop-first # 舊任務在啓動新任務以前中止(默認) start-first # 首先啓動新任務, 而且正在運行的任務暫時重疊 注意: 支持 docker-compose up 和 docker-compose run 但不支持 docker stack deploy 的子選項 security_opt container_name devices tmpfs stop_signal links cgroup_parent network_mode external_links restart build userns_mode sysctls devices # 指定設備映射列表 (等同於 docker run --device 的做用) depends_on # 定義容器啓動順序 (此選項解決了容器之間的依賴關係, 此選項在 v3 版本中 使用 swarm 部署時將忽略該選項) 示例: docker-compose up 以依賴順序啓動服務,下面例子中 redis 和 db 服務在 web 啓動前啓動 默認狀況下使用 docker-compose up web 這樣的方式啓動 web 服務時,也會啓動 redis 和 db 兩個服務,由於在配置文件中定義了依賴關係 version: '3' services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres dns # 設置 DNS 地址(等同於 docker run --dns 的做用) dns_search # 設置 DNS 搜索域(等同於 docker run --dns-search 的做用) tmpfs # v2 版本以上, 掛載目錄到容器中, 做爲容器的臨時文件系統(等同於 docker run --tmpfs 的做用, 在使用 swarm 部署時將忽略該選項) entrypoint # 覆蓋容器的默認 entrypoint 指令 (等同於 docker run --entrypoint 的做用) env_file # 從指定文件中讀取變量設置爲容器中的環境變量, 能夠是單個值或者一個文件列表, 若是多個文件中的變量重名則後面的變量覆蓋前面的變量, environment 的值覆蓋 env_file 的值 文件格式: RACK_ENV=development environment # 設置環境變量, environment 的值能夠覆蓋 env_file 的值 (等同於 docker run --env 的做用) expose # 暴露端口, 可是不能和宿主機創建映射關係, 相似於 Dockerfile 的 EXPOSE 指令 external_links # 鏈接不在 docker-compose.yml 中定義的容器或者不在 compose 管理的容器(docker run 啓動的容器, 在 v3 版本中使用 swarm 部署時將忽略該選項) extra_hosts # 添加 host 記錄到容器中的 /etc/hosts 中 (等同於 docker run --add-host 的做用) healthcheck # v2.1 以上版本, 定義容器健康狀態檢查, 相似於 Dockerfile 的 HEALTHCHECK 指令 test # 檢查容器檢查狀態的命令, 該選項必須是一個字符串或者列表, 第一項必須是 NONE, CMD 或 CMD-SHELL, 若是其是一個字符串則至關於 CMD-SHELL 加該字符串 NONE # 禁用容器的健康狀態檢測 CMD # test: ["CMD", "curl", "-f", "http://localhost"] CMD-SHELL # test: ["CMD-SHELL", "curl -f http://localhost || exit 1"] 或者 test: curl -f https://localhost || exit 1 interval: 1m30s # 每次檢查之間的間隔時間 timeout: 10s # 運行命令的超時時間 retries: 3 # 重試次數 start_period: 40s # v3.4 以上新增的選項, 定義容器啓動時間間隔 disable: true # true 或 false, 表示是否禁用健康狀態檢測和 test: NONE 相同 image # 指定 docker 鏡像, 能夠是遠程倉庫鏡像、本地鏡像 init # v3.7 中新增的參數, true 或 false 表示是否在容器中運行一個 init, 它接收信號並傳遞給進程 isolation # 隔離容器技術, 在 Linux 中僅支持 default 值 labels # 使用 Docker 標籤將元數據添加到容器, 與 Dockerfile 中的 LABELS 相似 links # 連接到其它服務中的容器, 該選項是 docker 歷史遺留的選項, 目前已被用戶自定義網絡名稱空間取代, 最終有可能被廢棄 (在使用 swarm 部署時將忽略該選項) logging # 設置容器日誌服務 driver # 指定日誌記錄驅動程序, 默認 json-file (等同於 docker run --log-driver 的做用) options # 指定日誌的相關參數 (等同於 docker run --log-opt 的做用) max-size # 設置單個日誌文件的大小, 當到達這個值後會進行日誌滾動操做 max-file # 日誌文件保留的數量 network_mode # 指定網絡模式 (等同於 docker run --net 的做用, 在使用 swarm 部署時將忽略該選項) networks # 將容器加入指定網絡 (等同於 docker network connect 的做用), networks 能夠位於 compose 文件頂級鍵和 services 鍵的二級鍵 aliases # 同一網絡上的容器可使用服務名稱或別名鏈接到其中一個服務的容器 ipv4_address # IP V4 格式 ipv6_address # IP V6 格式 示例: version: '3.7' services: test: image: nginx:1.14-alpine container_name: mynginx command: ifconfig networks: app_net: # 調用下面 networks 定義的 app_net 網絡 ipv4_address: 172.16.238.10 networks: app_net: driver: bridge ipam: driver: default config: - subnet: 172.16.238.0/24 pid: 'host' # 共享宿主機的 進程空間(PID) ports # 創建宿主機和容器之間的端口映射關係, ports 支持兩種語法格式 SHORT 語法格式示例: - "3000" # 暴露容器的 3000 端口, 宿主機的端口由 docker 隨機映射一個沒有被佔用的端口 - "3000-3005" # 暴露容器的 3000 到 3005 端口, 宿主機的端口由 docker 隨機映射沒有被佔用的端口 - "8000:8000" # 容器的 8000 端口和宿主機的 8000 端口創建映射關係 - "9090-9091:8080-8081" - "127.0.0.1:8001:8001" # 指定映射宿主機的指定地址的 - "127.0.0.1:5000-5010:5000-5010" - "6060:6060/udp" # 指定協議 LONG 語法格式示例:(v3.2 新增的語法格式) ports: - target: 80 # 容器端口 published: 8080 # 宿主機端口 protocol: tcp # 協議類型 mode: host # host 在每一個節點上發佈主機端口, ingress 對於羣模式端口進行負載均衡 secrets # 不知道怎麼用 security_opt # 爲每一個容器覆蓋默認的標籤 (在使用 swarm 部署時將忽略該選項) stop_grace_period # 指定在發送了 SIGTERM 信號以後, 容器等待多少秒以後退出(默認 10s) stop_signal # 指定中止容器發送的信號 (默認爲 SIGTERM 至關於 kill PID; SIGKILL 至關於 kill -9 PID; 在使用 swarm 部署時將忽略該選項) sysctls # 設置容器中的內核參數 (在使用 swarm 部署時將忽略該選項) ulimits # 設置容器的 limit userns_mode # 若是Docker守護程序配置了用戶名稱空間, 則禁用此服務的用戶名稱空間 (在使用 swarm 部署時將忽略該選項) volumes # 定義容器和宿主機的卷映射關係, 其和 networks 同樣能夠位於 services 鍵的二級鍵和 compose 頂級鍵, 若是須要跨服務間使用則在頂級鍵定義, 在 services 中引用 SHORT 語法格式示例: volumes: - /var/lib/mysql # 映射容器內的 /var/lib/mysql 到宿主機的一個隨機目錄中 - /opt/data:/var/lib/mysql # 映射容器內的 /var/lib/mysql 到宿主機的 /opt/data - ./cache:/tmp/cache # 映射容器內的 /var/lib/mysql 到宿主機 compose 文件所在的位置 - ~/configs:/etc/configs/:ro # 映射容器宿主機的目錄到容器中去, 權限只讀 - datavolume:/var/lib/mysql # datavolume 爲 volumes 頂級鍵定義的目錄, 在此處直接調用 LONG 語法格式示例:(v3.2 新增的語法格式) version: "3.2" services: web: image: nginx:alpine ports: - "80:80" volumes: - type: volume # mount 的類型, 必須是 bind、volume 或 tmpfs source: mydata # 宿主機目錄 target: /data # 容器目錄 volume: # 配置額外的選項, 其 key 必須和 type 的值相同 nocopy: true # volume 額外的選項, 在建立卷時禁用從容器複製數據 - type: bind # volume 模式只指定容器路徑便可, 宿主機路徑隨機生成; bind 須要指定容器和數據機的映射路徑 source: ./static target: /opt/app/static read_only: true # 設置文件系統爲只讀文件系統 volumes: mydata: # 定義在 volume, 可在全部服務中調用 restart # 定義容器重啓策略(在使用 swarm 部署時將忽略該選項, 在 swarm 使用 restart_policy 代替 restart) no # 禁止自動重啓容器(默認) always # 不管如何容器都會重啓 on-failure # 當出現 on-failure 報錯時, 容器從新啓動 其餘選項: domainname, hostname, ipc, mac_address, privileged, read_only, shm_size, stdin_open, tty, user, working_dir 上面這些選項都只接受單個值和 docker run 的對應參數相似 對於值爲時間的可接受的值: 2.5s 10s 1m30s 2h32m 5h34m56s 時間單位: us, ms, s, m, h 對於值爲大小的可接受的值: 2b 1024kb 2048k 300m 1gb 單位: b, k, m, g 或者 kb, mb, gb networks # 定義 networks 信息 driver # 指定網絡模式, 大多數狀況下, 它 bridge 於單個主機和 overlay Swarm 上 bridge # Docker 默認使用 bridge 鏈接單個主機上的網絡 overlay # overlay 驅動程序建立一個跨多個節點命名的網絡 host # 共享主機網絡名稱空間(等同於 docker run --net=host) none # 等同於 docker run --net=none driver_opts # v3.2以上版本, 傳遞給驅動程序的參數, 這些參數取決於驅動程序 attachable # driver 爲 overlay 時使用, 若是設置爲 true 則除了服務以外,獨立容器也能夠附加到該網絡; 若是獨立容器鏈接到該網絡,則它能夠與其餘 Docker 守護進程鏈接到的該網絡的服務和獨立容器進行通訊 ipam # 自定義 IPAM 配置. 這是一個具備多個屬性的對象, 每一個屬性都是可選的 driver # IPAM 驅動程序, bridge 或者 default config # 配置項 subnet # CIDR格式的子網,表示該網絡的網段 external # 外部網絡, 若是設置爲 true 則 docker-compose up 不會嘗試建立它, 若是它不存在則引起錯誤 name # v3.5 以上版本, 爲此網絡設置名稱 文件格式示例: version: "3" services: redis: image: redis:alpine ports: - "6379" networks: - frontend deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks: - backend deploy: placement: constraints: [node.role == manager]
舉個簡單的例子來具備的說明一下Compose的使用(也是官網的一個入門小例子)
先決條件:確保您已經安裝了Docker Engine和Docker Compose。您不須要安裝Python或Redis,由於二者都是由Docker鏡像提供的。
7.1.建立一個目錄(裏面包含須要的文件)
# 建立目錄 [root@operation ~]# mkdir composetest [root@operation ~]# cd composetest/ # 建立一個Python應用, 使用Flask,將數值記入Redis [root@operation composetest]# cat app.py import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True) # 建立requirements.txt文件,裏面是須要安裝的Python包 [root@operation composetest]# cat requirements.txt flask redis # 建立Dockerfile文件 # 在此步驟中,您將編寫一個構建Docker鏡像的Dockerfile。該圖像包含Python應用程序所需的全部依賴項,包括Python自己。 [root@operation composetest]# cat Dockerfile FROM python:3.6-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python", "app.py"] # 這告訴Docker: 從Python 3.6映像開始構建映像。 將當前目錄添加.到/code映像中的路徑中。 將工做目錄設置爲/code。 安裝Python依賴項。 將容器的默認命令設置爲python app.py。 # 建立docker-compose.yml文件 [root@operation composetest]# cat docker-compose.yml version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code redis: image: "redis:alpine" 此Compose文件定義了兩個服務,web和redis。該web服務: 使用從Dockerfile當前目錄中構建的圖像。 將容器上的公開端口5000轉發到主機上的端口5000。咱們使用Flask Web服務器的默認端口5000。 該redis服務使用從Docker Hub註冊表中提取的公共 Redis映像。
7.2.使用Compose構建並運行您的應用程序
[root@operation composetest]# docker-compose up # 出現下面說明成功了 redis_1_bfd9eb391c58 | 1:M 14 Oct 08:29:53.581 * Ready to accept connections web_1_6f42e21c34dd | * Serving Flask app "app" (lazy loading) web_1_6f42e21c34dd | * Environment: production web_1_6f42e21c34dd | WARNING: Do not use the development server in a production environment. web_1_6f42e21c34dd | Use a production WSGI server instead. web_1_6f42e21c34dd | * Debug mode: on web_1_6f42e21c34dd | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) web_1_6f42e21c34dd | * Restarting with stat web_1_6f42e21c34dd | * Debugger is active! web_1_6f42e21c34dd | * Debugger PIN: 160-344-502
7.3.測試訪問
在瀏覽器訪問IP:5000 我這裏是192.168.31.43:5000
每刷新一次就會加一