{"id":1449,"date":"2022-12-13T17:19:50","date_gmt":"2022-12-13T09:19:50","guid":{"rendered":"http:\/\/175.24.184.226\/?p=1449"},"modified":"2022-12-13T17:19:50","modified_gmt":"2022-12-13T09:19:50","slug":"docker-compose-%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6-docker-compose-yml-%e8%af%a6%e8%a7%a3","status":"publish","type":"post","link":"\/?p=1449","title":{"rendered":"Docker Compose \u914d\u7f6e\u6587\u4ef6 docker-compose.yml \u8be6\u89e3"},"content":{"rendered":"<p>Docker Compose\u914d\u7f6e\u6587\u4ef6\u662fDocker Compose\u7684\u6838\u5fc3\uff0c\u7528\u4e8e\u5b9a\u4e49\u670d\u52a1\u3001\u7f51\u7edc\u548c\u6570\u636e\u5377\u3002\u683c\u5f0f\u4e3aYAML\uff0c\u9ed8\u8ba4\u8def\u5f84\u4e3a.\/docker-compose.yml\uff0c\u53ef\u4ee5\u4f7f\u7528.yml\u6216.yaml\u6269\u5c55\u540d\uff0c\u76ee\u524dCompose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u7684\u6700\u65b0\u7248\u672c\u4e3aV3\u3002Compose\u914d\u7f6e\u6587\u4ef6\u4e2d\u6d89\u53ca\u7684\u914d\u7f6e\u9879\u4e5f\u6bd4\u8f83\u591a\uff0c\u4f46\u5927\u90e8\u5206\u914d\u7f6e\u9879\u7684\u542b\u4e49\u8ddfdocker run\u547d\u4ee4\u76f8\u5173\u9009\u9879\u662f\u7c7b\u4f3c\u7684\u3002<\/p>\n<p>\u672c\u6587\u4e3b\u8981\u53c2\u8003\u5b98\u65b9\u6587\u6863\u5bf9\u76ee\u524d\u6700\u65b0\u7684V3\u7248Compose\u914d\u7f6e\u6587\u4ef6\u8fdb\u884c\u4e00\u4e2a\u603b\u7ed3\u3002\u90fd\u662f\u4e00\u4e9b\u6982\u5ff5\u6027\u7684\u5185\u5bb9\uff0c\u4e0d\u6d89\u53ca\u5177\u4f53\u64cd\u4f5c\u3002<\/p>\n<p><strong>\u4e00\u3001Compose\u914d\u7f6e\u6587\u4ef6\u7248\u672c<\/strong><\/p>\n<p>\u8fd9\u91cc\u4e3b\u8981\u5bf9Compose\u914d\u7f6e\u6587\u4ef6\u7684\u7248\u672c\u7684\u76f8\u5173\u8981\u70b9\u8fdb\u884c\u4e00\u4e2a\u7b80\u5355\u7684\u603b\u7ed3\u3002\u81f3\u4e8e\u6bcf\u4e2a\u7248\u672c\u5177\u4f53\u7684\u53d8\u5316\u548c\u5347\u7ea7\u4fe1\u606f\u53ef\u4ee5\u53c2\u8003\u5b98\u65b9\u7684Compose\u914d\u7f6e\u6587\u4ef6\u7248\u672c\u4e0e\u5347\u7ea7\u6307\u5357\u3002<\/p>\n<p><strong>1. Compose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u7684\u7248\u672c\u6982\u8ff0<\/strong><\/p>\n<p>\u5f53\u524d\u6709\u4e09\u79cd\u7248\u672c\u7684Compose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\uff1a<\/p>\n<ul>\n<li><strong>Version 1<\/strong><\/li>\n<\/ul>\n<p>\u65e7\u7248\u683c\u5f0f\uff0c\u901a\u8fc7\u7701\u7565YAML\u7684\u6839\u914d\u7f6e\u9879version\u6765\u6307\u5b9a\u3002<\/p>\n<p>\u672a\u58f0\u660e\u7248\u672c\u7684Compose\u914d\u7f6e\u6587\u4ef6\u90fd\u88ab\u89c6\u4e3aV1\u7248\uff0c\u6240\u6709\u7684\u670d\u52a1\u90fd\u4f5c\u4e3a\u6839\u9009\u9879\u5728Compose\u914d\u7f6e\u6587\u4ef6\u4e2d\u58f0\u660e\u3002<\/p>\n<p>\u652f\u6301V1\u7684Compose\u6700\u9ad8\u52301.6.x\uff0c\u518d\u9ad8\u7248\u672c\u7684Compose\u4e0d\u63a8\u8350\u4f7f\u7528V1\u7248Compose\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<p>\u4e0d\u652f\u6301\u6570\u636e\u5377\u3001\u7f51\u7edc\u548c\u6784\u5efa\u53c2\u6570\u914d\u7f6e\u3002<\/p>\n<p>V1\u7684Compose\u4e0d\u4f1a\u5229\u7528\u7f51\u7edc\u4f18\u52bf\uff0c\u6bcf\u4e2a\u5bb9\u5668\u90fd\u4f4d\u4e8e\u9ed8\u8ba4\u7684bridge\u7f51\u7edc\u4e0a\uff0c\u5e76\u4e14\u53ef\u4ee5\u4ece\u5176\u4ed6\u5bb9\u5668\u7684IP\u5730\u5740\u8bbf\u95ee\uff0c\u9700\u8981\u4f7f\u7528links\u6765\u542f\u7528\u5bb9\u5668\u4e4b\u95f4\u7684\u53d1\u73b0\u3002<\/p>\n<ul>\n<li><strong>Version 2.x<\/strong><\/li>\n<\/ul>\n<p>\u901a\u8fc7YAML\u7684\u6839\u914d\u7f6e\u9879version\u6765\u6307\u5b9a\uff0c\u5177\u4f53\u914d\u7f6e\u5982version: '2'\u6216version: '2.1'\u7b49\u3002<\/p>\n<p>\u5fc5\u987b\u5728Compose\u914d\u7f6e\u6587\u4ef6\u6839\u9009\u9879\u6307\u5b9a\u7248\u672c\u53f7\uff0c\u5e76\u4e14\u4e3b\u7248\u672c\u6570\u5b57\u4e3a2\uff0c\u4e14\u6240\u6709\u670d\u52a1\u5fc5\u987b\u5728services\u914d\u7f6e\u9879\u4e0b\u58f0\u660e\u3002<\/p>\n<p>1.6.0+\u7248\u672c\u7684Compose\u90fd\u652f\u6301V2\uff0cDocker Engine\u7684\u7248\u672c\u9700\u89811.10.0+\u7248\u672c\u3002<\/p>\n<p>\u652f\u6301\u6570\u636e\u5377\u548c\u7f51\u7edc\u7684\u914d\u7f6e\u3002<\/p>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u6bcf\u4e2a\u5bb9\u5668\u90fd\u52a0\u5165\u4e86\u5e94\u7528\u8303\u56f4\u7684\u9ed8\u8ba4\u7f51\u7edc\uff0c\u5e76\u4e14\u53ef\u4ee5\u5728\u4e0e\u670d\u52a1\u540d\u79f0\u76f8\u540c\u7684\u4e3b\u673a\u540d\u4e0b\u53d1\u73b0\u3002\u5f88\u5927\u7a0b\u5ea6\u4e0alinks\u4e0d\u662f\u5fc5\u8981\u7684\u3002<\/p>\n<p>V2\u4e2d\u52a0\u5165\u4e86\u73af\u5883\u53d8\u91cf\u66ff\u6362\u3002<\/p>\n<ul>\n<li><strong>Version 3.x<\/strong><\/li>\n<\/ul>\n<p>\u6700\u65b0\u7248\u672c\uff0c\u4e5f\u662f\u63a8\u8350\u4f7f\u7528\u7248\u672c\uff0c\u63a8\u51fa\u8be5\u7248\u7684\u76ee\u7684\u662f\u4e3a\u4e86\u5728Compose\u548cDocker Engine\u7684swarm\u6a21\u5f0f\u4e4b\u95f4\u5f62\u6210\u4ea4\u53c9\u517c\u5bb9\u3002<\/p>\n<p>\u901a\u8fc7YAML\u7684\u6839\u914d\u7f6e\u9879version\u6765\u6307\u5b9a\uff0c\u5177\u4f53\u914d\u7f6e\u5982version: '3'\u6216version: '3.1'\u7b49\u3002<\/p>\n<p>V3\u5220\u9664\u4e86\u591a\u4e2a\u914d\u7f6e\u9879\uff0c\u4f46\u4e5f\u65b0\u589e\u4e86\u66f4\u591a\u914d\u7f6e\u9879\u3002<\/p>\n<p>\u5173\u4e8eCompose\u914d\u7f6e\u6587\u4ef6\u7248\u672c\u7684\u5e38\u89c1\u6ce8\u610f\u4e8b\u9879\uff1a<\/p>\n<p><strong>\u5728\u58f0\u660eV2\u548cV3\u7248\u672c\u65f6\u9700\u6ce8\u610f\uff1a<\/strong><\/p>\n<p>\u5728\u6307\u5b9aCompose\u914d\u7f6e\u6587\u4ef6\u8981\u4f7f\u7528\u7684\u7248\u672c\u65f6\uff0c\u9700\u540c\u65f6\u6307\u5b9a\u4e3b\u7248\u672c\u6570\u5b57\u548c\u6b21\u7248\u672c\u6570\u5b57\u3002\u5982\u679c\u672a\u7ed9\u5b9a\u6b21\u7248\u672c\u6570\u5b57\uff0c\u5219\u9ed8\u8ba4\u4f7f\u75280\u800c\u4e0d\u662f\u6700\u65b0\u7248\u672c\uff0c\u56e0\u6b64\u5c06\u4e0d\u652f\u6301\u518d\u66f4\u9ad8\u7248\u672c\u4e2d\u624d\u52a0\u5165\u7684\u65b0\u529f\u80fd\u3002\u6bd4\u5982version: '3'\uff0c\u4f7f\u7528\u7684\u662f3.0\u7248\u672c\u800c\u4e0d\u662f\u76ee\u524d\u6700\u65b0\u76843.8\u7248\u672c\u3002<\/p>\n<p>\u5728\u4f7f\u7528\u591aCompose\u914d\u7f6e\u6587\u4ef6\u65f6\u9700\u6ce8\u610f\uff1a<\/p>\n<p>\u4f7f\u7528\u591a\u4e2aCompose\u914d\u7f6e\u6587\u4ef6\u6269\u5c55\u670d\u52a1\u65f6\uff0c\u6bcf\u4e2a\u6587\u4ef6\u5fc5\u987b\u4e3a\u76f8\u540c\u7684\u7248\u672c\u3002<\/p>\n<p><strong>2. Compose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u7248\u672c\u4e0eDocker\u7684\u517c\u5bb9\u6027\u5173\u7cfb<\/strong><\/p>\n<p>Compose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u5177\u6709\u591a\u79cd\u7248\u672c\u3002\u5176\u4e2dCompose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u7248\u672c\u4e0eDocker\u7684\u517c\u5bb9\u6027\u5173\u7cfb\u5982\u4e0b\u8868\u6240\u793a\uff1a<\/p>\n<p>Compose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u7248\u672c Docker Engine \u7248\u672c<\/p>\n<pre><code>3.8 19.03.0+\n3.7 18.06.0+\n3.6 18.02.0+\n3.5 17.12.0+\n3.4 17.09.0+\n3.3 17.06.0+\n3.2 17.04.0+\n3.1 1.13.1+\n3.0 1.13.0+\n2.4 17.12.0+\n2.3 17.06.0+\n2.2 1.13.0+\n2.1 1.12.0+\n2.0 1.10.0+\n1.0 1.9.1.+<\/code><\/pre>\n<p>\u5982\u679c\u4f7f\u7528\u7684\u8f83\u65e7\u7248\u672c\u7684Docker\uff0c\u53ef\u4ee5\u53c2\u8003\u5b98\u65b9\u7684Compose\u7248\u672c\u53d1\u5e03\u5217\u8868\u3002\u5176\u4e2d\u7684\u6bcf\u7ec4\u53d1\u884c\u8bf4\u660e\u90fd\u8be6\u7ec6\u8bf4\u660e\u4e86\u652f\u6301\u7684Docker Engine\u7248\u672c\u548c\u517c\u5bb9\u7684Compose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u7248\u672c\u3002<\/p>\n<p><strong>3. \u517c\u5bb9\u6a21\u5f0f<\/strong><\/p>\n<p>\u57281.20.0\u7248\u672c\uff0cCompose\u5728docker-compose\u547d\u4ee4\u4e2d\u5f15\u5165\u4e86\u4e00\u4e2a\u65b0\u7684\u9009\u9879--compatibility\uff0c\u76ee\u7684\u5728\u4e8e\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u66f4\u8f7b\u677e\u5730\u8fc7\u6e21\u5230V3\u7248\u3002\u542f\u7528\u8be5\u9009\u9879\u540e\uff0cdocker-compose\u547d\u4ee4\u4f1a\u8bfb\u53d6\u6bcf\u4e2a\u670d\u52a1\u5b9a\u4e49\u7684deploy\u90e8\u5206\uff0c\u5e76\u5c1d\u8bd5\u5c06\u5176\u8f6c\u6362\u4e3a\u7b49\u6548\u7684V2\u914d\u7f6e\u9879\u3002\u76ee\u524d\uff0c\u4ee5\u4e0bdeploy\u4e0b\u7684\u914d\u7f6e\u9879\u5df2\u88ab\u8f6c\u6362\uff1a<\/p>\n<p>resources\u4e0b\u7684limits\u548creservations\u4e0b\u7684memory<\/p>\n<p>replicas<\/p>\n<p>restart_policy\u4e0b\u7684 condition \u548cmax_attempts<\/p>\n<p>\u6240\u6709\u7684\u5176\u4ed6\u914d\u7f6e\u9879\u90fd\u5c06\u88ab\u5ffd\u7565\uff0c\u5982\u679c\u8fd9\u4e9b\u88ab\u5ffd\u7565\u7684\u914d\u7f6e\u9879\u5b58\u5728\u5219\u4f1a\u53d1\u51fa\u4e00\u4e2a\u8b66\u544a\u3002\u53ef\u4ee5\u4f7f\u7528\u5e26--compatibility\u7684Config\u547d\u4ee4\u67e5\u770b\u5c06\u7528\u4e8edeploy\u7684\u914d\u7f6e\u3002<\/p>\n<p>\u6ce8\u610f\u8bf7\u52ff\u5728\u751f\u6210\u73af\u5883\u4f7f\u7528\u517c\u5bb9\u6a21\u5f0f\uff01<\/p>\n<p>\u5efa\u8bae\u4e0d\u8981\u5728\u751f\u4ea7\u73af\u5883\u4e2d\u4f7f\u7528--compatibility\u9009\u9879\u3002\u7531\u4e8e\u4f7f\u7528\u975eSwarm\u6a21\u5f0f\u5c5e\u6027\u751f\u6210\u7684\u914d\u7f6e\u4ec5\u662f\u8fd1\u4f3c\u503c\uff0c\u56e0\u6b64\u53ef\u80fd\u4f1a\u4ea7\u751f\u610f\u5916\u7684\u7ed3\u679c\u3002<\/p>\n<p><strong>\u4e8c\u3001Compose\u914d\u7f6e\u6587\u4ef6\u7ed3\u6784<\/strong><\/p>\n<p>Docker Compose\u914d\u7f6e\u6587\u4ef6\u662f\u4e00\u4e2a\u7528\u4e8e\u5b9a\u4e49\u670d\u52a1\u3001\u7f51\u7edc\u548c\u6570\u636e\u5377\u7684YAML\u6587\u4ef6\u3002\u5176\u4e2d\u670d\u52a1\u5b9a\u4e49\u4e86\u8be5\u670d\u52a1\u542f\u52a8\u7684\u6bcf\u4e2a\u5bb9\u5668\u7684\u914d\u7f6e\uff0c\u5c31\u50cf\u5c06\u547d\u4ee4\u884c\u53c2\u6570\u4f20\u9012\u7ed9docker run\u4e00\u6837\uff0c\u7f51\u7edc\u548c\u6570\u636e\u5377\u7684\u5b9a\u4e49\u7c7b\u4f3c\u4e8edocker network create\u548cdocker volume create\u3002\u8ddfdocker run\u4e00\u6837\uff0c\u5982\u679c\u5728Dockerfile\u4e2d\u901a\u8fc7\u8bf8\u5982CMD\u3001EXPOSE\u3001VOLUME\u548cENV\u8fd9\u4e9b\u6307\u4ee4\u6307\u5b9a\u4e86\u76f8\u5173\u9009\u9879\uff0c\u90a3\u4e48\u5728\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e0d\u9700\u8981\u5728docker-compose.yml\u4e2d\u518d\u6b21\u6307\u5b9a\u5b83\u4eec\u3002\u4e0b\u9762\u662f\u4ece\u5b98\u7f51\u5f15\u8fc7\u6765\u7684\u4e00\u4e2aCompose\u914d\u7f6e\u6587\u4ef6\u7684\u793a\u4f8b\uff0c\u53ef\u4ee5\u5148\u5927\u81f4\u4e86\u89e3\u4e00\u4e0b\u5b83\u7684\u7ed3\u6784\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  redis:\n    image: redis:alpine\n    ports:\n      - &quot;6379&quot;\n    networks:\n      - frontend\n    deploy:\n      replicas: 2\n      update_config:\n        parallelism: 2\n        delay: 10s\n      restart_policy:\n        condition: on-failure\n\n  db:\n    image: postgres:9.4\n    volumes:\n      - db-data:\/var\/lib\/postgresql\/data\n    networks:\n      - backend\n    deploy:\n      placement:\n        constraints:\n          - &quot;node.role==manager&quot;\n  vote:\n    image: dockersamples\/examplevotingapp_vote:before\n    ports:\n      - &quot;5000:80&quot;\n    networks:\n      - frontend\n    depends_on:\n      - redis\n    deploy:\n      replicas: 2\n      update_config:\n        parallelism: 2\n      restart_policy:\n        condition: on-failure\n\n  result:\n    image: dockersamples\/examplevotingapp_result:before\n    ports:\n      - &quot;5001:80&quot;\n    networks:\n      - backend\n    depends_on:\n      - db\n    deploy:\n      replicas: 1\n      update_config:\n        parallelism: 2\n        delay: 10s\n      restart_policy:\n        condition: on-failure\n\n  worker:\n    image: dockersamples\/examplevotingapp_worker\n    networks:\n      - frontend\n      - backend\n    deploy:\n      mode: replicated\n      replicas: 1\n      labels: [APP=VOTING]\n      restart_policy:\n        condition: on-failure\n        delay: 10s\n        max_attempts: 3\n        window: 120s\n      placement:\n        constraints:\n          - &quot;node.role==manager&quot;\n\n  visualizer:\n    image: dockersamples\/visualizer:stable\n    ports:\n      - &quot;8080:8080&quot;\n    stop_grace_period: 1m30s\n    volumes:\n      - &quot;\/var\/run\/docker.sock:\/var\/run\/docker.sock&quot;\n    deploy:\n      placement:\n        constraints:\n          - &quot;node.role==manager&quot;\n\nnetworks:\n  frontend:\n  backend:\n\nvolumes:\n  db-data:<\/code><\/pre>\n<p>\u9876\u5c42\u7684version\u3001services\u3001networks\u548cvolumes\u5c06Compose\u914d\u7f6e\u6587\u4ef6\u5206\u4e3a\u56db\u4e2a\u90e8\u5206\uff0c\u5176\u4e2dversion\u6307\u5b9aCompose\u914d\u7f6e\u6587\u4ef6\u7684\u7248\u672c\uff0cservices\u5b9a\u4e49\u670d\u52a1\uff0cnetworks\u5b9a\u4e49\u7f51\u7edc\uff0cvolumes\u5b9a\u4e49\u6570\u636e\u5377\u3002<\/p>\n<p><strong>\u4e09\u3001\u670d\u52a1\u914d\u7f6e<\/strong><\/p>\n<p>\u670d\u52a1\u5b9a\u4e49\u4e86\u8be5\u670d\u52a1\u542f\u52a8\u7684\u6bcf\u4e2a\u5bb9\u5668\u7684\u914d\u7f6e\uff0c\u5c31\u50cf\u5c06\u547d\u4ee4\u884c\u53c2\u6570\u4f20\u9012\u7ed9docker run\u4e00\u6837\u3002\u6bd4\u5982\u4ee5\u4e0b\u914d\u7f6e\uff1a<\/p>\n<pre><code>services:\n  redis:\n    image: redis:alpine<\/code><\/pre>\n<p>services\u4e0b\u7684redis\u662f\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u670d\u52a1\u540d\u79f0\uff0credis\u4e0b\u7684image\u53ea\u662f\u4f17\u591a\u670d\u52a1\u914d\u7f6e\u9879\u4e2d\u7684\u5176\u4e2d\u4e00\u4e2a\uff0c\u610f\u601d\u662f\u6307\u5b9a\u955c\u50cf\u540d\u79f0\u6216id\u3002\u4e0b\u9762\u5c31\u5bf9\u670d\u52a1\u7684\u76f8\u5173\u914d\u7f6e\u9879\u8fdb\u884c\u4e00\u4e2a\u603b\u7ed3\u3002<\/p>\n<p><strong>1. build<\/strong><\/p>\n<p>\u5728\u6784\u5efa\u65f6\u5e94\u7528\u7684\u914d\u7f6e\u9879\u3002\u4e00\u822c\u76f4\u63a5\u6307\u5b9aDockerfile\u6240\u5728\u6587\u4ef6\u5939\u8def\u5f84\uff0c\u53ef\u4ee5\u662f\u7edd\u5bf9\u8def\u5f84\uff0c\u6216\u8005\u76f8\u5bf9\u4e8eCompose\u914d\u7f6e\u6587\u4ef6\u7684\u8def\u5f84\u3002\u53ef\u4ee5\u6307\u5b9a\u4e3a\u5305\u542b\u6784\u5efa\u4e0a\u4e0b\u6587\uff08context\uff09\u8def\u5f84\u7684\u5b57\u7b26\u4e32\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  webapp:\n    build: .\/dir<\/code><\/pre>\n<p>\u4e5f\u53ef\u4ee5\u4f7f\u7528context\u6307\u5b9a\u4e0a\u4e0b\u6587\u8def\u5f84\uff0c\u4f7f\u7528dockerfile\u57fa\u4e8e\u4e0a\u4e0b\u6587\u8def\u5f84\u6307\u5b9aDockerfile\u6587\u4ef6\uff0c\u4f7f\u7528args\u6307\u5b9a\u6784\u5efa\u53c2\u6570\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  webapp:\n    build:\n      context: .\/dir\n      dockerfile: Dockerfile-alternate\n      args:\n        buildno: 1<\/code><\/pre>\n<p>\u5982\u679c\u540c\u65f6\u6307\u5b9a\u4e86build\u548cimage\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>build: .\/dir\nimage: webapp:tag<\/code><\/pre>\n<p>Compose\u4f1a\u5728.\/dir\u76ee\u5f55\u4e0b\u6784\u5efa\u4e00\u4e2a\u540d\u4e3awebapp\uff0c\u6807\u7b7e\u4e3atag\u7684\u955c\u50cf\u3002<\/p>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0cbuild\u914d\u7f6e\u9879\u88ab\u5ffd\u7565\u3002\u56e0\u4e3adocker stack\u547d\u4ee4\u4e0d\u4f1a\u5728\u90e8\u7f72\u4e4b\u524d\u6784\u5efa\u955c\u50cf\u3002<\/p>\n<p><strong>(1) context<\/strong><\/p>\n<p>\u6307\u5b9a\u5305\u542bDockerfile\u7684\u76ee\u5f55\u8def\u5f84\u6216git\u4ed3\u5e93url\u3002\u8be5\u76ee\u5f55\u662f\u53d1\u9001\u7ed9Docker\u5b88\u62a4\u8fdb\u7a0b\uff08Daemon\uff09\u7684\u6784\u5efa\u4e0a\u4e0b\u6587\uff08context\uff09\u3002\u5f53\u914d\u7f6e\u7684\u503c\u662f\u76f8\u5bf9\u8def\u5f84\u65f6\uff0c\u5b83\u5c06\u88ab\u89e3\u91ca\u4e3a\u76f8\u5bf9\u4e8eCompose\u914d\u7f6e\u6587\u4ef6\u7684\u8def\u5f84\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>build:\n  context: .\/dir<\/code><\/pre>\n<p>\u6307\u5b9a\u4e0a\u4e0b\u6587\u4e3aCompose\u914d\u7f6e\u6587\u4ef6\u76ee\u5f55\u4e0b\u7684dir\u76ee\u5f55\u3002<\/p>\n<p><strong>(2) dockerfile<\/strong><\/p>\n<p>\u6307\u5b9aDockerfile\u6587\u4ef6\u3002Compose\u4f1a\u4f7f\u7528\u6307\u5b9a\u7684Dockerfile\u6587\u4ef6\u6784\u5efa\u955c\u50cf\uff0c\u4f46\u5fc5\u987b\u8981\u6307\u5b9a\u6784\u5efa\u4e0a\u4e0b\u6587\u8def\u5f84\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>build:\n  context: .\n  dockerfile: Dockerfile-alternate<\/code><\/pre>\n<p>Compose\u4f1a\u4f7f\u7528Compose\u914d\u7f6e\u6587\u4ef6\u6240\u5728\u76ee\u5f55\u4e0b\u540d\u4e3aDockerfile-alternate\u7684Dockerfile\u6587\u4ef6\u6784\u5efa\u955c\u50cf\u3002<\/p>\n<p><strong>(3) args<\/strong><\/p>\n<p>\u6dfb\u52a0\u6784\u5efa\u53c2\u6570\uff0c\u8fd9\u4e9b\u53ea\u80fd\u5728\u6784\u5efa\u8fc7\u7a0b\u4e2d\u8bbf\u95ee\u7684\u73af\u5883\u53d8\u91cf\u3002\u9996\u5148\u5728Dockerfile\u6587\u4ef6\u4e2d\u6307\u5b9a\u53c2\u6570\uff1a<\/p>\n<pre><code>ARG buildno\nARG gitcommithash\n\nRUN echo &quot;Build number: $buildno&quot;\nRUN echo &quot;Based on commit: $gitcommithash&quot;<\/code><\/pre>\n<p>\u7136\u540ebuild\u4e2d\u6307\u5b9a\u53c2\u6570\uff0c\u4ee5\u4e0b\u4e24\u79cd\u5199\u6cd5\u90fd\u53ef\u4ee5\uff1a<\/p>\n<pre><code>build:\n  context: .\n  args:\n    buildno: 1\n    gitcommithash: cdc3b19<\/code><\/pre>\n<pre><code>build:\n  context: .\n  args:\n    - buildno=1\n    - gitcommithash=cdc3b19<\/code><\/pre>\n<p>\u8fd9\u65f6\u6784\u5efa\u8fc7\u7a0b\u4e2d\u4f7f\u7528\u7684\u53c2\u6570\u7684\u503c\u4e3aargs\u6307\u5b9a\u7684\u503c\u3002\u5728\u6307\u5b9a\u6784\u5efa\u53c2\u6570\u65f6\u4e5f\u53ef\u4ee5\u4e0d\u6307\u5b9a\u503c\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6784\u5efa\u8fc7\u7a0b\u4e2d\u4f7f\u7528\u7684\u53c2\u6570\u7684\u503c\u4e3a\u8fd0\u884cCompose\u7684\u73af\u5883\u4e2d\u7684\u503c\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>args:\n  - buildno\n  - gitcommithash<\/code><\/pre>\n<p>\u4f7f\u7528\u5e03\u5c14\u503c\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1aYMAL\u4e2d\u5e03\u5c14\u7c7b\u578b\u7684\u503c\uff08&quot;true&quot;\u3001&quot;false&quot;\u3001&quot;yes&quot;\u3001&quot;no&quot;\u3001&quot;on&quot;\u3001&quot;off&quot;\uff09\u5fc5\u987b\u7528\u5f15\u53f7\u5f15\u8d77\u6765\uff0c\u4ee5\u4fbf\u89e3\u6790\u5668\u5c06\u5b83\u4eec\u89e3\u91ca\u4e3a\u5b57\u7b26\u4e32\u3002<\/p>\n<p><strong>(4) cache_from<\/strong><\/p>\n<p>\u57283.2\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u6307\u5b9a\u7f13\u5b58\u89e3\u6790\u955c\u50cf\u5217\u8868\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>build:\n  context: .\n  cache_from:\n    - alpine:latest\n    - corp\/web_app:3.14<\/code><\/pre>\n<p><strong>(5) labels<\/strong><\/p>\n<p>\u57283.3\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u5c06\u5143\u6570\u636e\u4ee5\u6807\u7b7e\u7684\u5f62\u5f0f\u6dfb\u52a0\u5230\u751f\u6210\u7684\u955c\u50cf\u4e2d\u3002\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u5b57\u5178\u4e24\u79cd\u683c\u5f0f\u3002\u63a8\u8350\u4f7f\u7528\u53cd\u5411DNS\u5199\u6cd5\u4ee5\u907f\u514d\u548c\u5176\u4ed6\u5e94\u7528\u7684\u6807\u7b7e\u51b2\u7a81\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>build:\n  context: .\n  labels:\n    com.example.description: &quot;Accounting webapp&quot;\n    com.example.department: &quot;Finance&quot;\n    com.example.label-with-empty-value: &quot;&quot;<\/code><\/pre>\n<pre><code>build:\n  context: .\n  labels:\n    - &quot;com.example.description=Accounting webapp&quot;\n    - &quot;com.example.department=Finance&quot;\n    - &quot;com.example.label-with-empty-value&quot;<\/code><\/pre>\n<p><strong>(6) network<\/strong><\/p>\n<p>\u57283.4\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u8bbe\u7f6e\u5bb9\u5668\u7f51\u7edc\u8fde\u63a5\u4ee5\u83b7\u53d6\u6784\u5efa\u8fc7\u7a0b\u4e2d\u7684RUN\u6307\u4ee4\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>build:\n  context: .\n  network: custom_network_1<\/code><\/pre>\n<p>\u8bbe\u7f6e\u4e3anone\u53ef\u4ee5\u5728\u6784\u5efa\u671f\u95f4\u7981\u7528\u7f51\u7edc\u8fde\u63a5\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>build:\n  context: .\n  network: none<\/code><\/pre>\n<p><strong>(7) shm_size<\/strong><\/p>\n<p>\u57283.5\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u6307\u5b9a\u5bb9\u5668\u7684\/dev\/shm\u5206\u533a\u5927\u5c0f\u3002\u6307\u5b9a\u7684\u503c\u4e3a\u8868\u793a\u5b57\u8282\u6570\u7684\u6574\u6570\u503c\u6216\u8868\u793a\u5b57\u8282\u503c\u7684\u5b57\u7b26\u4e32\u3002\u4f8b\u5982<\/p>\n<pre><code>build:\n  context: .\n  shm_size: 10000000<\/code><\/pre>\n<pre><code>build:\n  context: .\n  shm_size: &#039;2gb&#039;<\/code><\/pre>\n<p><strong>(8) target<\/strong><\/p>\n<p>\u57283.4\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u6307\u5b9a\u5728Dockerfile\u4e2d\u5b9a\u4e49\u7684\u6784\u5efa\u9636\u6bb5\uff0c\u5373\u955c\u50cf\u53ea\u6784\u5efa\u5230\u6307\u5b9a\u9636\u6bb5\u5c31\u505c\u6b62\u6784\u5efa\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>build:\n  context: .\n  target: prod<\/code><\/pre>\n<p>\u6307\u5b9a\u6784\u5efa\u9636\u6bb5\u4e3aprod\uff0c\u5373\u955c\u50cf\u53ea\u6784\u5efa\u5230prod\u9636\u6bb5\uff0cprod\u9636\u6bb5\u4e4b\u540e\u7684\u5185\u5bb9\u4e0d\u4f1a\u88ab\u6784\u5efa\u3002<\/p>\n<p><strong>2. cap_add\u3001cap_drop<\/strong><\/p>\n<p>\u6dfb\u52a0\u6216\u5220\u9664\u5bb9\u5668\u5185\u6838\u80fd\u529b\uff08capability\uff09\u3002\u5b8c\u6574\u7684capability\u5217\u8868\u53ef\u67e5\u770bman 7 capabilities\u3002\u4f8b\u5982\uff0c\u8ba9\u5bb9\u5668\u62e5\u6709\u6240\u6709\u5185\u6838\u80fd\u529b\uff1a<\/p>\n<pre><code>cap_add:\n  - ALL<\/code><\/pre>\n<p>\u4f8b\u5982\uff0c\u5220\u9664NET_ADMIN\u548cSYS_ADMIN\u80fd\u529b\uff1a<\/p>\n<pre><code>cap_drop:\n  - NET_ADMIN\n  - SYS_ADMIN<\/code><\/pre>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0ccap_add\u548ccap_drop\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>3. cgroup_parent<\/strong><\/p>\n<p>\u4e3a\u5bb9\u5668\u6307\u5b9a\u4e00\u4e2a\u53ef\u9009\u7684\u7236\u63a7\u5236\u7ec4\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>cgroup_parent: m-executor-abcd<\/code><\/pre>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0ccgroup_parent\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>4. command<\/strong><\/p>\n<p>\u8986\u76d6\u5bb9\u5668\u542f\u52a8\u540e\u9ed8\u8ba4\u6267\u884c\u7684\u547d\u4ee4\u3002\u53ef\u4ee5\u5199\u6210\u5b57\u7b26\u4e32\u5f62\u5f0f\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>command: bundle exec thin -p 3000<\/code><\/pre>\n<p>\u4e5f\u53ef\u4ee5\u5199\u6210JSON\u6570\u7ec4\u5f62\u5f0f\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>command: [&quot;bundle&quot;, &quot;exec&quot;, &quot;thin&quot;, &quot;-p&quot;, &quot;3000&quot;]<\/code><\/pre>\n<p><strong>5. configs<\/strong><\/p>\n<p>\u57283.3\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u4e3a\u6bcf\u4e2a\u670d\u52a1\u6388\u4e88\u5bf9\u914d\u7f6e\uff08configs\uff09\u7684\u8bbf\u95ee\u6743\u9650\u3002\u652f\u6301short\u548clong\u4e24\u79cd\u683c\u5f0f\u7684\u8bed\u6cd5\u3002\u66f4\u591aconfigs\u4fe1\u606f\uff0c\u53c2\u8003configs\u3002<\/p>\n<p>\u6ce8\u610f\uff1a\u8be5\u914d\u7f6e\uff08config\uff09\u5fc5\u987b\u5df2\u5b58\u5728\u6216\u8005\u5728\u5806\u6808\u6587\u4ef6\u9876\u5c42configs\u914d\u7f6e\u9879\u4e2d\u5b9a\u4e49\uff0c\u5426\u5219\u5806\u6808\u90e8\u7f72\u5c06\u5931\u8d25\u3002<\/p>\n<p>short\u8bed\u6cd5\u4ec5\u6307\u5b9aconfig\u540d\u79f0\u6765\u6388\u4e88\u5bb9\u5668\u8bbf\u95eeconfig\u7684\u6743\u9650\u5e76\u5c06\u5176\u6302\u8f7d\u5230\u5bb9\u5668\u7684\/&lt;config_name&gt;\u4e0a\u3002source\u540d\u79f0\u548c\u76ee\u6807\u6302\u8f7d\u70b9\u90fd\u8bbe\u7f6e\u4e3aconfig\u540d\u79f0\u3002\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u6388\u4e88\u4e86redis\u670d\u52a1\u5bf9configs\u7684my_config\u548cmy_other_config\u7684\u8bbf\u95ee\u6743\u9650\uff0c\u5176\u4e2dmy_config\u7684\u503c\u8bbe\u7f6e\u5230\u6587\u4ef6.\/my_config.txt\u7684\u5185\u5bb9\u4e2d\uff0cmy_other_config\u5b9a\u4e49\u4e3a\u5916\u90e8\u8d44\u6e90\uff0c\u8fd9\u610f\u5473\u7740\u5b83\u5df2\u7ecf\u5728Docker\u4e2d\u901a\u8fc7\u8fd0\u884cdocker config create\u547d\u4ee4\u6216\u5176\u4ed6\u5806\u6808\u90e8\u7f72\u8fdb\u884c\u5b9a\u4e49\uff0c\u5982\u679c\u5916\u90e8config\u4e0d\u5b58\u5728\uff0c\u5806\u6808\u90e8\u7f72\u5c06\u4f1a\u5931\u8d25\u5e76\u663e\u793aconfig not found\u9519\u8bef\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  redis:\n    image: redis:latest\n    deploy:\n      replicas: 1\n    configs:\n      - my_config\n      - my_other_config\nconfigs:\n  my_config:\n    file: .\/my_config.txt\n  my_other_config:\n    external: true<\/code><\/pre>\n<p>long\u8bed\u6cd5\u63d0\u4f9b\u4e86\u5728\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u5185\u5982\u4f55\u521b\u5efaconfig\u7684\u66f4\u591a\u7c92\u5ea6\uff1a<\/p>\n<p>source\uff1aDocker\u4e2d\u5b58\u5728\u7684config\u540d\u79f0\u3002<\/p>\n<p>target\uff1a\u6307\u5b9a\u8981\u6302\u8f7d\u5230\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u7684\u6587\u4ef6\u7684\u8def\u5f84\u52a0\u540d\u79f0\u3002\u5982\u679c\u672a\u6307\u5b9a\uff0c\u9ed8\u8ba4\u4e3a\/\u3002<\/p>\n<p>uid\u548cgid\uff1a\u6307\u5b9a\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u6240\u62e5\u6709\u7684\u8be5\u6587\u4ef6\u7684UID\u6216GID\u3002\u5982\u679c\u5728LInux\u4e2d\u672a\u6307\u5b9a\uff0c\u4e24\u8005\u90fd\u9ed8\u8ba4\u4e3a0\u3002\u4e0d\u652f\u6301Windows\u3002<\/p>\n<p>mode\uff1a\u4ee5\u516b\u8fdb\u5236\u8868\u793a\u6cd5\u6307\u5b9a\u8981\u6302\u8f7d\u5230\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u7684\u6587\u4ef6\u6743\u9650\u3002\u4f8b\u5982\uff0c0444\u4ee3\u8868\u53ef\u8bfb\u3002\u9ed8\u8ba4\u503c\u5c31\u4e3a0444\u3002config\u5185\u5bb9\u5df2\u6302\u8f7d\u5230\u4e34\u65f6\u6587\u4ef6\u7cfb\u7edf\u4e2d\uff0c\u6240\u4ee5\u4e0d\u53ef\u5199\uff0c\u5982\u679c\u8bbe\u7f6e\u4e86\u53ef\u5199\u4f4d\u5c06\u88ab\u5ffd\u7565\u3002\u53ef\u4ee5\u8bbe\u7f6e\u53ef\u6267\u884c\u4f4d\u3002\u5982\u679c\u4e0d\u719f\u6089UNIX\u6587\u4ef6\u6743\u9650\u6a21\u5f0f\uff0c\u53ef\u4ee5\u4f7f\u7528\u6743\u9650\u8ba1\u7b97\u5668 \u3002<\/p>\n<p>\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u6307\u5b9aconfig\u540d\u79f0\u4e3amy_config\uff0c\u6388\u4e88redis\u670d\u52a1\u5bf9my_config\u7684\u8bbf\u95ee\u6743\u9650\uff0c\u6307\u5b9a\u8981\u6302\u8f7d\u5230redis\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u7684\u8def\u5f84\u52a0\u6587\u4ef6\u540d\u79f0\u4e3a\/redis_config\uff0c\u6307\u5b9aUID\u548cGID\u5747\u4e3a103\uff0c\u6307\u5b9a\u8981\u6302\u8f7d\u5230\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u7684\u6587\u4ef6\u6743\u9650\u4e3a0440\uff08group-readable\uff09\uff0c\u4f46\u8be5redis\u670d\u52a1\u6ca1\u6709\u8bbf\u95eemy_other_config\u7684\u6743\u9650\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  redis:\n    image: redis:latest\n    deploy:\n      replicas: 1\n    configs:\n      - source: my_config\n        target: \/redis_config\n        uid: &#039;103&#039;\n        gid: &#039;103&#039;\n        mode: 0440\nconfigs:\n  my_config:\n    file: .\/my_config.txt\n  my_other_config:\n    external: true<\/code><\/pre>\n<p>\u53ef\u4ee5\u6388\u4e88\u670d\u52a1\u8bbf\u95ee\u591a\u4e2aconfig\u7684\u6743\u9650\uff0c\u5e76\u4e14\u53ef\u4ee5\u6df7\u5408long\u548cshort\u8bed\u6cd5\u3002\u5b9a\u4e49config\u5e76\u4e0d\u610f\u5473\u7740\u6388\u4e88\u670d\u52a1\u5bf9\u5176\u7684\u8bbf\u95ee\u6743\u9650\u3002<\/p>\n<p><strong>6. container_name<\/strong><\/p>\n<p>\u6307\u5b9a\u81ea\u5b9a\u4e49\u5bb9\u5668\u7684\u540d\u79f0\uff0c\u800c\u4e0d\u662f\u4f7f\u7528\u9ed8\u8ba4\u540d\u79f0\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>container_name: my-web-container<\/code><\/pre>\n<p>\u56e0\u4e3aDocker\u5bb9\u5668\u7684\u540d\u79f0\u5fc5\u987b\u552f\u4e00\uff0c\u6240\u4ee5\u4e3a\u4e00\u4e2a\u670d\u52a1\u6307\u5b9a\u4e86\u81ea\u5b9a\u4e49\u5bb9\u5668\u540d\u79f0\u540e\uff0c\u8be5\u670d\u52a1\u4e0d\u80fd\u8fdb\u884c\u6269\u5c55\u3002\u5982\u679c\u5c1d\u8bd5\u4e3a\u8be5\u670d\u52a1\u6269\u5bb9\u5c06\u4f1a\u5bfc\u81f4\u9519\u8bef\u3002<\/p>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0ccontainer_name\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>7. credential_spec<\/strong><\/p>\n<p>\u57283.3\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u57283.8\u6216\u66f4\u9ad8\u7248\u672c\u6587\u4ef6\u683c\u5f0f\u4e2d\u652f\u6301\u5c06\u7ec4\u6258\u7ba1\u670d\u52a1\u5e10\u6237\uff08GMSA\uff09\u914d\u7f6e\u4e0eCompose\u914d\u7f6e\u6587\u4ef6\u4e00\u8d77\u4f7f\u7528\u3002<\/p>\n<p>\u914d\u7f6e\u6258\u7ba1\u670d\u52a1\u5e10\u6237\u7684\u51ed\u636e\u89c4\u683c\uff08credential spec\uff09\u3002\u6b64\u9009\u9879\u4ec5\u7528\u4e8e\u4f7f\u7528Windows\u5bb9\u5668\u7684\u670d\u52a1\u3002credential_spec\u914d\u7f6e\u5fc5\u987b\u91c7\u7528file:\/\/\u6216registry:\/\/\u683c\u5f0f\u3002\u4f7f\u7528file:\u65f6\uff0c\u5f15\u7528\u7684\u6587\u4ef6\u5fc5\u987b\u5b58\u5728\u4e8eDocker\u6570\u636e\u76ee\u5f55\u7684CredentialSpecs\u5b50\u76ee\u5f55\u4e2d\uff0c\u5728Windows\u4e0a\uff0cDocker\u6570\u636e\u76ee\u5f55\u9ed8\u8ba4\u4e3aC:\\ProgramData\\Docker\\\u3002\u4ee5\u4e0b\u793a\u4f8b\u4ece\u540d\u4e3aC:\\ProgramData\\Docker\\CredentialSpecs\\my-credential-spec.json\u7684\u6587\u4ef6\u52a0\u8f7d\u51ed\u8bc1\u89c4\u683c\uff1a<\/p>\n<pre><code>credential_spec:\n  file: my-credential-spec.json<\/code><\/pre>\n<p>\u4f7f\u7528registry:\u65f6\uff0c\u5c06\u4ece\u5b88\u62a4\u8fdb\u7a0b\u4e3b\u673a\u4e0a\u7684Windows\u6ce8\u518c\u8868\u4e2d\u8bfb\u53d6\u51ed\u636e\u89c4\u683c\u3002\u5176\u6ce8\u518c\u8868\u503c\u5fc5\u987b\u4f4d\u4e8eHKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs\u3002\u4ee5\u4e0b\u793a\u4f8b\u4ece\u6ce8\u518c\u8868\u4e2d\u540d\u4e3amy-credential-spec\u7684\u503c\u52a0\u8f7d\u51ed\u8bc1\u89c4\u683c\uff1a<\/p>\n<pre><code>credential_spec:\n  registry: my-credential-spec<\/code><\/pre>\n<p>\u4e3a\u670d\u52a1\u914d\u7f6eGMSA\u51ed\u636e\u89c4\u683c\u65f6\uff0c\u53ea\u9700\u7528config\u6307\u5b9a\u51ed\u636e\u89c4\u683c\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  myservice:\n    image: myimage:latest\n    credential_spec:\n      config: my_credential_spec\n\nconfigs:\n  my_credentials_spec:\n    file: .\/my-credential-spec.json|<\/code><\/pre>\n<p><strong>8. depends_on<\/strong><\/p>\n<p>\u6307\u5b9a\u670d\u52a1\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u89e3\u51b3\u670d\u52a1\u542f\u52a8\u5148\u540e\u987a\u5e8f\u95ee\u9898\u3002\u6307\u5b9a\u670d\u52a1\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u5c06\u4f1a\u5bfc\u81f4\u4ee5\u4e0b\u884c\u4e3a\uff1a<\/p>\n<p>docker-compose up\u4ee5\u4f9d\u8d56\u987a\u5e8f\u542f\u52a8\u670d\u52a1\u3002<\/p>\n<p>docker-compose up SERVICE\u4f1a\u81ea\u52a8\u5305\u542bSERVICE\u7684\u4f9d\u8d56\u9879\u3002<\/p>\n<p>docker-compose stop\u4ee5\u4f9d\u8d56\u987a\u5e8f\u505c\u6b62\u670d\u52a1\u3002<\/p>\n<p>\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  web:\n    build: .\n    depends_on:\n      - db\n      - redis\n  redis:\n    image: redis\n  db:\n    image: postgres<\/code><\/pre>\n<p>\u542f\u52a8\u65f6\u4f1a\u5148\u542f\u52a8db\u548credis\uff0c\u6700\u540e\u624d\u542f\u52a8web\u3002\u5728\u4f7f\u7528docker-compose up web\u542f\u52a8web\u65f6\uff0c\u4e5f\u4f1a\u542f\u52a8db\u548credis\uff0c\u56e0\u4e3a\u5728web\u670d\u52a1\u4e2d\u6307\u5b9a\u4e86\u4f9d\u8d56\u5173\u7cfb\u3002\u5728\u505c\u6b62\u65f6\u4e5f\u5728web\u4e4b\u524d\u5148\u505c\u6b62db\u548credis\u3002<\/p>\n<p>\u4f7f\u7528depends_on\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a<\/p>\n<p>\u670d\u52a1\u4e0d\u4f1a\u7b49\u5f85\u8be5\u670d\u52a1\u6240\u4f9d\u8d56\u7684\u670d\u52a1\u5b8c\u5168\u542f\u52a8\u4e4b\u540e\u624d\u542f\u52a8\u3002\u4f8b\u5982\u4e0a\u4f8b\uff0cweb\u4e0d\u4f1a\u7b49\u5230db\u548credis\u5b8c\u5168\u542f\u52a8\u4e4b\u540e\u624d\u542f\u52a8\u3002<\/p>\n<p>V3\u7248\u4e0d\u518d\u652f\u6301\u7684condition\u5f62\u5f0f\u7684depends_on\u3002<\/p>\n<p>V3\u7248\u4e2d\uff0c\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0cdepends_on\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>9. deploy<\/strong><\/p>\n<p>\u57283\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u6307\u5b9a\u90e8\u7f72\u548c\u8fd0\u884c\u670d\u52a1\u7684\u76f8\u5173\u914d\u7f6e\u3002\u8be5\u914d\u7f6e\u4ec5\u5728swarm mode\u4e0b\u751f\u6548\uff0c\u5e76\u53ea\u80fd\u901a\u8fc7docker stack deploy\u547d\u4ee4\u90e8\u7f72\uff0cdocker-compose up\u548cdocker-compose run\u547d\u4ee4\u5c06\u88ab\u5ffd\u7565\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  redis:\n    image: redis:alpine\n    deploy:\n      replicas: 6\n      placement:\n        max_replicas_per_node: 1\n      update_config:\n        parallelism: 2\n        delay: 10s\n      restart_policy:\n        condition: on-failure<\/code><\/pre>\n<p>deploy\u914d\u7f6e\u9879\u4e2d\u5305\u542bendpoint_mode\u3001labels\u3001mode\u3001placement\u3001replicas\u3001resources\u3001restart_policy\u3001update_config\u7b49\u5b50\u914d\u7f6e\u9879\u3002<\/p>\n<p><strong>(1) endpoint_mode<\/strong><\/p>\n<p>\u57283.2\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u4e3a\u5916\u90e8\u5ba2\u6237\u7aef\u8fde\u63a5\u5230swarm\u6307\u5b9a\u670d\u52a1\u53d1\u73b0\u65b9\u5f0f\uff1a<\/p>\n<p>endpoint_mode: vip\uff1aDocker\u4e3a\u670d\u52a1\u5206\u914d\u4e86\u4e00\u4e2a\u524d\u7aef\u7684\u865a\u62dfIP\uff0c\u5ba2\u6237\u7aef\u901a\u8fc7\u8be5\u865a\u62dfIP\u8bbf\u95ee\u7f51\u7edc\u4e0a\u7684\u670d\u52a1\u3002Docker\u5728\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7684\u53ef\u7528\u5de5\u4f5c\u8282\u70b9\u4e4b\u95f4\u8fdb\u884c\u8def\u7531\u8bf7\u6c42\uff0c\u800c\u65e0\u987b\u5173\u7cfb\u6709\u591a\u5c11\u8282\u70b9\u6b63\u5728\u53c2\u4e0e\u8be5\u670d\u52a1\u6216\u8fd9\u4e9b\u8282\u70b9\u7684IP\u5730\u5740\u6216\u8005\u7aef\u53e3\u3002\u8fd9\u662f\u9ed8\u8ba4\u8bbe\u7f6e\u3002<\/p>\n<p>endpoint_mode: dnsrr\uff1aDNS\u8f6e\u8be2\uff08DNSRR\uff09\uff0cDocker\u8bbe\u7f6e\u670d\u52a1\u7684DNS\u6761\u76ee\uff0c\u4ee5\u4fbf\u5bf9\u670d\u52a1\u540d\u79f0\u7684DNS\u67e5\u8be2\u8fd4\u56deIP\u5730\u5740\u5217\u8868\uff0c\u5e76\u4e14\u5ba2\u6237\u7aef\u901a\u8fc7\u8f6e\u8be2\u7684\u65b9\u5f0f\u76f4\u63a5\u8fde\u63a5\u5230\u5176\u4e2d\u4e4b\u4e00\u3002<\/p>\n<p>\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  wordpress:\n    image: wordpress\n    ports:\n      - &quot;8080:80&quot;\n    deploy:\n      mode: replicated\n      replicas: 2\n      endpoint_mode: vip<\/code><\/pre>\n<p><strong>(2) labels<\/strong><\/p>\n<p>\u6307\u5b9a\u670d\u52a1\u7684\u6807\u7b7e\u3002\u8fd9\u4e9b\u6807\u7b7e\u4ec5\u5728\u670d\u52a1\u4e0a\u8bbe\u7f6e\uff0c\u800c\u4e0d\u5728\u670d\u52a1\u7684\u4efb\u4f55\u5bb9\u5668\u4e0a\u8bbe\u7f6e\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  web:\n    image: web\n    deploy:\n      labels:\n        com.example.description: &quot;This label will appear on the web service&quot;<\/code><\/pre>\n<p><strong>(3) mode<\/strong><\/p>\n<p>\u6307\u5b9a\u670d\u52a1\u7684\u5bb9\u5668\u526f\u672c\u6a21\u5f0f\u3002\u53ef\u4ee5\u4e3a\uff1a<\/p>\n<p>global\uff1a\u6bcf\u4e2aswarm\u8282\u70b9\u53ea\u6709\u4e00\u4e2a\u8be5\u670d\u52a1\u5bb9\u5668\u3002<\/p>\n<p>replicated\uff1a\u6574\u4e2a\u96c6\u7fa4\u4e2d\u5b58\u5728\u6307\u5b9a\u4efd\u6570\u7684\u670d\u52a1\u5bb9\u5668\u526f\u672c\uff0c\u4e3a\u9ed8\u8ba4\u503c\u3002<\/p>\n<p>\u4f8b\u5982\uff0c\u6307\u5b9a\u5bb9\u5668\u526f\u672c\u6a21\u5f0f\u4e3aglobal\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  worker:\n    image: dockersamples\/examplevotingapp_worker\n    deploy:\n      mode: global<\/code><\/pre>\n<p><strong>(4) placement<\/strong><\/p>\n<p>\u6307\u5b9aconstraints\u548cpreferences\u3002constraints\u53ef\u4ee5\u6307\u5b9a\u53ea\u6709\u7b26\u5408\u8981\u6c42\u7684\u8282\u70b9\u4e0a\u624d\u80fd\u8fd0\u884c\u8be5\u670d\u52a1\u5bb9\u5668\uff0cpreferences\u53ef\u4ee5\u6307\u5b9a\u5bb9\u5668\u5206\u914d\u7b56\u7565\u3002\u4f8b\u5982\uff0c\u6307\u5b9a\u96c6\u7fa4\u4e2d\u53ea\u6709\u6ee1\u8db3node.rolemanager\u548cengine.labels.operatingsystemubuntu 18.04\u6761\u4ef6\u7684\u8282\u70b9\u4e0a\u80fd\u8fd0\u884cdb\u670d\u52a1\u5bb9\u5668\uff0c\u5e76\u4e14\u5728\u6ee1\u8db3node.labels.zone\u7684\u8282\u70b9\u4e0a\u5747\u5300\u5206\u914d\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  db:\n    image: postgres\n    deploy:\n      placement:\n        constraints:\n          - &quot;node.role==manager&quot;\n          - &quot;engine.labels.operatingsystem==ubuntu 18.04&quot;\n        preferences:\n          - spread: node.labels.zone<\/code><\/pre>\n<p><strong>(5) max_replicas_per_node<\/strong><\/p>\n<p>\u57283.8\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u5982\u679c\u670d\u52a1\u7684\u5bb9\u5668\u526f\u672c\u6a21\u5f0f\u4e3areplicated\uff08\u9ed8\u8ba4\uff09\uff0c\u53ef\u4ee5\u6307\u5b9a\u6bcf\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u7684\u6700\u5927\u5bb9\u5668\u526f\u672c\u6570\u91cf\u3002\u5f53\u6307\u5b9a\u7684\u5bb9\u5668\u526f\u672c\u6570\u91cf\u5927\u4e8e\u6700\u5927\u5bb9\u5668\u526f\u672c\u6570\u91cf\u65f6\uff0c\u5c06\u5f15\u53d1no suitable node (max replicas per node limit exceed)\u9519\u8bef\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  worker:\n    image: dockersamples\/examplevotingapp_worker\n    networks:\n      - frontend\n      - backend\n    deploy:\n      mode: replicated\n      replicas: 6\n      placement:\n        max_replicas_per_node: 1<\/code><\/pre>\n<p><strong>(6) replicas<\/strong><\/p>\n<p>\u5982\u679c\u670d\u52a1\u7684\u5bb9\u5668\u526f\u672c\u6a21\u5f0f\u4e3areplicated\uff08\u9ed8\u8ba4\uff09\uff0c\u6307\u5b9a\u8fd0\u884c\u7684\u5bb9\u5668\u526f\u672c\u6570\u91cf\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  worker:\n    image: dockersamples\/examplevotingapp_worker\n    networks:\n      - frontend\n      - backend\n    deploy:\n      mode: replicated\n      replicas: 6<\/code><\/pre>\n<p><strong>(7) resources<\/strong><\/p>\n<p>\u914d\u7f6e\u8d44\u6e90\u9650\u5236\u3002\u4f8b\u5982\uff0c\u6307\u5b9aredis\u670d\u52a1\u4f7f\u7528\u7684cpu\u4efd\u989d\u4e3a25%\u523050%\uff0c\u5185\u5b58\u4e3a20M\u523050M\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  redis:\n    image: redis:alpine\n    deploy:\n      resources:\n        limits:\n          cpus: &#039;0.50&#039;\n          memory: 50M\n        reservations:\n          cpus: &#039;0.25&#039;\n          memory: 20M<\/code><\/pre>\n<p>\u5728V3\u7248Compose\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u6539\u53d8\uff1aresources\u53d6\u4ee3\u4e86V3\u7248\u4e4b\u524d\u7684Compose\u914d\u7f6e\u6587\u4ef6\u4e2d\u65e7\u7684\u8d44\u6e90\u9650\u5236\u7684\u914d\u7f6e\u9879\uff0c\u5305\u62eccpu_shares\u3001cpu_quota\u3001cpuset\u3001mem_limit\u3001memswap_limit\u3001mem_swappiness\u3002<\/p>\n<p>\u5728\u975eswarm mode\u5bb9\u5668\u4e0a\u8bbe\u7f6e\u8d44\u6e90\u9650\u5236\uff1a\u6b64\u5904\u7684resources\u914d\u7f6e\u9879\u53ea\u6709\u7528\u4e8edeploy\u914d\u7f6e\u9879\u4e4b\u4e0b\u548cswarm mode\u3002\u5982\u679c\u8981\u5728\u975eswarm mode\u90e8\u7f72\u4e2d\u8bbe\u7f6e\u8d44\u6e90\u9650\u5236\uff0c\u9700\u4f7f\u7528V2\u7248Compose\u914d\u7f6e\u6587\u4ef6\u4e2dCPU\u3001memory\u548c\u5176\u4ed6\u8d44\u6e90\u7684\u914d\u7f6e\u9879\u3002<\/p>\n<p><strong>(8) restart_policy<\/strong><\/p>\n<p>\u6307\u5b9a\u5bb9\u5668\u7684\u91cd\u542f\u7b56\u7565\u3002\u4ee3\u66ffrestart\u3002\u6709\u4ee5\u4e0b\u914d\u7f6e\u9009\u9879\uff1a<\/p>\n<p>condition\uff1a\u91cd\u542f\u7b56\u7565\u3002\u503c\u53ef\u4ee5\u4e3anone\u3001on-failure\u6216any\uff0c\u9ed8\u8ba4\u4e3aany\u3002<\/p>\n<p>delay\uff1a\u5c1d\u8bd5\u91cd\u542f\u7684\u7b49\u5f85\u65f6\u95f4\u3002\u6307\u5b9a\u4e3a\u6301\u7eed\u65f6\u95f4\uff08durations\uff09\u3002\u9ed8\u8ba4\u503c\u4e3a0\u3002<\/p>\n<p>max_attempts\uff1a\u91cd\u542f\u6700\u591a\u5c1d\u8bd5\u7684\u6b21\u6570\uff0c\u8d85\u8fc7\u8be5\u6b21\u6570\u5c06\u653e\u5f03\u3002\u9ed8\u8ba4\u4e3a\u6c38\u4e0d\u653e\u5f03\u3002\u5982\u679c\u5728window\u914d\u7f6e\u7684\u65f6\u95f4\u4e4b\u5185\u672a\u6210\u529f\u91cd\u542f\uff0c\u5219\u6b64\u6b21\u5c1d\u8bd5\u4e0d\u8ba1\u5165max_attempts\u7684\u503c\u3002<\/p>\n<p>window\uff1a\u5728\u51b3\u5b9a\u91cd\u542f\u662f\u5426\u6210\u529f\u4e4b\u524d\u7684\u7b49\u5f85\u65f6\u95f4\u3002\u6307\u5b9a\u4e3a\u6301\u7eed\u65f6\u95f4\uff08durations\uff09\u3002\u9ed8\u8ba4\u503c\u4e3a\u7acb\u5373\u51b3\u5b9a\u3002<\/p>\n<p>\u4f8b\u5982\uff0c\u6307\u5b9a\u91cd\u542f\u7b56\u7565\u4e3a\u5931\u8d25\u65f6\u91cd\u542f\uff0c\u7b49\u5f855s\uff0c\u91cd\u542f\u6700\u591a\u5c1d\u8bd53\u6b21\uff0c\u51b3\u5b9a\u91cd\u542f\u662f\u5426\u6210\u529f\u524d\u7684\u7b49\u5f85\u65f6\u95f4\u4e3a120s\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  redis:\n    image: redis:alpine\n    deploy:\n      restart_policy:\n        condition: on-failure\n        delay: 5s\n        max_attempts: 3\n        window: 120s<\/code><\/pre>\n<p><strong>(9) rollback_config<\/strong><\/p>\n<p>\u57283.7\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u914d\u7f6e\u5728\u66f4\u65b0\u5931\u8d25\u7684\u60c5\u51b5\u4e0b\u5982\u4f55\u56de\u6eda\u670d\u52a1\u3002\u6709\u4ee5\u4e0b\u914d\u7f6e\u9009\u9879\uff1a<\/p>\n<p>parallelism\uff1a\u4e00\u6b21\u56de\u6eda\u7684\u5bb9\u5668\u6570\u91cf\u3002\u5982\u679c\u8bbe\u7f6e\u4e3a0\uff0c\u5219\u6240\u6709\u5bb9\u5668\u540c\u65f6\u56de\u6eda\u3002<\/p>\n<p>delay\uff1a\u6bcf\u4e2a\u5bb9\u5668\u7ec4\u4e4b\u95f4\u7684\u56de\u6eda\u6240\u7b49\u5f85\u7684\u65f6\u95f4\u3002\u9ed8\u8ba4\u503c\u4e3a0s\u3002<\/p>\n<p>failure_action\uff1a\u56de\u6eda\u5931\u8d25\u540e\u7684\u884c\u4e3a\u3002\u6709continue\u548cpause\u4e24\u79cd\uff0c\u9ed8\u8ba4\u503c\u4e3apause\u3002<\/p>\n<p>monitor\uff1a\u6bcf\u6b21\u4efb\u52a1\u66f4\u65b0\u540e\u76d1\u89c6\u5931\u8d25\u7684\u65f6\u95f4\uff08ns|us|ms|s|m|h\uff09\u3002\u9ed8\u8ba4\u503c\u4e3a0s\u3002<\/p>\n<p>max_failure_ratio\uff1a\u5728\u56de\u6eda\u671f\u95f4\u80fd\u591f\u5bb9\u5fcd\u7684\u6700\u5927\u5931\u8d25\u7387\u3002\u9ed8\u8ba4\u503c\u4e3a0\u3002<\/p>\n<p>order\uff1a\u8bbe\u7f6e\u56de\u6eda\u987a\u5e8f\u3002stop-first\u4e3a\u5728\u5f00\u542f\u65b0\u4efb\u52a1\u4e4b\u524d\u505c\u6b62\u65e7\u4efb\u52a1\uff0cstart-first\u4e3a\u9996\u5148\u542f\u52a8\u65b0\u4efb\u52a1\uff0c\u548c\u6b63\u5728\u8fd0\u884c\u4efb\u52a1\u77ed\u6682\u91cd\u53e0\uff0c\u9ed8\u8ba4\u503c\u4e3astop-first\u3002<\/p>\n<p><strong>(10) update_config<\/strong><\/p>\n<p>\u914d\u7f6e\u5982\u4f55\u66f4\u65b0\u670d\u52a1\u3002\u8be5\u914d\u7f6e\u5bf9\u6eda\u52a8\u66f4\u65b0\u5f88\u6709\u7528\u3002\u6709\u4ee5\u4e0b\u914d\u7f6e\u9009\u9879\uff1a<\/p>\n<p>parallelism\uff1a\u4e00\u6b21\u66f4\u65b0\u7684\u5bb9\u5668\u6570\u91cf\u3002<\/p>\n<p>delay\uff1a\u66f4\u65b0\u4e00\u7ec4\u5bb9\u5668\u4e4b\u95f4\u7684\u7b49\u5f85\u65f6\u95f4\u3002<\/p>\n<p>failure_action\uff1a\u66f4\u65b0\u5931\u8d25\u540e\u7684\u884c\u4e3a\u3002\u6709continue\u3001rollback\u548cpause\u4e09\u79cd\uff0c\u9ed8\u8ba4\u503c\u4e3apause\u3002<\/p>\n<p>monitor\uff1a\u6bcf\u6b21\u4efb\u52a1\u66f4\u65b0\u540e\u76d1\u89c6\u5931\u8d25\u7684\u65f6\u95f4\uff08ns|us|ms|s|m|h\uff09\u3002\u9ed8\u8ba4\u503c\u4e3a0s\u3002<\/p>\n<p>max_failure_ratio\uff1a\u5728\u66f4\u65b0\u671f\u95f4\u80fd\u591f\u5bb9\u5fcd\u7684\u6700\u5927\u5931\u8d25\u7387\u3002<\/p>\n<p>order\uff1a\u8bbe\u7f6e\u66f4\u65b0\u987a\u5e8f\u3002stop-first\u4e3a\u5728\u5f00\u542f\u65b0\u4efb\u52a1\u4e4b\u524d\u505c\u6b62\u65e7\u4efb\u52a1\uff0cstart-first\u4e3a\u9996\u5148\u542f\u52a8\u65b0\u4efb\u52a1\uff0c\u548c\u6b63\u5728\u8fd0\u884c\u4efb\u52a1\u77ed\u6682\u91cd\u53e0\uff0c\u9ed8\u8ba4\u503c\u4e3astop-first\u3002\u6ce8\u610f\u8be5\u914d\u7f6e\u9879\u57283.4\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165\uff0c\u4ec5\u652f\u63013.4\u6216\u66f4\u9ad8\u7248\u672c\u3002<\/p>\n<p>\u4f8b\u5982\uff0c\u6307\u5b9a\u6bcf\u6b21\u66f4\u65b02\u4e2a\u5bb9\u5668\uff0c\u66f4\u65b0\u7b49\u5f85\u65f6\u95f410s\uff0c\u66f4\u65b0\u987a\u5e8f\u4e3a\u5148\u505c\u6b62\u65e7\u4efb\u52a1\u518d\u5f00\u542f\u65b0\u4efb\u52a1\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  vote:\n    image: dockersamples\/examplevotingapp_vote:before\n    depends_on:\n      - redis\n    deploy:\n      replicas: 2\n      update_config:\n        parallelism: 2\n        delay: 10s\n        order: stop-first<\/code><\/pre>\n<p><strong>(11) \u4e0d\u652f\u6301docker stack deploy\u7684\u914d\u7f6e\u9879<\/strong><\/p>\n<p>\u4ee5\u4e0b\u4e3a\u652f\u6301docker-compose up\u548cdocker-compose run\uff0c\u4e0d\u652f\u6301docker stack deploy\u6216deploy\u914d\u7f6e\u9879\u7684\u914d\u7f6e\u9879\uff1a<\/p>\n<pre><code>build\ncgroup_parent\ncontainer_name\ndevices\ntmpfs\nexternal_links\nlinks\nnetwork_mode\nrestart\nsecurity_opt\nuserns_mode<\/code><\/pre>\n<p><strong>10. devices<\/strong><\/p>\n<p>\u6307\u5b9a\u8bbe\u5907\u6620\u5c04\u5217\u8868\u3002\u4e0eDocker\u5ba2\u6237\u7aefcreate\u7684--device\u9009\u9879\u7c7b\u4f3c\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>devices:\n  - &quot;\/dev\/ttyUSB0:\/dev\/ttyUSB0&quot;<\/code><\/pre>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0cdevices\u914d\u7f6e\u9009\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>11. dns<\/strong><\/p>\n<p>\u81ea\u5b9a\u4e49DNS\u670d\u52a1\u5668\u3002\u53ef\u4ee5\u662f\u4e00\u4e2a\u503c\u6216\u4e00\u4e2a\u5217\u8868\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>dns: 8.8.8.8<\/code><\/pre>\n<pre><code>dns:\n  - 8.8.8.8\n  - 9.9.9.9<\/code><\/pre>\n<p><strong>12. dns_search<\/strong><\/p>\n<p>\u81ea\u5b9a\u4e49DNS\u641c\u7d22\u57df\u3002\u53ef\u4ee5\u662f\u4e00\u4e2a\u503c\u6216\u4e00\u4e2a\u5217\u8868\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>dns_search: example.com<\/code><\/pre>\n<pre><code>dns_search:\n  - dc1.example.com\n  - dc2.example.com<\/code><\/pre>\n<p><strong>13. entrypoint<\/strong><\/p>\n<p>\u8986\u76d6\u9ed8\u8ba4\u7684\u5165\u53e3\u547d\u4ee4\u3002\u6ce8\u610f\u8bbe\u7f6eentrypoint\u4f1a\u8986\u76d6\u6240\u6709\u5728\u670d\u52a1\u955c\u50cf\u4e0a\u4f7f\u7528Dockerfile\u7684ENTRYPOINT\u6307\u4ee4\u8bbe\u7f6e\u7684\u9ed8\u8ba4\u5165\u53e3\u547d\u4ee4\uff0c\u5e76\u6e05\u9664\u6389\u670d\u52a1\u955c\u50cf\u4e0a\u4efb\u4f55\u4f7f\u7528Dockerfile\u7684CMD\u6307\u4ee4\u8bbe\u7f6e\u7684\u542f\u52a8\u5bb9\u5668\u65f6\u9ed8\u8ba4\u6267\u884c\u7684\u547d\u4ee4\u3002\u53ef\u4ee5\u5199\u6210\u5b57\u7b26\u4e32\u5f62\u5f0f\uff0c\u4f8b\u5982\uff1a<\/p>\n<pre><code>entrypoint: \/code\/entrypoint.sh<\/code><\/pre>\n<p>\u4e5f\u53ef\u4ee5\u5199\u6210JSON\u6570\u7ec4\u5f62\u5f0f\uff0c\u4f8b\u5982\uff1a<\/p>\n<pre><code>entrypoint: [&quot;php&quot;, &quot;-d&quot;, &quot;memory_limit=-1&quot;, &quot;vendor\/bin\/phpunit&quot;]<\/code><\/pre>\n<p><strong>14. env_file<\/strong><\/p>\n<p>\u4ece\u6587\u4ef6\u4e2d\u83b7\u53d6\u73af\u5883\u53d8\u91cf\u3002\u53ef\u4ee5\u662f\u4e00\u4e2a\u503c\u6216\u4e00\u4e2a\u5217\u8868\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>env_file: .env<\/code><\/pre>\n<pre><code>env_file:\n  - .\/common.env\n  - .\/apps\/web.env\n  - \/opt\/runtime_opts.env<\/code><\/pre>\n<p>\u5982\u679c\u6307\u5b9a\u4e86Compose\u914d\u7f6e\u6587\u4ef6\uff0cenv_file\u8def\u5f84\u4e3a\u76f8\u5bf9\u4e8e\u8be5\u6587\u4ef6\u6240\u5728\u76ee\u5f55\u7684\u8def\u5f84\u3002\u5982\u679c\u73af\u5883\u6587\u4ef6\u4e2d\u8bbe\u7f6e\u6709\u4e0eenvironment\u9009\u9879\u540c\u540d\u7684\u53d8\u91cf\uff0c\u5c06\u4ee5\u540e\u8005\u4e3a\u51c6\uff0c\u65e0\u8bba\u8fd9\u4e9b\u53d8\u91cf\u7684\u503c\u662f\u7a7a\u8fd8\u662f\u672a\u5b9a\u4e49\u3002\u5176\u4e2d\u73af\u5883\u6587\u4ef6\u6bcf\u884c\u90fd\u4ee5VAR=VAL\u683c\u5f0f\u58f0\u660e\u73af\u5883\u53d8\u91cf\uff0c\u4ee5#\u5f00\u5934\u7684\u884c\u88ab\u89e3\u6790\u4e3a\u6ce8\u91ca\uff0c\u548c\u7a7a\u884c\u4e00\u6837\u5c06\u88ab\u5ffd\u7565\u3002\u73af\u5883\u6587\u4ef6\u793a\u4f8b\u5982\u4e0b\uff1a<\/p>\n<pre><code># Set Rails\/Rack environment\nRACK_ENV=development<\/code><\/pre>\n<p>\u5982\u679c\u53d8\u91cf\u7684\u503c\u88ab\u5f15\u53f7\u5f15\u8d77\u6765\uff08\u901a\u5e38\u662fshell\u53d8\u91cf\uff09\uff0c\u5219\u5f15\u53f7\u4e5f\u5305\u542b\u5728\u4f20\u9012\u7ed9Compose\u7684\u503c\u4e2d\u3002\u5982\u679c\u4ee5\u5217\u8868\u7684\u5f62\u5f0f\u540c\u65f6\u6307\u5b9a\u4e86\u591a\u4e2a\u73af\u5883\u6587\u4ef6\uff0c\u5217\u8868\u4e2d\u6587\u4ef6\u7684\u987a\u5e8f\u5bf9\u4e8e\u7ed9\u591a\u6b21\u51fa\u73b0\u7684\u73af\u5883\u53d8\u91cf\u786e\u5b9a\u503c\u5341\u5206\u91cd\u8981\uff0c\u4e14\u5217\u8868\u4e2d\u7684\u6587\u4ef6\u662f\u4ece\u4e0a\u5230\u4e0b\u5904\u7406\u7684\u3002\u5982\u679c\u6307\u5b9a\u4e86\u591a\u4e2a\u73af\u5883\u6587\u4ef6\u4e14\u6709\u81f3\u5c11\u4e24\u4e2a\u6587\u4ef6\u58f0\u660e\u4e86\u76f8\u540c\u540d\u79f0\u4f46\u4e0d\u540c\u503c\u7684\u73af\u5883\u53d8\u91cf\uff0c\u90a3\u4e48\u6307\u5b9a\u5217\u8868\u4e2d\u987a\u5e8f\u9760\u4e0b\u7684\u6587\u4ef6\u5c06\u8986\u76d6\u987a\u5e8f\u9760\u4e0a\u7684\u6587\u4ef6\u4e2d\u7684\u76f8\u540c\u540d\u79f0\u7684\u73af\u5883\u53d8\u91cf\u7684\u503c\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>services:\n  some-service:\n    env_file:\n      - a.env\n      - b.env<\/code><\/pre>\n<p>\u5982\u679ca.env\u4e2d\u6709VAR=1\uff0cb.env\u4e2d\u6709VAR=2\uff0c\u5219\u6700\u7ec8$VAR=2\u3002<\/p>\n<p>\u6ce8\u610f\uff1a\u8fd9\u91cc\u6240\u8bf4\u7684\u73af\u5883\u53d8\u91cf\u662f\u9488\u5bf9\u5bbf\u4e3b\u673a\u7684Compose\u800c\u8a00\u7684\uff0c\u5982\u679c\u5728\u670d\u52a1\u4e2d\u6307\u5b9a\u4e86build\u914d\u7f6e\u9879\uff0c\u90a3\u4e48\u8fd9\u4e9b\u53d8\u91cf\u5e76\u4e0d\u4f1a\u8fdb\u5165\u6784\u5efa\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u8981\u5b9a\u4e49\u6784\u5efa\u65f6\u7528\u7684\u73af\u5883\u53d8\u91cf\u9996\u9009build\u7684arg\u5b50\u9009\u9879\u3002<\/p>\n<p><strong>15. environment<\/strong><\/p>\n<p>\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u3002\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u5b57\u5178\u4e24\u79cd\u683c\u5f0f\u3002\u4efb\u4f55\u5e03\u5c14\u7c7b\u578b\u7684\u503c\u90fd\u5fc5\u987b\u7528\u5f15\u53f7\u5f15\u8d77\u6765\uff0c\u4ee5\u4fbf\u89e3\u6790\u5668\u5c06\u5b83\u4eec\u89e3\u91ca\u4e3a\u5b57\u7b26\u4e32\u3002\u503c\u8bbe\u7f6e\u4e86\u952e\u6ca1\u8bbe\u7f6e\u503c\u7684\u73af\u5883\u53d8\u91cf\u53ef\u4ee5\u5728\u8fd0\u884cCompose\u7684\u4e3b\u673a\u73af\u5883\u4e2d\u89e3\u6790\u5b83\u4eec\u7684\u503c\uff0c\u8fd9\u5bf9\u4e8e\u4f7f\u7528\u5bc6\u94a5\u548c\u7279\u5b9a\u4e8e\u4e3b\u673a\u7684\u503c\u7528\u5904\u5f88\u5927\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>environment:\n  RACK_ENV: development\n  SHOW: &#039;true&#039;\n  SESSION_SECRET:<\/code><\/pre>\n<pre><code>environment:\n  - RACK_ENV=development\n  - SHOW=true\n  - SESSION_SECRET<\/code><\/pre>\n<p>\u6ce8\u610f\uff1a\u8fd9\u91cc\u6240\u8bf4\u7684\u73af\u5883\u53d8\u91cf\u662f\u9488\u5bf9\u5bbf\u4e3b\u673a\u7684Compose\u800c\u8a00\u7684\uff0c\u5982\u679c\u5728\u670d\u52a1\u4e2d\u6307\u5b9a\u4e86build\u914d\u7f6e\u9879\uff0c\u90a3\u4e48\u8fd9\u4e9b\u53d8\u91cf\u5e76\u4e0d\u4f1a\u8fdb\u5165\u6784\u5efa\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u8981\u5b9a\u4e49\u6784\u5efa\u65f6\u7528\u7684\u73af\u5883\u53d8\u91cf\u9996\u9009build\u7684arg\u5b50\u9009\u9879\u3002<\/p>\n<p><strong>16. expose<\/strong><\/p>\n<p>\u66b4\u9732\u6307\u5b9a\u7aef\u53e3\uff0c\u4f46\u4e0d\u6620\u5c04\u5230\u5bbf\u4e3b\u673a\uff0c\u53ea\u88ab\u8fde\u63a5\u7684\u670d\u52a1\u8bbf\u95ee\u3002\u53ea\u80fd\u6307\u5b9a\u5185\u90e8\u7aef\u53e3\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>expose:\n  - &quot;3000&quot;\n  - &quot;8000&quot;<\/code><\/pre>\n<p><strong>17. external_links<\/strong><\/p>\n<p>\u94fe\u63a5\u5230docker-compose.yml\u5916\u90e8\u7684\u5bb9\u5668\uff0c\u751a\u81f3\u5e76\u975eCompose\u7ba1\u7406\u7684\u5916\u90e8\u5bb9\u5668\uff0c\u7279\u522b\u662f\u5bf9\u4e8e\u63d0\u4f9b\u5171\u4eab\u6216\u516c\u5171\u670d\u52a1\u7684\u5bb9\u5668\u3002\u5728\u540c\u65f6\u6307\u5b9a\u5bb9\u5668\u540d\u79f0\u548c\u94fe\u63a5\u522b\u540d\uff08CONTAINER:ALIAS\uff09\u65f6\uff0cexternal_links\u4e0e\u65e7\u7248\u672c\u4e2d\u7684\u914d\u7f6e\u9879links\u6709\u7c7b\u4f3c\u7684\u8bed\u4e49\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>external_links:\n  - redis_1\n  - project_db_1:mysql\n  - project_db_1:postgresql<\/code><\/pre>\n<p>\u6ce8\u610f\uff1aCompose\u9879\u76ee\u91cc\u9762\u7684\u5bb9\u5668\u8fde\u63a5\u5230\u5916\u90e8\u5bb9\u5668\u7684\u524d\u63d0\u6761\u4ef6\u662f\u5916\u90e8\u5bb9\u5668\u4e2d\u5fc5\u987b\u81f3\u5c11\u6709\u4e00\u4e2a\u5bb9\u5668\u8fde\u63a5\u5230\u4e0e\u9879\u76ee\u5185\u7684\u670d\u52a1\u7684\u540c\u4e00\u4e2a\u7f51\u7edc\u91cc\u9762\u3002\u5efa\u8bae\u4f7f\u7528networks\u4ee3\u66ff\u65e7\u7248\u672c\u4e2d\u7684\u914d\u7f6e\u9879Links\u3002<\/p>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0cexternal_links\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>18. extra_hosts<\/strong><\/p>\n<p>\u6dfb\u52a0\u4e3b\u673a\u540d\u5230IP\u7684\u6620\u5c04\u3002\u4f7f\u7528\u548cDocker\u5ba2\u6237\u7aef\u4e2d\u7684--add-host\u7684\u53c2\u6570\u4e00\u6837\u7684\u503c\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>extra_hosts:\n  - &quot;somehost:162.242.195.82&quot;\n  - &quot;otherhost:50.31.209.229&quot;<\/code><\/pre>\n<p>\u4f1a\u5728\u542f\u52a8\u540e\u7684\u670d\u52a1\u5bb9\u5668\u4e2d\u7684\/etc\/hosts\u6587\u4ef6\u4e2d\u6dfb\u52a0\u5982\u4e0b\u4e24\u6761\u5177\u6709\u4e3b\u673a\u540d\u548cIP\u5730\u5740\u7684\u6761\u76ee\uff1a<\/p>\n<pre><code>162.242.195.82  somehost\n50.31.209.229   otherhost<\/code><\/pre>\n<p><strong>19. healthcheck<\/strong><\/p>\n<p>\u914d\u7f6e\u8fd0\u884c\u68c0\u67e5\u4ee5\u786e\u5b9a\u670d\u52a1\u5bb9\u5668\u662f\u5426\u5065\u5eb7\u3002\u652f\u6301\u4ee5\u4e0b\u914d\u7f6e\u9009\u9879\uff1a<\/p>\n<p>test\uff1a\u6307\u5b9a\u5065\u5eb7\u68c0\u6d4b\u7684\u65b9\u6cd5\u3002<\/p>\n<p>interval\uff1a\u542f\u52a8\u5bb9\u5668\u5230\u8fdb\u884c\u5065\u5eb7\u68c0\u67e5\u7684\u95f4\u9694\u65f6\u95f4\u4ee5\u53ca\u4e24\u6b21\u5065\u5eb7\u68c0\u67e5\u7684\u95f4\u9694\u65f6\u95f4\u3002<\/p>\n<p>timeout\uff1a\u5355\u6b21\u5065\u5eb7\u68c0\u67e5\u7684\u8d85\u65f6\u65f6\u95f4\uff0c\u8d85\u8fc7\u8be5\u65f6\u95f4\u8be5\u6b21\u5065\u5eb7\u68c0\u67e5\u5931\u8d25\u3002<\/p>\n<p>retries\uff1a\u5065\u5eb7\u68c0\u67e5\u5931\u8d25\u540e\u7684\u6700\u5927\u91cd\u8bd5\u6b21\u6570\uff0c\u91cd\u8bd5\u4e86\u6700\u5927\u6b21\u6570\u4f9d\u7136\u5931\u8d25\uff0c\u5bb9\u5668\u5c06\u88ab\u89c6\u4e3aunhealthy\u3002<\/p>\n<p>start_period\uff1a\u4e3a\u9700\u8981\u65f6\u95f4\u5f15\u5bfc\u7684\u5bb9\u5668\u63d0\u4f9b\u7684\u521d\u59cb\u5316\u65f6\u95f4\uff0c\u5728\u6b64\u671f\u95f4\u68c0\u67e5\u5931\u8d25\u5c06\u4e0d\u8ba1\u5165\u6700\u5927\u91cd\u8bd5\u6b21\u6570\uff0c\u4f46\u662f\u5982\u679c\u5728\u542f\u52a8\u671f\u95f4\u5065\u5eb7\u68c0\u67e5\u6210\u529f\uff0c\u5219\u4f1a\u5c06\u5bb9\u5668\u89c6\u4e3a\u5df2\u542f\u52a8\uff0c\u5e76\u4e14\u6240\u6709\u8fde\u7eed\u5931\u8d25\u5c06\u8ba1\u5165\u6700\u5927\u91cd\u8bd5\u6b21\u6570\u3002<\/p>\n<p>\u5176\u4e2dinterval\u3001timeout\u548cstart_period\u90fd\u88ab\u6307\u5b9a\u4e3a\u6301\u7eed\u65f6\u95f4\uff08durations\uff09\u3002start_period\u662f\u57283.4\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165\u3002test\u5fc5\u987b\u662f\u5b57\u7b26\u4e32\u6216JSON\u6570\u7ec4\u683c\u5f0f\u3002\u5982\u679c\u662fJSON\u6570\u7ec4\u683c\u5f0f\uff0c\u7b2c\u4e00\u9879\u5fc5\u987b\u662fNONE\u3001CMD\u6216CMD-SHELL\u5176\u4e2d\u4e4b\u4e00\u3002\u5982\u679c\u662f\u5b57\u7b26\u4e32\u683c\u5f0f\uff0c\u5219\u7b49\u6548\u4e8e\u6307\u5b9aCMD-SHELL\u540e\u8ddf\u8be5\u5b57\u7b26\u4e32\u7684JSON\u6570\u7ec4\u683c\u5f0f\u3002<\/p>\n<p>\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u6307\u5b9a\u68c0\u6d4b\u65b9\u6cd5\u4e3a\u8bbf\u95eehttp:\/\/localhost\uff0c\u5065\u5eb7\u68c0\u67e5\u95f4\u9694\u65f6\u95f4\u4e3a1m30s\uff0c\u5065\u5eb7\u68c0\u67e5\u8d85\u65f6\u65f6\u95f4\u4e3a10s\uff0c\u91cd\u8bd5\u6b21\u6570\u4e3a3\uff0c\u542f\u52a8\u5bb9\u5668\u540e\u7b49\u5f85\u5065\u5eb7\u68c0\u67e5\u7684\u521d\u59cb\u5316\u65f6\u95f4\u4e3a40s\uff1a<\/p>\n<pre><code>healthcheck:\n  test: [&quot;CMD&quot;, &quot;curl&quot;, &quot;-f&quot;, &quot;http:\/\/localhost&quot;]\n  interval: 1m30s\n  timeout: 10s\n  retries: 3\n  start_period: 40s<\/code><\/pre>\n<p>\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u4e24\u79cd\u5f62\u5f0f\u7b49\u6548\uff1a<\/p>\n<pre><code>test: [&quot;CMD-SHELL&quot;, &quot;curl -f http:\/\/localhost || exit 1&quot;]<\/code><\/pre>\n<pre><code>test: curl -f https:\/\/localhost || exit 1<\/code><\/pre>\n<p>\u4f7f\u7528disable: true\u53ef\u4ee5\u8bbe\u7f6e\u955c\u50cf\u7981\u7528\u6240\u6709\u5065\u5eb7\u68c0\u67e5\uff0c\u76f8\u5bf9\u4e8etest: [&quot;NONE&quot;]\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>healthcheck:\n  disable: true<\/code><\/pre>\n<p><strong>20. image<\/strong><\/p>\n<p>\u6307\u5b9a\u8981\u4ece\u4e2d\u542f\u52a8\u5bb9\u5668\u7684\u955c\u50cf\u3002\u53ef\u4ee5\u5199\u4ed3\u5e93\/\u6807\u7b7e\uff08repository\/tag\uff09\u6216\u955c\u50cfID\u3002\u793a\u4f8b\u5982\u4e0b\uff1a<\/p>\n<pre><code>image: redis<\/code><\/pre>\n<pre><code>image: ubuntu:18.04<\/code><\/pre>\n<pre><code>image: tutum\/influxdb<\/code><\/pre>\n<pre><code>image: example-registry.com:4000\/postgresql<\/code><\/pre>\n<pre><code>image: a4bc65fd<\/code><\/pre>\n<p>\u5982\u679c\u955c\u50cf\u4e0d\u5b58\u5728\uff0cCompose\u4f1a\u81ea\u52a8\u62c9\u53d6\u955c\u50cf\uff0c\u9664\u975e\u6307\u5b9a\u4e86build\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4f1a\u4f7f\u7528\u6307\u5b9a\u9009\u9879\u6784\u5efa\u955c\u50cf\u5e76\u7ed9\u955c\u50cf\u6253\u4e0a\u6307\u5b9a\u6807\u7b7e\u3002<\/p>\n<p><strong>21. init<\/strong><\/p>\n<p>\u57283.7\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u5728\u5bb9\u5668\u5185\u8fd0\u884c\u4e00\u4e2a\u521d\u59cb\u5316\u7a0b\u5e8f\u4ee5\u8f6c\u53d1\u4fe1\u53f7\u5e76\u83b7\u53d6\u8fdb\u7a0b\u3002\u8bbe\u7f6e\u4e3atrue\u5373\u53ef\u4e3a\u670d\u52a1\u542f\u52a8\u6b64\u529f\u80fd\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  web:\n    image: alpine:latest\n    init: true<\/code><\/pre>\n<p>\u6ce8\u610f\uff1a\u9ed8\u8ba4\u4f7f\u7528\u7684\u521d\u59cb\u5316\u4e8c\u8fdb\u5236\u6587\u4ef6\u662fTini\uff0c\u5e76\u5b89\u88c5\u5728\u4e3b\u673a\u5b88\u62a4\u8fdb\u7a0b\u7684\/usr\/libexec\/docker-init\u3002\u53ef\u4ee5\u901a\u8fc7Daemon configuration file\u4e2d\u7684init-path\u5c06\u5b88\u62a4\u8fdb\u7a0b\u914d\u7f6e\u4e3a\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u521d\u59cb\u5316\u4e8c\u8fdb\u5236\u6587\u4ef6 \u3002<\/p>\n<p><strong>22. isolation<\/strong><\/p>\n<p>\u6307\u5b9a\u5bb9\u5668\u7684\u9694\u79bb\u6280\u672f\u3002Linux\u4e0a\u53ea\u652f\u6301default\u503c\u3002Windows\u4e0a\u652f\u6301default\u3001process\u548chyperv\u8fd9\u4e09\u4e2a\u503c\u3002<\/p>\n<p><strong>23. labels<\/strong><\/p>\n<p>\u5c06\u5143\u6570\u636e\u4ee5\u6807\u7b7e\u7684\u5f62\u5f0f\u6dfb\u52a0\u5230\u5bb9\u5668\u4e2d\u3002\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u5b57\u5178\u4e24\u79cd\u683c\u5f0f\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>labels:\n  com.example.description: &quot;Accounting webapp&quot;\n  com.example.department: &quot;Finance&quot;\n  com.example.label-with-empty-value: &quot;&quot;<\/code><\/pre>\n<pre><code>labels:\n  - &quot;com.example.description=Accounting webapp&quot;\n  - &quot;com.example.department=Finance&quot;\n  - &quot;com.example.label-with-empty-value&quot;<\/code><\/pre>\n<p><strong>24. links<\/strong><\/p>\n<p>\u8b66\u544a\uff1a--link\u662fDocker\u7684\u9057\u7559\u529f\u80fd\u3002\u5b83\u6700\u7ec8\u53ef\u80fd\u4f1a\u88ab\u5220\u9664\u3002\u5efa\u8bae\u60a8\u4f7f\u7528\u7528\u6237\u81ea\u5b9a\u4e49\u7f51\u7edc\u4ee3\u66ff--link\u6765\u8fdb\u884c\u4e24\u4e2a\u5bb9\u5668\u95f4\u7684\u901a\u4fe1\u3002\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u7f51\u7edc\u4e0d\u652f\u6301--link\u5728\u5bb9\u5668\u4e4b\u95f4\u5171\u4eab\u7684\u73af\u5883\u53d8\u91cf\u7684\u529f\u80fd\u3002\u4f46\u662f\u53ef\u4ee5\u4f7f\u7528\u4f8b\u5982\u6570\u636e\u5377\u4e4b\u7c7b\u7684\u5176\u4ed6\u673a\u5236\u4ee5\u66f4\u53ef\u63a7\u7684\u65b9\u5f0f\u5728\u5bb9\u5668\u4e4b\u95f4\u5171\u4eab\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<p>\u94fe\u63a5\u5230\u5176\u4ed6\u670d\u52a1\u4e2d\u7684\u5bb9\u5668\u3002\u53ef\u4ee5\u4f7f\u7528&quot;SERVICE:ALIAS&quot;\u6216&quot;SERVICE&quot;\u7684\u683c\u5f0f\uff0c\u5176\u4e2dSERVICE\u4e3a\u670d\u52a1\u540d\u79f0\uff0cALIAS\u4e3a\u94fe\u63a5\u522b\u540d\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>web:\n  links:\n    - &quot;db&quot;\n    - &quot;db:database&quot;\n    - &quot;redis&quot;<\/code><\/pre>\n<p>\u94fe\u63a5\u670d\u52a1\u7684\u5bb9\u5668\u53ef\u4ee5\u901a\u8fc7\u4e0e\u522b\u540d\u76f8\u540c\u7684\u4e3b\u673a\u540d\u8bbf\u95ee\uff0c\u5982\u679c\u672a\u6307\u5b9a\u522b\u540d\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528\u670d\u52a1\u540d\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e0d\u9700\u8981\u94fe\u63a5\u5373\u53ef\u4f7f\u670d\u52a1\u8fdb\u884c\u901a\u4fe1\uff0c\u4efb\u4f55\u670d\u52a1\u90fd\u53ef\u4ee5\u4f7f\u7528\u8be5\u670d\u52a1\u7684\u540d\u79f0\u8bbf\u95ee\u4efb\u4f55\u5176\u4ed6\u670d\u52a1\u3002\u94fe\u63a5\u4e5f\u53ef\u4ee5\u548cdepends_on\u4e00\u6837\u8868\u793a\u670d\u52a1\u4e4b\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb \uff0c\u56e0\u6b64\u53ef\u4ee5\u786e\u5b9a\u670d\u52a1\u542f\u52a8\u7684\u987a\u5e8f\u3002<\/p>\n<p>\u6ce8\u610f\uff1a\u5982\u679c\u540c\u65f6\u5b9a\u4e49\u94fe\u63a5\u548c\u7f51\u7edc\uff0c\u5219\u5b83\u4eec\u4e4b\u95f4\u5177\u6709\u94fe\u63a5\u7684\u670d\u52a1\u5fc5\u987b\u5171\u4eab\u81f3\u5c11\u4e00\u4e2a\u516c\u5171\u7f51\u7edc\u624d\u80fd\u8fdb\u884c\u901a\u4fe1\u3002<\/p>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0clinks\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>25. logging<\/strong><\/p>\n<p>\u670d\u52a1\u7684\u65e5\u5fd7\u914d\u7f6e\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>logging:\n  driver: syslog\n  options:\n    syslog-address: &quot;tcp:\/\/192.168.0.42:123&quot;<\/code><\/pre>\n<p>driver\u914d\u7f6e\u9879\u6307\u5b9a\u670d\u52a1\u5bb9\u5668\u7684\u65e5\u5fd7\u9a71\u52a8\uff0c\u4e0edocker run\u4e2d\u7684--log-driver\u9009\u9879\u4e00\u6837\u3002\u9ed8\u8ba4\u503c\u4e3ajson-file\uff0c\u8fd9\u91cc\u5217\u4e3e\u4e09\u79cd\u65e5\u5fd7\u9a71\u52a8\u7c7b\u578b\uff1a<\/p>\n<pre><code>driver: &quot;json-file&quot;<\/code><\/pre>\n<pre><code>driver: &quot;syslog&quot;<\/code><\/pre>\n<pre><code>driver: &quot;none&quot;<\/code><\/pre>\n<p>\u4f7f\u7528options\u914d\u7f6e\u9879\u4e3a\u65e5\u5fd7\u9a71\u52a8\u6307\u5b9a\u65e5\u5fd7\u8bb0\u5f55\u9009\u9879\uff0c\u4e0edocker run\u4e2d\u7684--log-opt\u9009\u9879\u4e00\u6837\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>driver: &quot;syslog&quot;\noptions:\n  syslog-address: &quot;tcp:\/\/192.168.0.42:123&quot;<\/code><\/pre>\n<p>\u9ed8\u8ba4\u65e5\u5fd7\u9a71\u52a8json-file\u5177\u6709\u9650\u5236\u65e5\u5fd7\u5b58\u50a8\u91cf\u7684\u9009\u9879\u3002\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0cmax-size\u8bbe\u7f6e\u6700\u5927\u5b58\u50a8\u5927\u5c0f\u4e3a200k\uff0cmax-file\u8bbe\u7f6e\u5b58\u50a8\u7684\u6700\u5927\u6587\u4ef6\u6570\u4e3a10\uff0c\u968f\u7740\u65e5\u5fd7\u8d85\u8fc7\u6700\u5927\u9650\u5236\uff0c\u5c06\u5220\u9664\u8f83\u65e7\u7684\u65e5\u5fd7\u6587\u4ef6\u4ee5\u5141\u8bb8\u5b58\u50a8\u65b0\u65e5\u5fd7\uff1a<\/p>\n<pre><code>options:\n  max-size: &quot;200k&quot;\n  max-file: &quot;10&quot;<\/code><\/pre>\n<p><strong>26. network_mode<\/strong><\/p>\n<p>\u8bbe\u7f6e\u7f51\u7edc\u6a21\u5f0f\u3002\u4f7f\u7528\u548cDocker\u5ba2\u6237\u7aef\u4e2d\u7684--network\u7684\u53c2\u6570\u4e00\u6837\u7684\u503c\uff0c\u683c\u5f0f\u4e3aservice:[service name]\u3002\u53ef\u4ee5\u6307\u5b9a\u4f7f\u7528\u670d\u52a1\u6216\u8005\u5bb9\u5668\u7684\u7f51\u7edc\u3002\u793a\u4f8b\u5982\u4e0b\uff1a<\/p>\n<pre><code>network_mode: &quot;bridge&quot;<\/code><\/pre>\n<pre><code>network_mode: &quot;host&quot;<\/code><\/pre>\n<pre><code>network_mode: &quot;none&quot;<\/code><\/pre>\n<pre><code>network_mode: &quot;service:[service name]&quot;<\/code><\/pre>\n<pre><code>network_mode: &quot;container:[container name\/id]&quot;<\/code><\/pre>\n<p>\u6ce8\u610f\u4e8b\u9879\uff1a<\/p>\n<p>\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0c\u8be5\u9009\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p>network_mode: &quot;host&quot;\u4e0d\u80fd\u4e0elinks\u914d\u7f6e\u9879\u6df7\u7528\u3002<\/p>\n<p><strong>27. networks<\/strong><\/p>\n<p>\u6307\u5b9a\u6240\u52a0\u5165\u7684\u7f51\u7edc\u3002\u9700\u8981\u5728\u9876\u5c42networks\u914d\u7f6e\u9879\u4e2d\u5f15\u5165\u5177\u4f53\u7684\u7f51\u7edc\u4fe1\u606f\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>services:\n  some-service:\n    networks:\n     - some-network\n     - other-network\n\nnetworks:\n  some-network:\n  other-network:<\/code><\/pre>\n<p><strong>(1) aliases<\/strong><\/p>\n<p>\u6307\u5b9a\u670d\u52a1\u5728\u6b64\u7f51\u7edc\u4e0a\u7684\u522b\u540d\uff08\u5907\u7528\u4e3b\u673a\u540d\uff09\u3002\u540c\u4e00\u7f51\u7edc\u4e0a\u7684\u5176\u4ed6\u5bb9\u5668\u53ef\u4ee5\u4f7f\u7528\u670d\u52a1\u540d\u79f0\u6216\u6b64\u522b\u540d\u6765\u8fde\u63a5\u5230\u670d\u52a1\u7684\u4efb\u4f55\u4e00\u4e2a\u5bb9\u5668\u3002\u7531\u4e8ealiases\u5c5e\u4e8e\u7f51\u7edc\u8303\u56f4\uff0c\u56e0\u6b64\u540c\u4e00\u670d\u52a1\u5728\u4e0d\u540c\u7684\u7f51\u7edc\u4e0a\u53ef\u4ee5\u5177\u6709\u4e0d\u540c\u7684\u522b\u540d\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>services:\n  some-service:\n    networks:\n      some-network:\n        aliases:\n          - alias1\n          - alias3\n      other-network:\n        aliases:\n          - alias2<\/code><\/pre>\n<p>\u5728\u4ee5\u4e0b\u793a\u4f8b\u4e2d\uff0c\u63d0\u4f9b\u4e86web\u3001worker\u548cdb\u4e09\u4e2a\u670d\u52a1\uff0c\u4ee5\u53canew\u548clegacy\u4e24\u4e2a\u7f51\u7edc\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  web:\n    image: &quot;nginx:alpine&quot;\n    networks:\n      - new\n  worker:\n    image: &quot;my-worker-image:latest&quot;\n    networks:\n      - legacy\n  db:\n    image: mysql\n    networks:\n      new:\n        aliases:\n          - database\n      legacy:\n        aliases:\n          - mysql\n\nnetworks:\n  new:\n  legacy:<\/code><\/pre>\n<p>\u5728\u8be5\u4f8b\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e3b\u673a\u540ddb\u6216database\u5728new\u7f51\u7edc\u4e0a\u8bbf\u95eedb\u670d\u52a1\uff0c\u901a\u8fc7db\u6216mysql\u5728legacy\u7f51\u7edc\u4e0a\u8bbf\u95eedb\u670d\u52a1\u3002<\/p>\n<p>\u6ce8\u610f\uff1a\u7f51\u7edc\u8303\u56f4\u5185\u7684\u522b\u540d\u53ef\u4ee5\u88ab\u591a\u4e2a\u5bb9\u5668\u751a\u81f3\u591a\u4e2a\u670d\u52a1\u5171\u4eab\u3002\u5982\u679c\u662f\u8fd9\u6837\uff0c\u5219\u4e0d\u80fd\u4fdd\u8bc1\u540d\u79f0\u6070\u597d\u89e3\u6790\u5230\u54ea\u4e00\u4e2a\u5bb9\u5668\u3002<\/p>\n<p><strong>(2) ipv4_address\u3001ipv6_address<\/strong><\/p>\n<p>\u52a0\u5165\u7f51\u7edc\u540e\uff0c\u4e3a\u6b64\u670d\u52a1\u7684\u5bb9\u5668\u6307\u5b9a\u4e00\u4e2a\u9759\u6001IP\u5730\u5740\u3002\u5728\u9876\u5c42networks\u914d\u7f6e\u9879\u4e2d\u7684\u76f8\u5e94\u7f51\u7edc\u914d\u7f6e\u5fc5\u987b\u6709\u5b50\u7f51\u914d\u7f6e\u8986\u76d6\u6bcf\u4e2a\u9759\u6001\u5730\u5740\u7684ipam\u914d\u7f6e\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  app:\n    image: nginx:alpine\n    networks:\n      app_net:\n        ipv4_address: 172.16.238.10\n        ipv6_address: 2001:3984:3989::10\n\nnetworks:\n  app_net:\n    ipam:\n      driver: default\n      config:\n        - subnet: &quot;172.16.238.0\/24&quot;\n        - subnet: &quot;2001:3984:3989::\/64&quot;<\/code><\/pre>\n<p>\u6ce8\u610f\uff1a\u5982\u679c\u9700\u8981IPv6\u5bfb\u5740\uff0c\u5219\u5fc5\u987b\u4f7f\u7528V2.x\u7248\u672c\u7684Compose\u914d\u7f6e\u6587\u4ef6\u5e76\u8bbe\u7f6e\u9876\u5c42networks\u914d\u7f6e\u9879\u4e0b\u7684enable_ipv6\u9009\u9879\u3002\u5728\u5f53\u524dswarm mode\u4e0bIPv6\u9009\u9879\u4e0d\u4f1a\u8d77\u4f5c\u7528\u3002<\/p>\n<p><strong>28. pid<\/strong><\/p>\n<p>\u8ddf\u4e3b\u673a\u7cfb\u7edf\u5171\u4eab\u8fdb\u7a0b\u547d\u540d\u7a7a\u95f4\u3002<\/p>\n<pre><code>pid: &quot;host&quot;<\/code><\/pre>\n<p>\u5c06PID\u6a21\u5f0f\u8bbe\u7f6e\u4e3a\u4e3b\u673aPID\u6a21\u5f0f\uff0c\u6253\u5f00\u8be5\u9009\u9879\u7684\u5bb9\u5668\u4e4b\u95f4\uff0c\u4ee5\u53ca\u5bb9\u5668\u548c\u5bbf\u4e3b\u673a\u64cd\u4f5c\u7cfb\u7edf\u4e4b\u95f4\u53ef\u4ee5\u901a\u8fc7\u8fdb\u7a0bID\u6765\u76f8\u4e92\u8bbf\u95ee\u548c\u64cd\u4f5c\u3002<\/p>\n<p><strong>29. ports<\/strong><\/p>\n<p>\u66b4\u9732\u7aef\u53e3\u3002\u6ce8\u610f\u7aef\u53e3\u6620\u5c04\u4e0enetwork_mode: host\u4e0d\u517c\u5bb9\u3002\u652f\u6301short\u548clong\u4e24\u79cd\u683c\u5f0f\u7684\u8bed\u6cd5\u3002short\u8bed\u6cd5\u53ef\u4ee5\u4f7f\u7528HOST:CONTAINER\u7684\u683c\u5f0f\u6307\u5b9a\u7aef\u53e3\u6620\u5c04\uff0c\u4e5f\u53ef\u4ee5\u6307\u5b9a\u5bb9\u5668\u7aef\u53e3\uff0c\u5bbf\u4e3b\u673a\u4f1a\u968f\u673a\u9009\u62e9\u4e34\u65f6\u7aef\u53e3\u8fdb\u884c\u6620\u5c04\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>ports:\n  - &quot;3000&quot;\n  - &quot;3000-3005&quot;\n  - &quot;8000:8000&quot;\n  - &quot;9090-9091:8080-8081&quot;\n  - &quot;49100:22&quot;\n  - &quot;127.0.0.1:8001:8001&quot;\n  - &quot;127.0.0.1:5000-5010:5000-5010&quot;\n  - &quot;6060:6060\/udp&quot;\n  - &quot;12400-12500:1240&quot;<\/code><\/pre>\n<p>\u6ce8\u610f\uff1a\u5f53\u4f7f\u7528HOST:CONTAINE\u683c\u5f0f\u6765\u6620\u5c04\u7aef\u53e3\u65f6\uff0c\u5982\u679c\u4f7f\u7528\u7684\u5bb9\u5668\u7aef\u53e3\u5c0f\u4e8e60\u53ef\u80fd\u4f1a\u5f97\u5230\u9519\u8bef\u5f97\u7ed3\u679c\uff0c\u56e0\u4e3aYAML\u5c06\u4f1a\u89e3\u6790xx:yy\u8fd9\u79cd\u6570\u5b57\u683c\u5f0f\u4e3a60\u8fdb\u5236\uff0c\u56e0\u6b64\u5efa\u8bae\u59cb\u7ec8\u91c7\u7528\u5b57\u7b26\u4e32\u683c\u5f0f\u6765\u6307\u5b9a\u7aef\u53e3\u6620\u5c04\u3002<\/p>\n<p>long\u8bed\u6cd5\u652f\u6301\u914d\u7f6eshort\u8bed\u6cd5\u4e2d\u4e0d\u652f\u6301\u7684\u9644\u52a0\u5b57\u6bb5\u3002\u8fd9\u4e9b\u9644\u52a0\u5b57\u6bb5\u5982\u4e0b\uff1a<\/p>\n<p>target\uff1a\u6307\u5b9a\u5bb9\u5668\u5185\u7684\u7aef\u53e3\u3002<\/p>\n<p>published\uff1a\u6307\u5b9a\u516c\u5f00\u7684\u7aef\u53e3\u3002<\/p>\n<p>protocol\uff1a\u6307\u5b9a\u7aef\u53e3\u534f\u8bae\uff08tcp\u6216udp\uff09\u3002<\/p>\n<p>mode\uff1a\u4f7f\u7528host\u5728\u6bcf\u4e2a\u8282\u70b9\u516c\u5f00\u4e00\u4e2a\u4e3b\u673a\u7aef\u53e3\uff0c\u6216\u4f7f\u7528ingress\u5bf9swarm mode\u7aef\u53e3\u8fdb\u884c\u8d1f\u8f7d\u5747\u8861\u3002<\/p>\n<p>\u793a\u4f8b\u5982\u4e0b\uff1a<\/p>\n<pre><code>ports:\n  - target: 80\n    published: 8080\n    protocol: tcp\n    mode: host<\/code><\/pre>\n<p>long\u8bed\u6cd5\u57283.2\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p><strong>30. restart<\/strong><\/p>\n<p>\u6307\u5b9a\u91cd\u542f\u7b56\u7565\u3002\u4f8b\u5982\u60f3\u8981\u5728\u5bb9\u5668\u9000\u51fa\u65f6\u603b\u662f\u4f1a\u91cd\u542f\u5bb9\u5668\uff0c\u6307\u5b9a\u4ee5\u4e0b\u91cd\u542f\u7b56\u7565\uff1a<\/p>\n<pre><code>restart: always<\/code><\/pre>\n<p>\u4e00\u5171\u652f\u6301\u4ee5\u4e0b\u91cd\u542f\u7b56\u7565\uff1a  <\/p>\n<p>no\uff1a\u5728\u4efb\u4f55\u60c5\u51b5\u4e0b\u90fd\u4e0d\u4f1a\u91cd\u542f\u5bb9\u5668\u3002\u9ed8\u8ba4\u7684\u91cd\u542f\u7b56\u7565\u3002<\/p>\n<p>always\uff1a\u5728\u5bb9\u5668\u9000\u51fa\u65f6\u603b\u662f\u91cd\u542f\u5bb9\u5668\u3002<\/p>\n<p>on-failure\uff1a\u5728\u5bb9\u5668\u4ee5\u975e0\u72b6\u6001\u7801\u9000\u51fa\u65f6\u624d\u4f1a\u91cd\u542f\u3002<\/p>\n<p>unless-stopped\uff1a\u5728\u5bb9\u5668\u9000\u51fa\u65f6\u603b\u662f\u91cd\u542f\u5bb9\u5668\uff0c\u4f46\u662f\u4e0d\u8003\u8651\u5728Docker\u5b88\u62a4\u8fdb\u7a0b\u542f\u52a8\u65f6\u5c31\u5df2\u7ecf\u505c\u6b62\u4e86\u7684\u5bb9\u5668\u3002<\/p>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0crestart\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>31. secrets<\/strong><\/p>\n<p>\u4e3a\u6bcf\u4e2a\u670d\u52a1\u6388\u4e88\u5bf9\u4fdd\u5bc6\u6570\u636e\uff08secrets\uff09\u7684\u8bbf\u95ee\u6743\u9650\u3002\u652f\u6301short\u548clong\u4e24\u79cd\u683c\u5f0f\u7684\u8bed\u6cd5\u3002\u66f4\u591asecrets\u4fe1\u606f\uff0c\u53c2\u8003secrets\u3002<\/p>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u8be5\u4fdd\u5bc6\u6570\u636e\uff08secret\uff09\u5fc5\u987b\u5df2\u5b58\u5728\u6216\u8005\u5728Compose\u914d\u7f6e\u6587\u4ef6\u9876\u5c42secrets\u914d\u7f6e\u9879\u4e2d\u5b9a\u4e49\uff0c\u5426\u5219\u5806\u6808\u90e8\u7f72\u5c06\u5931\u8d25\u3002<\/p>\n<p>short\u8bed\u6cd5\u4ec5\u6307\u5b9asecret\u540d\u79f0\u6765\u6388\u4e88\u5bb9\u5668\u8bbf\u95eesecret\u6570\u636e\u7684\u6743\u9650\u5e76\u5c06\u5176\u6302\u8f7d\u5230\u5bb9\u5668\u7684\/run\/secrets\/&lt;secret_name&gt;\u4e0a\u3002source\u540d\u79f0\u548c\u76ee\u6807\u6302\u8f7d\u70b9\u90fd\u8bbe\u7f6e\u4e3asecret\u540d\u79f0\u3002\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u6388\u4e88\u4e86redis\u670d\u52a1\u5bf9secrets\u7684my_secret\u548cmy_other_secret\u7684\u8bbf\u95ee\u6743\u9650\uff0c\u5176\u4e2dmy_secret\u7684\u503c\u8bbe\u7f6e\u5230\u6587\u4ef6.\/my_secret.txt\u7684\u5185\u5bb9\u4e2d\uff0cmy_other_secret\u5b9a\u4e49\u4e3a\u5916\u90e8\u8d44\u6e90\uff0c\u8fd9\u610f\u5473\u7740\u5b83\u5df2\u7ecf\u5728Docker\u4e2d\u901a\u8fc7\u8fd0\u884cdocker secret create\u547d\u4ee4\u6216\u5176\u4ed6\u5806\u6808\u90e8\u7f72\u8fdb\u884c\u5b9a\u4e49\uff0c\u5982\u679c\u5916\u90e8secret\u4e0d\u5b58\u5728\uff0c\u5806\u6808\u90e8\u7f72\u5c06\u4f1a\u5931\u8d25\u5e76\u663e\u793asecret not found\u9519\u8bef\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  redis:\n    image: redis:latest\n    deploy:\n      replicas: 1\n    secrets:\n      - my_secret\n      - my_other_secret\nsecrets:\n  my_secret:\n    file: .\/my_secret.txt\n  my_other_secret:\n    external: true<\/code><\/pre>\n<p>long\u8bed\u6cd5\u63d0\u4f9b\u4e86\u5728\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u5185\u5982\u4f55\u521b\u5efasecret\u7684\u66f4\u591a\u7c92\u5ea6\uff1a<\/p>\n<p>source\uff1aDocker\u4e2d\u5b58\u5728\u7684secret\u540d\u79f0\u3002<\/p>\n<p>target\uff1a\u6307\u5b9a\u8981\u6302\u8f7d\u5230\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u7684\/run\/secrets\/\u4e2d\u7684\u6587\u4ef6\u540d\u79f0\u3002\u5982\u679c\u672a\u6307\u5b9a\uff0c\u9ed8\u8ba4\u4e3asource\u7684\u503c\u3002<\/p>\n<p>uid\u548cgid\uff1a\u6307\u5b9a\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u7684\/run\/secrets\/\u4e2d\u6240\u62e5\u6709\u7684\u8be5\u6587\u4ef6\u7684UID\u6216GID\u3002\u5982\u679c\u672a\u6307\u5b9a\uff0c\u4e24\u8005\u90fd\u9ed8\u8ba4\u4e3a0\u3002<\/p>\n<p>mode\uff1a\u4ee5\u516b\u8fdb\u5236\u8868\u793a\u6cd5\u6307\u5b9a\u8981\u6302\u8f7d\u5230\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u7684\/run\/secrets\/\u4e2d\u7684\u6587\u4ef6\u6743\u9650\u3002\u4f8b\u5982\uff0c0444\u4ee3\u8868\u53ef\u8bfb\u3002\u9ed8\u8ba4\u503c\u5728Docker 1.13.1\u4e3a0000\uff0c\u5728\u8f83\u65b0\u7248\u672c\u4e3a0444\u3002secret\u5185\u5bb9\u5df2\u6302\u8f7d\u5230\u4e34\u65f6\u6587\u4ef6\u7cfb\u7edf\u4e2d\uff0c\u6240\u4ee5\u4e0d\u53ef\u5199\uff0c\u5982\u679c\u8bbe\u7f6e\u4e86\u53ef\u5199\u4f4d\u5c06\u88ab\u5ffd\u7565\u3002\u53ef\u4ee5\u8bbe\u7f6e\u53ef\u6267\u884c\u4f4d\u3002\u5982\u679c\u4e0d\u719f\u6089UNIX\u6587\u4ef6\u6743\u9650\u6a21\u5f0f\uff0c\u53ef\u4ee5\u4f7f\u7528\u6743\u9650\u8ba1\u7b97\u5668 \u3002<\/p>\n<p>\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u6307\u5b9asecret\u540d\u79f0\u4e3amy_secret\uff0c\u6388\u4e88redis\u670d\u52a1\u5bf9my_secret\u7684\u8bbf\u95ee\u6743\u9650\uff0c\u6307\u5b9a\u8981\u6302\u8f7d\u5230redis\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u7684\/run\/secrets\/\u4e2d\u7684\u6587\u4ef6\u540d\u79f0\u4e3aredis_secret\uff0c\u6307\u5b9aUID\u548cGID\u5747\u4e3a103\uff0c\u6307\u5b9a\u8981\u6302\u8f7d\u5230\u670d\u52a1\u7684\u4efb\u52a1\u5bb9\u5668\u7684\/run\/secrets\/\u4e2d\u7684\u6587\u4ef6\u6743\u9650\u4e3a0440\uff08group-readable\uff09\uff0c\u4f46\u8be5redis\u670d\u52a1\u6ca1\u6709\u8bbf\u95eemy_other_secret\u7684\u6743\u9650\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  redis:\n    image: redis:latest\n    deploy:\n      replicas: 1\n    secrets:\n      - source: my_secret\n        target: redis_secret\n        uid: &#039;103&#039;\n        gid: &#039;103&#039;\n        mode: 0440\nsecrets:\n  my_secret:\n    file: .\/my_secret.txt\n  my_other_secret:\n    external: true<\/code><\/pre>\n<p>\u53ef\u4ee5\u6388\u4e88\u670d\u52a1\u8bbf\u95ee\u591a\u4e2asecret\u7684\u6743\u9650\uff0c\u5e76\u4e14\u53ef\u4ee5\u6df7\u5408long\u548cshort\u8bed\u6cd5\u3002\u5b9a\u4e49secret\u5e76\u4e0d\u610f\u5473\u7740\u6388\u4e88\u670d\u52a1\u5bf9\u5176\u7684\u8bbf\u95ee\u6743\u9650\u3002<\/p>\n<p><strong>32. security_opt<\/strong><\/p>\n<p>\u4e3a\u6bcf\u4e2a\u5bb9\u5668\u8986\u76d6\u9ed8\u8ba4\u7684\u6807\u7b7e\uff08label\uff09\u3002\u4f8b\u5982\u914d\u7f6e\u6807\u7b7e\u4e2d\u7684\u7528\u6237\u540d\u548c\u89d2\u8272\u540d\uff1a<\/p>\n<pre><code>security_opt:\n  - label:user:USER\n  - label:role:ROLE<\/code><\/pre>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0csecurity_opt\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>33. stop_grace_period<\/strong><\/p>\n<p>\u6307\u5b9a\u5728\u53d1\u9001SIGKILL\u4e4b\u524d\uff0c\u5982\u679c\u5bb9\u5668\u65e0\u6cd5\u5904\u7406SIGTERM\u6216\u4f7f\u7528stop_signal\u6307\u5b9a\u7684\u4efb\u4f55\u505c\u6b62\u4fe1\u53f7\u65f6\uff0c\u8bd5\u56fe\u505c\u6b62\u8be5\u5bb9\u5668\u6240\u9700\u8981\u7684\u7b49\u5f85\u65f6\u95f4\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cstop\u5728\u53d1\u9001SIGKILL\u4e4b\u524d\u7b49\u5f8510\u79d2\u4ee5\u9000\u51fa\u5bb9\u5668\u3002\u65f6\u95f4\u6307\u5b9a\u4e3aduration\u3002\u5177\u4f53\u793a\u4f8b\u5982\u4e0b\uff1a<\/p>\n<pre><code>stop_grace_period: 1s<\/code><\/pre>\n<pre><code>stop_grace_period: 1m30s<\/code><\/pre>\n<p><strong>34. stop_signal<\/strong><\/p>\n<p>\u8bbe\u7f6e\u505c\u6b62\u5bb9\u5668\u7684\u4fe1\u53f7\u3002\u9ed8\u8ba4\u4f7f\u7528SIGTERM\u505c\u6b62\u5bb9\u5668\u3002\u4f8b\u5982\u6307\u5b9aSIGUSR1\u4fe1\u53f7\uff1a<\/p>\n<pre><code>stop_signal: SIGUSR1<\/code><\/pre>\n<p><strong>35. sysctls<\/strong><\/p>\n<p>\u5728\u5bb9\u5668\u4e2d\u8bbe\u7f6e\u7684\u5185\u6838\u53c2\u6570\u3002\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u5b57\u5178\u4e24\u79cd\u683c\u5f0f\u3002\u4f8b\u5982\u6307\u5b9a\u8fde\u63a5\u6570\u4e3a1024\u548c\u5f00\u542fTCP\u7684syncookies\uff1a<\/p>\n<pre><code>sysctls:\n  net.core.somaxconn: 1024\n  net.ipv4.tcp_syncookies: 0<\/code><\/pre>\n<pre><code>sysctls:\n  - net.core.somaxconn=1024\n  - net.ipv4.tcp_syncookies=0<\/code><\/pre>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0csysctls\u914d\u7f6e\u9879\u8981\u6c42Docker Engine 19.03\u6216\u4ee5\u4e0a\u3002<\/p>\n<p><strong>36. tmpfs<\/strong><\/p>\n<p>\u57283.6\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u6302\u8f7d\u4e00\u4e2a\u4e34\u65f6\u6587\u4ef6\u7cfb\u7edf\u5230\u5bb9\u5668\u5185\u90e8\u3002\u53ef\u4ee5\u662f\u4e00\u4e2a\u503c\u6216\u4e00\u4e2a\u5217\u8868\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>tmpfs: \/run\n1.\ntmpfs:\n  - \/run\n  - \/tmp<\/code><\/pre>\n<p>\u5728\u5bb9\u5668\u5185\u6302\u8f7d\u4e00\u4e2a\u4e34\u65f6\u6587\u4ef6\u7cfb\u7edf\u3002Size\u53ef\u4ee5\u6307\u5b9a\u6302\u8f7d\u7684tmpfs\u5927\u5c0f\uff0c\u4ee5\u5b57\u8282\u4e3a\u5355\u4f4d\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4e0d\u53d7\u9650\u5236\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>- type: tmpfs\n     target: \/app\n     tmpfs:\n       size: 1000<\/code><\/pre>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\u4f7f\u75283\u81f33.5\u7248\u672c\u7684Compose\u914d\u7f6e\u6587\u4ef6\uff0ctmpfs\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>37. ulimits<\/strong><\/p>\n<p>\u8986\u76d6\u5bb9\u5668\u7684\u9ed8\u8ba4ulimit\u503c\u3002\u53ef\u4ee5\u5355\u4e00\u5730\u5c06\u9650\u5236\u503c\u8bbe\u4e3a\u4e00\u4e2a\u6574\u6570\uff0c\u4e5f\u53ef\u4ee5\u5c06soft\/hard\u9650\u5236\u6307\u5b9a\u4e3a\u6620\u5c04\u3002\u4f8b\u5982\uff0c\u6307\u5b9a\u6700\u5927\u8fdb\u7a0b\u6570\u4e3a65535\uff0c\u6307\u5b9a\u6587\u4ef6\u53e5\u67c4\u6570\uff0c\u5176\u4e2d\u8f6f\u9650\u5236\u4e3a20000\uff0c\u7cfb\u7edf\u786c\u9650\u5236\u4e3a40000\uff0c\u8f6f\u9650\u5236\u5e94\u7528\u53ef\u4ee5\u968f\u65f6\u4fee\u6539\uff0c\u4e0d\u80fd\u8d85\u8fc7\u786c\u9650\u5236\uff0c\u786c\u9650\u5236\u53ea\u80fdroot\u7528\u6237\u63d0\u9ad8\uff1a<\/p>\n<pre><code>ulimits:\n  nproc: 65535\n  nofile:\n    soft: 20000\n    hard: 40000<\/code><\/pre>\n<p><strong>38. userns_mode<\/strong><\/p>\n<p>\u6307\u5b9a\u7528\u6237\u547d\u540d\u7a7a\u95f4\u6a21\u5f0f\u3002\u5982\u679cDocker\u5b88\u62a4\u8fdb\u7a0b\u914d\u7f6e\u4e86\u7528\u6237\u540d\u79f0\u7a7a\u95f4\uff0c\u5219\u7981\u7528\u6b64\u670d\u52a1\u7684\u7528\u6237\u540d\u79f0\u7a7a\u95f4\u3002\u4ee5\u4e0b\u662f\u4f7f\u7528\u4e3b\u673a\u4e0a\u7684\u7528\u6237\u547d\u540d\u7a7a\u95f4\u7684\u914d\u7f6e\u793a\u4f8b\uff1a<\/p>\n<pre><code>userns_mode: &quot;host&quot;<\/code><\/pre>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5728swarm mode\u4e0b\u90e8\u7f72\u5806\u6808\u65f6\uff0cuserns_mode\u914d\u7f6e\u9879\u5c06\u88ab\u5ffd\u7565\u3002<\/p>\n<p><strong>39. volumes<\/strong><\/p>\n<p>\u6307\u5b9a\u6240\u6302\u8f7d\u7684\u4e3b\u673a\u8def\u5f84\u6216\u6570\u636e\u5377\u540d\u79f0\u3002\u652f\u6301short\u548clong\u4e24\u79cd\u683c\u5f0f\u7684\u8bed\u6cd5\u3002\u53ef\u4ee5\u5c06\u4e3b\u673a\u8def\u5f84\u4f5c\u4e3a\u5355\u4e2a\u670d\u52a1\u7684\u4e00\u90e8\u5206\u8fdb\u884c\u6302\u8f7d\uff0c\u800c\u65e0\u9700\u5728\u9876\u5c42volumes\u914d\u7f6e\u9879\u4e2d\u5b9a\u4e49\u3002\u4f46\u662f\u5982\u679c\u60f3\u8981\u5728\u591a\u4e2a\u670d\u52a1\u4e4b\u95f4\u91cd\u7528\u6570\u636e\u5377\uff0c\u9700\u8981\u5728\u9876\u5c42volumes\u914d\u7f6e\u9879\u4e2d\u5b9a\u4e49\u4e00\u4e2a\u6570\u636e\u5377\u540d\u79f0\u3002<\/p>\n<p>\u57283\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u7684\u53d8\u5316\uff1a\u5728\u9876\u5c42volumes\u914d\u7f6e\u9879\u4e2d\u5b9a\u4e49\u4e86\u6570\u636e\u5377\u540d\u79f0\u5e76\u4ece\u6bcf\u4e2a\u670d\u52a1\u7684volumes\u5217\u8868\u4e2d\u5f15\u7528\u4e86\u8be5\u6570\u636e\u5377\u3002\u8fd9\u5c06\u66ff\u4ee3\u65e9\u671f\u7248\u672c\u7684Compose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u7684volumes_from\u914d\u7f6e\u9879\u3002<\/p>\n<p>short\u8bed\u6cd5\u4f7f\u7528\u901a\u7528\u7684[SOURCE:]TARGET[:MODE]\u683c\u5f0f\uff0cSOURCE\u53ef\u4ee5\u662f\u4e3b\u673a\u8def\u5f84\u6216\u6570\u636e\u5377\u540d\u79f0\uff0cTARGET\u4e3a\u6302\u8f7d\u6570\u636e\u5377\u7684\u5bb9\u5668\u8def\u5f84\uff0cMODE\u53ef\u4ee5\u4e3aro\u53ea\u8bfb\u6a21\u5f0f\u6216rw\u8bfb\u5199\u6a21\u5f0f\uff08\u9ed8\u8ba4\uff09\u3002\u53ef\u4ee5\u5728\u4e3b\u673a\u4e0a\u6302\u8f7d\u76f8\u5bf9\u8def\u5f84\uff0c\u8be5\u8def\u5f84\u76f8\u5bf9\u4e8e\u6b63\u5728\u4f7f\u7528\u7684Compose\u914d\u7f6e\u6587\u4ef6\u7684\u76ee\u5f55\u8fdb\u884c\u6269\u5c55\uff0c\u76f8\u5bf9\u8def\u5f84\u5e94\u59cb\u7ec8\u4ee5.\u6216..\u5f00\u5934\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>volumes:\n  #\u53ea\u6307\u5b9a\u4e00\u4e2a\u8def\u5f84\uff0cDocker\u4f1a\u81ea\u52a8\u5728\u521b\u5efa\u4e00\u4e2a\u6570\u636e\u5377\uff08\u8fd9\u4e2a\u8def\u5f84\u662f\u5bb9\u5668\u5185\u90e8\u7684\uff09\n  - \/var\/lib\/mysql\n  #\u4f7f\u7528\u7edd\u5bf9\u8def\u5f84\u6302\u8f7d\u6570\u636e\u5377\n  - \/opt\/data:\/var\/lib\/mysql\n  #\u4f7f\u7528\u57fa\u4e8eCompose\u914d\u7f6e\u6587\u4ef6\u7684\u76f8\u5bf9\u8def\u5f84\u4f5c\u4e3a\u6570\u636e\u5377\u6302\u8f7d\u5230\u5bb9\u5668\n  - .\/cache:\/tmp\/cache\n  #\u4f7f\u7528\u57fa\u4e8eroot\u7528\u6237\u7684\u76f8\u5bf9\u8def\u5f84\u4f5c\u4e3a\u6570\u636e\u5377\u6302\u8f7d\u5230\u5bb9\u5668\n  - ~\/configs:\/etc\/configs\/:ro\n  #\u4f7f\u7528\u5df2\u7ecf\u5b58\u5728\u547d\u540d\u7684\u6570\u636e\u5377\u6302\u8f7d\u5230\u5bb9\u5668\n  - datavolume:\/var\/lib\/mysql<\/code><\/pre>\n<p>long\u8bed\u6cd5\u652f\u6301\u914d\u7f6e\u4ee5\u4e0bshort\u8bed\u6cd5\u4e2d\u4e0d\u652f\u6301\u7684\u9644\u52a0\u5b57\u6bb5\uff1a<\/p>\n<p>type\uff1a\u6302\u8f7d\u7c7b\u578b\uff0c\u53ef\u4ee5\u4e3avolume\u3001bind\u3001tmpfs\u6216npipe\u3002<\/p>\n<p>source\uff1a\u6302\u8f7d\u6e90\uff0c\u5728\u4e3b\u673a\u4e0a\u7528\u4e8e\u7ed1\u5b9a\u6302\u8f7d\u7684\u8def\u5f84\u6216\u5b9a\u4e49\u5728\u9876\u5c42volumes\u914d\u7f6e\u9879\u4e2d\u7684\u6570\u636e\u5377\u540d\u79f0\u3002\u4e0d\u9002\u7528\u4e8etmpfs\u6302\u8f7d\u7c7b\u578b\u3002<\/p>\n<p>target\uff1a\u6570\u636e\u5377\u6302\u8f7d\u5728\u5bb9\u5668\u4e2d\u7684\u8def\u5f84\u3002<\/p>\n<p>read_only\uff1a\u8bbe\u7f6e\u6570\u636e\u5377\u4e3a\u53ea\u8bfb\u3002<\/p>\n<p>bind\uff1a\u914d\u7f6e\u989d\u5916\u7684bind\u9009\u9879\u3002<\/p>\n<p>propagation\uff1a\u7528\u4e8e\u7ed1\u5b9a\u7684\u4f20\u64ad\u6a21\u5f0f\u3002<\/p>\n<p>volume\uff1a\u914d\u7f6e\u989d\u5916\u7684volume\u9009\u9879\u3002<\/p>\n<p>nocopy\uff1a\u521b\u5efa\u6570\u636e\u5377\u65f6\u7981\u6b62\u4ece\u5bb9\u5668\u590d\u5236\u6570\u636e\u3002<\/p>\n<p>tmpfs\uff1a\u914d\u7f6e\u989d\u5916\u7684tmpfs\u9009\u9879\u3002<\/p>\n<p>size\uff1atmpfs\u6302\u8f7d\u7684\u5927\u5c0f\uff0c\u4ee5\u5b57\u8282\u4e3a\u5355\u4f4d\u3002<\/p>\n<p>consistency\uff1a\u6302\u8f7d\u7684\u4e00\u81f4\u6027\u8981\u6c42\uff0c\u53ef\u4ee5\u4e3aconsistent\u3001cached\u6216delegated\u3002\u5176\u4e2dconsistent\u8868\u793a\u4e3b\u673a\u548c\u5bb9\u5668\u5177\u6709\u76f8\u540c\u89c6\u56fe\u3002cached\u8868\u793a\u8bfb\u53d6\u7f13\u5b58\uff0c\u4e3b\u673a\u89c6\u56fe\u662f\u6743\u5a01\u7684\u3002delegated\u8868\u793a\u8bfb\u5199\u7f13\u5b58\uff0c\u5bb9\u5668\u89c6\u56fe\u662f\u6743\u5a01\u7684\u3002<\/p>\n<p>\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  web:\n    image: nginx:alpine\n    ports:\n      - &quot;80:80&quot;\n    volumes:\n      - type: volume\n        source: mydata\n        target: \/data\n        volume:\n          nocopy: true\n      - type: bind\n        source: .\/static\n        target: \/opt\/app\/static\n\nnetworks:\n  webnet:\n\nvolumes:\n  mydata:<\/code><\/pre>\n<p><strong>40. \u5176\u4ed6\u914d\u7f6e\u9879<\/strong><\/p>\n<p>\u6b64\u5916\uff0c\u8fd8\u6709domainname\u3001hostname\u3001ipc\u3001mac_address\u3001privileged\u3001read_only\u3001shm_size\u3001stdin_open\u3001tty\u3001user\u548cworking_dir\u8fd9\u4e9b\u914d\u7f6e\u9879\u3002\u5b83\u4eec\u90fd\u662f\u5355\u503c\u914d\u7f6e\uff0c\u548cdocker run\u4e2d\u7684\u5bf9\u5e94\u9009\u9879\u7c7b\u4f3c\u3002\u6ce8\u610fmac_address\u662f\u65e7\u7248\u672c\u914d\u7f6e\u9879\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>#\u6307\u5b9a\u5bb9\u5668\u4e2d\u8fd0\u884c\u5e94\u7528\u7684\u7528\u6237\u540d\nuser: postgresql\n#\u6307\u5b9a\u5bb9\u5668\u7684\u5de5\u4f5c\u76ee\u5f55\nworking_dir: \/code\n#\u6307\u5b9a\u5bb9\u5668\u4e2d\u7684\u641c\u7d22\u57df\u540d\ndomainname: foo.com\n#\u6307\u5b9a\u5bb9\u5668\u4e2d\u7684\u4e3b\u673a\u540d\nhostname: foo\nipc: host\n#\u6307\u5b9a\u5bb9\u5668\u4e2d\u7684mac\u5730\u5740\nmac_address: 02:42:ac:11:65:43\n#\u6307\u5b9a\u5bb9\u5668\u4e3a\u7279\u6743\u5bb9\u5668\nprivileged: true\n#\u6307\u5b9a\u4ee5\u53ea\u8bfb\u6a21\u5f0f\u6302\u8f7d\u5bb9\u5668\u7684root\u6587\u4ef6\u7cfb\u7edf\uff0c\u4e0d\u80fd\u5bf9\u5bb9\u5668\u5185\u5bb9\u8fdb\u884c\u4fee\u6539\nread_only: true\n#\u8bbe\u7f6e\/dev\/shm\u5206\u533a\u7684\u5927\u5c0f\nshm_size: 64M\n#\u6253\u5f00\u6807\u51c6\u8f93\u5165\uff0c\u53ef\u4ee5\u63a5\u53d7\u5916\u90e8\u8f93\u5165\nstdin_open: true\n#\u5206\u914dtty\u8bbe\u5907\u7528\u6765\u652f\u6301\u7ec8\u7aef\u767b\u5f55\ntty: true<\/code><\/pre>\n<p><strong>\u56db\u3001\u6570\u636e\u5377\u914d\u7f6e<\/strong><\/p>\n<p>\u867d\u7136\u53ef\u4ee5\u58f0\u660e\u5373\u65f6\u751f\u6548\u7684\u6570\u636e\u5377\u4f5c\u4e3a\u670d\u52a1\u58f0\u660e\u7684\u4e00\u90e8\u5206\uff0c\u4f46\u8fd9\u90e8\u5206\u53ef\u4ee5\u901a\u8fc7\u9876\u5c42volumes\u914d\u7f6e\u9879\u5b9a\u4e49\u4e00\u4e2a\u6570\u636e\u5377\u4ee5\u5b9e\u73b0\u5728\u591a\u4e2a\u670d\u52a1\u4e4b\u95f4\u91cd\u7528\uff0c\u5e76\u4e14\u53ef\u4ee5\u4f7f\u7528docker\u547d\u4ee4\u884c\u6216API\u8f7b\u677e\u8fdb\u884c\u68c0\u7d22\u548c\u68c0\u67e5\u3002\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u6570\u636e\u5e93\u7684\u6570\u636e\u76ee\u5f55\u4f5c\u4e3a\u6570\u636e\u5377\u4e0e\u53e6\u4e00\u4e2a\u670d\u52a1\u5171\u4eab\u4ee5\u4fbf\u5b9a\u671f\u5907\u4efd\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  db:\n    image: db\n    volumes:\n      - data-volume:\/var\/lib\/db\n  backup:\n    image: backup-service\n    volumes:\n      - data-volume:\/var\/lib\/backup\/data\n\nvolumes:\n  data-volume:<\/code><\/pre>\n<p>\u9876\u5c42volumes\u914d\u7f6e\u9879\u4e0b\u7684\u6761\u76ee\u53ef\u4ee5\u4e3a\u7a7a\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\u914d\u7f6e\u7684\u9ed8\u8ba4\u9a71\u52a8\uff0c\u9ed8\u8ba4\u9a71\u52a8\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u4e3alocal\u9a71\u52a8\u3002\u4e0b\u9762\u5c31\u5bf9\u6570\u636e\u5377\u7684\u76f8\u5173\u914d\u7f6e\u9879\u8fdb\u884c\u4e00\u4e2a\u603b\u7ed3\u3002<\/p>\n<p><strong>1. driver<\/strong><\/p>\n<p>\u6307\u5b9a\u8be5\u6570\u636e\u5377\u6240\u8981\u4f7f\u7528\u7684\u6570\u636e\u5377\u9a71\u52a8\u3002\u9ed8\u8ba4\u4e3aDocker Engine\u4e2d\u914d\u7f6e\u4f7f\u7528\u7684\u65e0\u8bba\u54ea\u79cd\u9a71\u52a8\uff0c\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u4e3alocal\u9a71\u52a8\u3002\u5982\u679c\u9a71\u52a8\u4e0d\u53ef\u7528\uff0c\u5219\u5f15\u64ce\u4f1a\u5728docker-compose up\u5c1d\u8bd5\u521b\u5efa\u6570\u636e\u5377\u65f6\u8fd4\u56de\u4e00\u4e2a\u9519\u8bef\u3002\u4ee5\u4e0b\u4e3a\u6307\u5b9a\u6570\u636e\u5377\u9a71\u52a8\u7684\u793a\u4f8b\uff1a<\/p>\n<pre><code>driver: foobar<\/code><\/pre>\n<p><strong>2. driver_opts<\/strong><\/p>\n<p>\u4ee5\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u6307\u5b9a\u7528\u6765\u4f20\u9012\u7ed9\u8be5\u6570\u636e\u5377\u6240\u4f7f\u7528\u7684\u6570\u636e\u5377\u9a71\u52a8\u7684\u5217\u8868\u9009\u9879\u3002\u8fd9\u4e9b\u9009\u9879\u53d6\u51b3\u4e8e\u6570\u636e\u5377\u9a71\u52a8\uff0c\u53ef\u4ee5\u53c2\u8003\u6570\u636e\u5377\u9a71\u52a8\u7a0b\u5e8f\u6587\u6863\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>volumes:\n  example:\n    driver_opts:\n      type: &quot;nfs&quot;\n      o: &quot;addr=10.40.0.199,nolock,soft,rw&quot;\n      device: &quot;:\/docker\/example&quot;<\/code><\/pre>\n<p><strong>3. external<\/strong><\/p>\n<p>\u6307\u5b9a\u8be5\u6570\u636e\u5377\u662f\u5426\u662f\u5916\u90e8\u6570\u636e\u5377\u3002\u5982\u679c\u8bbe\u7f6e\u4e3atrue\uff0c\u5219\u6307\u5b9a\u8be5\u6570\u636e\u5377\u662f\u5728Compose\u5916\u90e8\u521b\u5efa\u7684\u3002\u7531\u4e8edocker-compose up\u4e0d\u4f1a\u5c1d\u8bd5\u521b\u5efa\u8be5\u6570\u636e\u5377\uff0c\u5982\u679c\u8be5\u6570\u636e\u5377\u4e0d\u5b58\u5728\u5219\u4f1a\u5f15\u53d1\u9519\u8bef\u3002\u57283.3\u53ca\u4ee5\u4e0b\u7248\u672c\u7684Compose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\uff0cexternal\u914d\u7f6e\u9879\u4e0d\u80fd\u4e0e\u5305\u62ecdriver\u3001driver_opts\u548clabels\u5728\u5185\u7684\u5176\u4ed6\u6570\u636e\u5377\u914d\u7f6e\u9879\u540c\u65f6\u4f7f\u7528\uff0c\u57283.4\u53ca\u4ee5\u4e0a\u7248\u672c\u4e2d\u5219\u6ca1\u6709\u6b64\u9650\u5236\u3002\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0cCompose\u4e0d\u4f1a\u5c1d\u8bd5\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a[projectname]_data\u7684\u6570\u636e\u5377\uff0c\u800c\u662f\u67e5\u627e\u4e00\u4e2a\u73b0\u5b58\u7684\u88ab\u7b80\u5355\u79f0\u4e3adata\u7684\u6570\u636e\u5377\u5e76\u5c06\u5176\u6302\u8f7d\u5230db\u670d\u52a1\u7684\u5bb9\u5668\u4e2d\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  db:\n    image: postgres\n    volumes:\n      - data:\/var\/lib\/postgresql\/data\n\nvolumes:\n  data:\n    external: true<\/code><\/pre>\n<p>\u901a\u8fc7external\u914d\u7f6e\u9879\u4e0b\u7684name\u914d\u7f6e\u9879\u53ef\u4ee5\u6307\u5b9a\u6570\u636e\u5377\u7684\u540d\u79f0\uff0c\u8be5\u540d\u79f0\u4e0eCompose\u914d\u7f6e\u6587\u4ef6\u4e2d\u7528\u4e8e\u5f15\u7528\u6570\u636e\u5377\u7684\u540d\u79f0\u533a\u5206\u5f00\u6765\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>volumes:\n  data:\n    external:\n      name: actual-name-of-volume<\/code><\/pre>\n<p>\u4e0d\u8fc7external\u914d\u7f6e\u9879\u4e0b\u7684name\u914d\u7f6e\u9879\u57283.4\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u5c31\u5df2\u7ecf\u88ab\u5f03\u7528\u4e86\uff0c\u53ef\u4ee5\u7528name\u914d\u7f6e\u9879\u66ff\u4ee3\u3002<\/p>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a\u5982\u679c\u4f7f\u7528docker stack deploy\u4ee3\u66ffdocker-compose up\u4ee5swarm mode\u542f\u52a8\u5e94\u7528\uff0c\u5219\u4f1a\u521b\u5efa\u4e0d\u5b58\u5728\u7684\u5916\u90e8\u6570\u636e\u5377\u3002\u5728swarm mode\u4e0b\uff0c\u670d\u52a1\u5b9a\u4e49\u6570\u636e\u5377\u540e\u5c06\u81ea\u52a8\u521b\u5efa\u8be5\u5377\u3002\u7531\u4e8e\u670d\u52a1\u4efb\u52a1\u5df2\u5728\u65b0\u8282\u70b9\u4e0a\u5b89\u6392\uff0c\u56e0\u6b64SwarmKit\u5c06\u5728\u672c\u5730\u8282\u70b9\u4e0a\u521b\u5efa\u6570\u636e\u5377\u3002<\/p>\n<p><strong>4. labels<\/strong><\/p>\n<p>\u5c06\u5143\u6570\u636e\u4ee5\u6807\u7b7e\u7684\u5f62\u5f0f\u6dfb\u52a0\u5230\u5bb9\u5668\u4e2d\u3002\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u5b57\u5178\u4e24\u79cd\u683c\u5f0f\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>labels:\n  com.example.description: &quot;Database volume&quot;\n  com.example.department: &quot;IT\/Ops&quot;\n  com.example.label-with-empty-value: &quot;&quot;<\/code><\/pre>\n<pre><code>labels:\n  - &quot;com.example.description=Database volume&quot;\n  - &quot;com.example.department=IT\/Ops&quot;\n  - &quot;com.example.label-with-empty-value&quot;<\/code><\/pre>\n<p><strong>5. name<\/strong><\/p>\n<p>\u57283.4\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u4e3a\u8be5\u6570\u636e\u5377\u8bbe\u7f6e\u4e00\u4e2a\u81ea\u5b9a\u4e49\u540d\u79f0\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nvolumes:\n  data:\n    name: my-app-data<\/code><\/pre>\n<p>\u53ef\u4ee5\u548cexternal\u914d\u7f6e\u9879\u4e00\u8d77\u4f7f\u7528\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nvolumes:\n  data:\n    external: true\n    name: my-app-data<\/code><\/pre>\n<p><strong>\u4e94\u3001\u7f51\u7edc\u914d\u7f6e<\/strong><\/p>\n<p>\u901a\u8fc7\u9876\u5c42networks\u914d\u7f6e\u9879\u53ef\u4ee5\u6307\u5b9a\u8981\u521b\u5efa\u7684\u7f51\u7edc\u3002\u4e0b\u9762\u5c31\u5bf9\u7f51\u7edc\u7684\u76f8\u5173\u914d\u7f6e\u9879\u8fdb\u884c\u4e00\u4e2a\u603b\u7ed3\u3002<\/p>\n<p><strong>1. driver<\/strong><\/p>\n<p>\u6307\u5b9a\u8be5\u7f51\u7edc\u6240\u8981\u4f7f\u7528\u7684\u9a71\u52a8\u3002\u9ed8\u8ba4\u9a71\u52a8\u53d6\u51b3\u4e8e\u6240\u4f7f\u7528\u7684Docker Engine\u7684\u914d\u7f6e\u65b9\u5f0f\uff0c\u4f46\u662f\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u5355\u4e2a\u4e3b\u673a\u4e0a\u7528\u7684bridge\uff0cSwarm\u4e0a\u7528\u7684overlay\u3002<\/p>\n<p>bridge\uff1a\u8868\u793a\u6865\u63a5\uff0cDocker\u5728\u5355\u4e2a\u4e3b\u673a\u4e0a\u9ed8\u8ba4\u4f7f\u7528bridge\u7f51\u7edc\u3002<\/p>\n<p>overlay\uff1aoverlay\u9a71\u52a8\u5728\u4e00\u4e2aswarm\u4e2d\u7684\u591a\u4e2a\u8282\u70b9\u4e4b\u95f4\u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7f51\u7edc\u3002<\/p>\n<p>\u5982\u679c\u9a71\u52a8\u4e0d\u53ef\u7528\uff0c\u5219Docker Engine\u4f1a\u8fd4\u56de\u4e00\u4e2a\u9519\u8bef\u3002\u4ee5\u4e0b\u4e3a\u6307\u5b9a\u5377\u9a71\u52a8\u7684\u793a\u4f8b\uff1a<\/p>\n<pre><code>driver: overlay<\/code><\/pre>\n<p>\u5982\u679c\u60f3\u8981\u4f7f\u7528\u4e3b\u673a\u7684\u7f51\u7edc\u5806\u6808\uff0c\u6216\u8005\u4e0d\u4f7f\u7528\u7f51\u7edc\u3002\u8fd9\u76f8\u5f53\u4e8edocker run --net = host\u6216docker run --net = none\u3002\u4ec5\u5728\u4f7f\u7528docker stack\u547d\u4ee4\u65f6\u4f7f\u7528\u3002\u5982\u679c\u4f7f\u7528docker-compose\u547d\u4ee4\uff0c\u9700\u4f7f\u7528\u670d\u52a1\u914d\u7f6e\u4e2d\u7684network_mode\u914d\u7f6e\u9879\u3002\u5982\u679c\u8981\u5728\u76f8\u540c\u6784\u5efa\u7248\u672c\u7684\u5bb9\u5668\u4e0a\u4f7f\u7528\u7279\u5b9a\u7f51\u7edc\uff0c\u9700\u8981\u5728\u670d\u52a1\u914d\u7f6e\u7684build\u4e0b\u7684network\u914d\u7f6e\u9879\u4e2d\u8bbe\u7f6e\u3002\u4f8b\u5982\uff1a  <\/p>\n<pre><code>services:\n  web:\n    build:\n      network: host\n      context: .<\/code><\/pre>\n<p>\u4f7f\u7528\u8bf8\u5982host\u548cnone\u7684\u5185\u7f6e\u7f51\u7edc\u7684\u8bed\u6cd5\u6709\u6240\u4e0d\u540c\u3002\u5b9a\u4e49\u4e00\u4e2a\u540d\u4e3ahost\u6216none\u7684\u5916\u90e8\u7f51\u7edc\u4ee5\u53caCompose\u53ef\u4ee5\u4f7f\u7528\u7684\u522b\u540d\uff0c\u7136\u540e\u4f7f\u7528\u8be5\u522b\u540d\u5411\u8be5\u7f51\u7edc\u6388\u4e88\u670d\u52a1\u8bbf\u95ee\u6743\u9650\uff0c\u800c\u4e14\u8be5\u5916\u90e8\u7f51\u7edc\u5728Docker\u4e2d\u5df2\u7ecf\u81ea\u52a8\u521b\u5efa\u3002\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u5b9a\u4e49\u4e86\u540d\u4e3ahost\u7684\u5916\u90e8\u7f51\u7edc\uff0cCompose\u4e2d\u53ef\u4ee5\u4f7f\u7528\u7684\u522b\u540d\u4e3ahostnet\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  web:\n    networks:\n      hostnet: {}\n\nnetworks:\n  hostnet:\n    external: true\n    name: host<\/code><\/pre>\n<p>\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u5b9a\u4e49\u4e86\u540d\u4e3anone\u7684\u5916\u90e8\u7f51\u7edc\uff0cCompose\u4e2d\u53ef\u4ee5\u4f7f\u7528\u7684\u522b\u540d\u4e3anonet\uff1a<\/p>\n<pre><code>services:\n  web:\n    networks:\n      nonet: {}\n\nnetworks:\n  nonet:\n    external: true\n    name: none<\/code><\/pre>\n<p><strong>2. driver_opts<\/strong><\/p>\n<p>\u4ee5\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u6307\u5b9a\u7528\u6765\u4f20\u9012\u7ed9\u8be5\u7f51\u7edc\u6240\u4f7f\u7528\u7684\u9a71\u52a8\u7684\u5217\u8868\u9009\u9879\u3002\u8fd9\u4e9b\u9009\u9879\u53d6\u51b3\u4e8e\u9a71\u52a8\uff0c\u53ef\u4ee5\u53c2\u8003\u9a71\u52a8\u7a0b\u5e8f\u6587\u6863\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>driver_opts:\n  foo: &quot;bar&quot;\n  baz: 1<\/code><\/pre>\n<p><strong>3. attachable<\/strong><\/p>\n<p>\u57283.2\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u6307\u5b9a\u662f\u5426\u5141\u8bb8\u9664\u670d\u52a1\u4e4b\u5916\u7684\u72ec\u7acb\u5bb9\u5668\u8fde\u63a5\u5230\u8be5\u7f51\u7edc\u3002\u4ec5\u5728driver\u8bbe\u7f6e\u4e3aoverlay\u65f6\u4f7f\u7528\u3002\u5982\u679c\u8bbe\u7f6e\u4e3atrue\uff0c\u5219\u9664\u4e86\u670d\u52a1\u4e4b\u5916\u7684\u72ec\u7acb\u5bb9\u5668\u4e5f\u53ef\u4ee5\u8fde\u63a5\u5230\u8be5\u7f51\u7edc\u3002\u5982\u679c\u72ec\u7acb\u5bb9\u5668\u8fde\u63a5\u5230\u4e86overlay\u7f51\u7edc\uff0c\u90a3\u5b83\u53ef\u4ee5\u4e0e\u90a3\u4e9b\u4e5f\u4ece\u5176\u4ed6Docker\u5b88\u62a4\u8fdb\u7a0b\u8fde\u63a5\u5230overlay\u7f51\u7edc\u7684\u670d\u52a1\u548c\u72ec\u7acb\u5bb9\u5668\u8fdb\u884c\u901a\u4fe1\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>networks:\n  mynet1:\n    driver: overlay\n    attachable: true<\/code><\/pre>\n<p><strong>4. enable_ipv6<\/strong><\/p>\n<p>\u5728\u8be5\u7f51\u7edc\u4e0a\u542f\u7528IPv6\u7f51\u7edc\u3002<\/p>\n<p>\u4e0d\u652f\u6301V3\u7248Compose\u914d\u7f6e\u6587\u4ef6\uff1a\u5982\u679c\u8981\u4f7f\u7528enable_ipv6\u914d\u7f6e\u9879\uff0c\u5219\u9700\u8981\u4f7f\u7528V2\u7248Compose\u914d\u7f6e\u6587\u4ef6\uff0c\u56e0\u4e3aswarm mode\u5c1a\u4e0d\u652f\u6301\u8be5\u914d\u7f6e\u9879\u3002<\/p>\n<p><strong>5. ipam<\/strong><\/p>\n<p>\u6307\u5b9a\u81ea\u5b9a\u4e49IPAM\u914d\u7f6e\u3002\u6709\u4ee5\u4e0b\u914d\u7f6e\u9009\u9879\uff1a<\/p>\n<p>driver\uff1a\u81ea\u5b9a\u4e49IPAM\u9a71\u52a8\u4ee5\u4ee3\u66ff\u9ed8\u8ba4\u9a71\u52a8\u3002<\/p>\n<p>config\uff1a\u5305\u542b\u96f6\u4e2a\u6216\u591a\u4e2a\u914d\u7f6e\u5757\u7684\u5217\u8868\uff0c\u6bcf\u4e2a\u914d\u7f6e\u5757\u53ef\u4ee5\u6709\u4ee5\u4e0b\u914d\u7f6e\u9009\u9879\u3002<\/p>\n<p>subnet\uff1a\u8bbe\u7f6e\u8868\u793a\u7f51\u6bb5\u7684CIDR\u683c\u5f0f\u7684\u5b50\u7f51\u3002<\/p>\n<p>\u4ee5\u4e0b\u4e3a\u6307\u5b9a\u81ea\u5b9a\u4e49IPAM\u914d\u7f6e\u7684\u793a\u4f8b\uff1a<\/p>\n<pre><code>ipam:\n  driver: default\n  config:\n    - subnet: 172.28.0.0\/16<\/code><\/pre>\n<p>\u6ce8\u610f\uff1a\u76ee\u524d\uff0c\u4f8b\u5982gateway\u7b49\u5176\u4ed6IPAM\u914d\u7f6e\u4ec5\u9002\u7528\u4e8eV2\u7248Compose\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<p><strong>6. internal<\/strong><\/p>\n<p>\u6307\u5b9a\u662f\u5426\u521b\u5efa\u4e00\u4e2a\u4e0e\u5916\u90e8\u9694\u79bb\u7684overlay\u7f51\u7edc\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cDocker\u4e5f\u4f1a\u5c06\u6865\u63a5\u7f51\u7edc\u8fde\u63a5\u5230\u5b83\u4ee5\u63d0\u4f9b\u5916\u90e8\u8fde\u63a5\u3002\u5982\u679c\u8981\u521b\u5efa\u4e00\u4e2a\u4e0e\u5916\u90e8\u9694\u79bb\u7684overlay\u7f51\u7edc\uff0c\u9700\u5c06\u6b64\u914d\u7f6e\u9879\u8bbe\u7f6e\u4e3atrue\u3002<\/p>\n<p><strong>7. labels<\/strong><\/p>\n<p>\u5c06\u5143\u6570\u636e\u4ee5\u6807\u7b7e\u7684\u5f62\u5f0f\u6dfb\u52a0\u5230\u5bb9\u5668\u4e2d\u3002\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u5b57\u5178\u4e24\u79cd\u683c\u5f0f\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>labels:\n  com.example.description: &quot;Financial transaction network&quot;\n  com.example.department: &quot;Finance&quot;\n  com.example.label-with-empty-value: &quot;&quot;<\/code><\/pre>\n<pre><code>labels:\n  - &quot;com.example.description=Financial transaction network&quot;\n  - &quot;com.example.department=Finance&quot;\n  - &quot;com.example.label-with-empty-value&quot;<\/code><\/pre>\n<p><strong>8. external<\/strong><\/p>\n<p>\u6307\u5b9a\u8be5\u7f51\u7edc\u662f\u5426\u662f\u5916\u90e8\u7f51\u7edc\u3002\u5982\u679c\u8bbe\u7f6e\u4e3atrue\uff0c\u5219\u6307\u5b9a\u8be5\u7f51\u7edc\u662f\u5728Compose\u5916\u90e8\u521b\u5efa\u7684\u3002\u7531\u4e8edocker-compose up\u4e0d\u4f1a\u5c1d\u8bd5\u521b\u5efa\u8be5\u7f51\u7edc\uff0c\u5982\u679c\u8be5\u7f51\u7edc\u4e0d\u5b58\u5728\u5219\u4f1a\u5f15\u53d1\u9519\u8bef\u3002\u57283.3\u53ca\u4ee5\u4e0b\u7248\u672c\u7684Compose\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\uff0cexternal\u914d\u7f6e\u9879\u4e0d\u80fd\u4e0e\u5305\u62ecdriver\u3001driver_opts\u3001ipam\u548cinternal\u7b49\u5728\u5185\u7684\u5176\u4ed6\u7f51\u7edc\u914d\u7f6e\u9879\u540c\u65f6\u4f7f\u7528\uff0c\u57283.4\u53ca\u4ee5\u4e0a\u7248\u672c\u4e2d\u5219\u6ca1\u6709\u6b64\u9650\u5236\u3002\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0cproxy\u662f\u901a\u5f80\u5916\u754c\u7684\u7f51\u5173\uff0cCompose\u4e0d\u4f1a\u5c1d\u8bd5\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a[projectname] _outside\u7684\u7f51\u7edc\uff0c\u800c\u662f\u67e5\u627e\u4e00\u4e2a\u73b0\u5b58\u7684\u88ab\u7b80\u5355\u79f0\u4e3a\u7684outside\u7f51\u7edc\u5e76\u5c06proxy\u670d\u52a1\u7684\u5bb9\u5668\u8fde\u63a5\u5230\u8be5\u7f51\u7edc\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nservices:\n  proxy:\n    build: .\/proxy\n    networks:\n      - outside\n      - default\n  app:\n    build: .\/app\n    networks:\n      - default\n\nnetworks:\n  outside:\n    external: true<\/code><\/pre>\n<p>\u901a\u8fc7external\u914d\u7f6e\u9879\u4e0b\u7684name\u914d\u7f6e\u9879\u53ef\u4ee5\u6307\u5b9a\u7f51\u7edc\u7684\u540d\u79f0\uff0c\u8be5\u540d\u79f0\u4e0eCompose\u914d\u7f6e\u6587\u4ef6\u4e2d\u7528\u4e8e\u5f15\u7528\u7f51\u7edc\u7684\u540d\u79f0\u533a\u5206\u5f00\u6765\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>networks:\n  outside:\n    external:\n      name: actual-name-of-network<\/code><\/pre>\n<p>\u4e0d\u8fc7external\u914d\u7f6e\u9879\u4e0b\u7684name\u914d\u7f6e\u9879\u57283.5\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u5c31\u5df2\u7ecf\u88ab\u5f03\u7528\u4e86\uff0c\u53ef\u4ee5\u7528name\u914d\u7f6e\u9879\u66ff\u4ee3\u3002<\/p>\n<p><strong>9. name<\/strong><\/p>\n<p>\u57283.5\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u4e3a\u8be5\u7f51\u7edc\u8bbe\u7f6e\u4e00\u4e2a\u81ea\u5b9a\u4e49\u540d\u79f0\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nnetworks:\n  network1:\n    name: my-app-net<\/code><\/pre>\n<p>\u53ef\u4ee5\u548cexternal\u914d\u7f6e\u9879\u4e00\u8d77\u4f7f\u7528\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &quot;3.8&quot;\nnetworks:\n  network1:\n    external: true\n    name: my-app-net<\/code><\/pre>\n<p><strong>\u516d\u3001configs\u914d\u7f6e<\/strong>  <\/p>\n<p>\u9876\u5c42configs\u914d\u7f6e\u9879\u5b9a\u4e49\u6216\u5f15\u7528\u4e86\u6388\u4e88\u6b64\u5806\u6808\u4e2d\u7684\u670d\u52a1\u7684configs\uff0cconfig\u6765\u6e90\u4e8efile\u6216external\u3002\u4e0b\u9762\u5c31\u5bf9configs\u7684\u76f8\u5173\u914d\u7f6e\u9879\u8fdb\u884c\u4e00\u4e2a\u7b80\u5355\u603b\u7ed3\u3002<\/p>\n<p>file\uff1a\u901a\u8fc7\u6307\u5b9a\u8def\u5f84\u4e2d\u7684\u6587\u4ef6\u5185\u5bb9\u521b\u5efaconfig\u3002<\/p>\n<p>external\uff1a\u5982\u679c\u8bbe\u7f6e\u4e3atrue\uff0c\u5219\u6307\u5b9a\u8be5config\u5df2\u7ecf\u521b\u5efa\u3002Docker\u4e0d\u4f1a\u5c1d\u8bd5\u521b\u5efa\u5b83\uff0c\u5982\u679c\u5b83\u4e0d\u5b58\u5728\uff0c\u4f1a\u53d1\u751fconfig not found\u9519\u8bef\u3002<\/p>\n<p>name\uff1a\u6307\u5b9aDocker\u4e2dconfig\u7684\u540d\u79f0\u3002\u57283.5\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165\u3002<\/p>\n<p>driver\u548cdriver_opts\uff1a\u81ea\u5b9a\u4e49secret\u9a71\u52a8\u7684\u540d\u79f0\uff0c\u548c\u4ee5\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u6307\u5b9a\u7528\u6765\u4f20\u9012\u7ed9\u7279\u5b9a\u9a71\u52a8\u7684\u9009\u9879\u3002\u8fd9\u4e24\u4e2a\u914d\u7f6e\u9879\u5747\u57283.8\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165\uff0c\u4ec5\u5728\u4f7f\u7528docker stack\u65f6\u53d7\u652f\u6301\u3002<\/p>\n<p>template_driver\uff1a\u6307\u5b9a\u8981\u4f7f\u7528\u7684\u6a21\u677f\u9a71\u52a8\u7684\u540d\u79f0\uff0c\u5b83\u63a7\u5236\u662f\u5426\u4ee5\u53ca\u5982\u4f55\u5c06secret\u6709\u6548\u8d1f\u8f7d\u4f5c\u4e3a\u6a21\u677f\u8fdb\u884c\u8bc4\u4f30\u3002\u5982\u679c\u672a\u8bbe\u7f6e\u9a71\u52a8\uff0c\u5219\u4e0d\u4f7f\u7528\u4efb\u4f55\u6a21\u677f\u3002\u5f53\u524d\u4ec5\u652f\u6301\u4f7f\u7528Go\u8bed\u8a00\u7684golang\u9a71\u52a8\u3002\u8be5\u914d\u7f6e\u9879\u57283.8\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165\uff0c\u4ec5\u5728\u4f7f\u7528docker stack\u65f6\u53d7\u652f\u6301\u3002<\/p>\n<p><strong>\u4e03\u3001secrets\u914d\u7f6e<\/strong><\/p>\n<p>\u9876\u5c42secrets\u914d\u7f6e\u9879\u5b9a\u4e49\u6216\u5f15\u7528\u4e86\u6388\u4e88\u6b64\u5806\u6808\u4e2d\u7684\u670d\u52a1\u7684secrets\uff0csecret\u6765\u6e90\u4e8efile\u6216external\u3002\u4e0b\u9762\u5c31\u5bf9secrets\u7684\u76f8\u5173\u914d\u7f6e\u9879\u8fdb\u884c\u4e00\u4e2a\u7b80\u5355\u603b\u7ed3\u3002<\/p>\n<p>file\uff1a\u901a\u8fc7\u6307\u5b9a\u8def\u5f84\u4e2d\u7684\u6587\u4ef6\u5185\u5bb9\u521b\u5efasecret\u3002<\/p>\n<p>external\uff1a\u5982\u679c\u8bbe\u7f6e\u4e3atrue\uff0c\u5219\u6307\u5b9a\u8be5secret\u5df2\u7ecf\u521b\u5efa\u3002Docker\u4e0d\u4f1a\u5c1d\u8bd5\u521b\u5efa\u5b83\uff0c\u5982\u679c\u5b83\u4e0d\u5b58\u5728\uff0c\u4f1a\u53d1\u751fsecretg not found\u9519\u8bef\u3002<\/p>\n<p>name\uff1a\u6307\u5b9aDocker\u4e2dsecret\u7684\u540d\u79f0\u3002\u57283.5\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165\u3002<\/p>\n<p>template_driver\uff1a\u6307\u5b9a\u8981\u4f7f\u7528\u7684\u6a21\u677f\u9a71\u52a8\u7684\u540d\u79f0\uff0c\u5b83\u63a7\u5236\u662f\u5426\u4ee5\u53ca\u5982\u4f55\u5c06secret\u6709\u6548\u8d1f\u8f7d\u4f5c\u4e3a\u6a21\u677f\u8fdb\u884c\u8bc4\u4f30\u3002\u5982\u679c\u672a\u8bbe\u7f6e\u9a71\u52a8\uff0c\u5219\u4e0d\u4f7f\u7528\u4efb\u4f55\u6a21\u677f\u3002\u5f53\u524d\u4ec5\u652f\u6301\u4f7f\u7528Go\u8bed\u8a00\u7684golang\u9a71\u52a8\u3002\u8be5\u914d\u7f6e\u9879\u57283.8\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165\uff0c\u4ec5\u5728\u4f7f\u7528docker stack\u65f6\u53d7\u652f\u6301\u3002<\/p>\n<p><strong>\u516b\u3001\u6269\u5c55\u5b57\u6bb5<\/strong><\/p>\n<p>\u57283.4\u7248\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u4e2d\u52a0\u5165<\/p>\n<p>\u53ef\u4ee5\u4f7f\u7528\u6269\u5c55\u5b57\u6bb5\u6765\u5b9a\u4e49\u53ef\u91cd\u7528\u7684\u914d\u7f6e\u7247\u6bb5\u3002\u8fd9\u4e9b\u7279\u6b8a\u5b57\u6bb5\u53ea\u8981\u4f4d\u4e8eCompose\u914d\u7f6e\u6587\u4ef6\u7684\u6700\u9876\uff08root\uff09\u5c42\uff0c\u53ef\u4ee5\u4e3a\u4efb\u4f55\u683c\u5f0f\uff0c\u5b83\u4eec\u7684\u540d\u79f0\u4ee5x-\u5f00\u5934\u3002<\/p>\n<p>\u6ce8\u610f\uff1a\u4ece3.7\u7248\uff08\u5bf9\u4e8e3.x\u7cfb\u5217\uff09\u548c2.4\u7248\uff08\u5bf9\u4e8e2.x\u7cfb\u5217\uff09\u7684\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u5f00\u59cb\uff0c\u6269\u5c55\u5b57\u6bb5\u53ef\u4ee5\u4f4d\u4e8e\u670d\u52a1\u3001\u6570\u636e\u5377\u3001\u7f51\u7edc\u3001config\u548c secret\u5b9a\u4e49\u90e8\u5206\u7684root\u5c42\u3002<\/p>\n<p>\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u901a\u8fc7\u6269\u5c55\u5b57\u6bb5x-custom\u5b9a\u4e49\u4e00\u4e2a\u53ef\u91cd\u7528\u7684\u914d\u7f6e\u7247\u6bb5\uff1a<\/p>\n<pre><code>version: &#039;3.4&#039;\nx-custom:\n  items:\n    - a\n    - b\n  options:\n    max-size: &#039;12m&#039;\n  name: &quot;custom&quot;<\/code><\/pre>\n<p>\u8fd9\u4e9b\u6269\u5c55\u5b57\u6bb5\u5185\u5bb9\u5c06\u88abCompose\u5ffd\u7565\uff0c\u4f46\u662f\u53ef\u4ee5\u901a\u8fc7YAML\u951a\u70b9\u6765\u5f15\u7528\u6269\u5c55\u5b57\u6bb5\u5185\u5bb9\u3002\u4f8b\u5982\u4ee5\u4e0b\u65e5\u5fd7\u8bb0\u5f55\u914d\u7f6e\uff0c\u5e0c\u671b\u88ab\u591a\u4e2a\u670d\u52a1\u5f15\u7528\uff1a<\/p>\n<pre><code>logging:\n  options:\n    max-size: &#039;12m&#039;\n    max-file: &#039;5&#039;\n  driver: json-file<\/code><\/pre>\n<p>\u53ef\u4ee5\u901a\u8fc7&amp;\u5f00\u5934\u7684\u5b57\u7b26\u4e32\u5728\u6269\u5c55\u5b57\u6bb5x-logging\u5b9a\u4e49\u7684\u65e5\u5fd7\u8bb0\u5f55\u914d\u7f6e\u7247\u6bb5\u4e2d\u8bbe\u7f6e\u951a\u70b9\uff0c\u7136\u540e\u5728\u9700\u8981\u5f15\u7528\u8be5\u65e5\u5fd7\u8bb0\u5f55\u914d\u7f6e\u7247\u6bb5\u7684\u670d\u52a1\u4e2d\u4ee5*\u52a0\u4e0a\u951a\u70b9\u540d\u8fdb\u884c\u5f15\u7528\uff1a  <\/p>\n<pre><code>version: &#039;3.4&#039;\nx-logging:\n  &amp;default-logging\n  options:\n    max-size: &#039;12m&#039;\n    max-file: &#039;5&#039;\n  driver: json-file\n\nservices:\n  web:\n    image: myapp\/web:latest\n    logging: *default-logging\n  db:\n    image: mysql:latest\n    logging: *default-logging<\/code><\/pre>\n<p>\u4e5f\u53ef\u4ee5\u901a\u8fc7YAML\u5408\u5e76\u6765\u90e8\u5206\u8986\u76d6\u6269\u5c55\u5b57\u6bb5\u4e2d\u7684\u503c\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><code>version: &#039;3.4&#039;\nx-volumes:\n  &amp;default-volume\n  driver: foobar-storage\n\nservices:\n  web:\n    image: myapp\/web:latest\n    volumes: [&quot;vol1&quot;, &quot;vol2&quot;, &quot;vol3&quot;]\nvolumes:\n  vol1: *default-volume\n  vol2:\n    &lt;&lt; : *default-volume\n    name: volume02\n  vol3:\n    &lt;&lt; : *default-volume\n    driver: default\n    name: volume-local<\/code><\/pre>\n<p><strong>\u4e5d\u3001\u5176\u4ed6\u5185\u5bb9<\/strong><\/p>\n<p><strong>1. \u6307\u5b9a\u6301\u7eed\u65f6\u95f4\uff08durations\uff09<\/strong><\/p>\n<p>\u67d0\u4e9b\u914d\u7f6e\u9879\u5982healthcheck\u914d\u7f6e\u9879\u7684\u5b50\u914d\u7f6e\u9879interval\u548ctimeout\u63a5\u53d7\u4ee5\u7c7b\u4f3c\u5982\u4e0b\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u8868\u793a\u7684\u6301\u7eed\u65f6\u95f4\uff08durations\uff09\uff1a<\/p>\n<pre><code>2.5s\n10s\n1m30s\n2h32m\n5h34m56s<\/code><\/pre>\n<p>\u652f\u6301\u7684\u5355\u4f4d\u6709us\u3001ms\u3001s\u3001m\u548ch\u3002<\/p>\n<p><strong>2. \u6307\u5b9a\u5b57\u8282\u503c<\/strong><\/p>\n<p>\u67d0\u4e9b\u914d\u7f6e\u9879\u5982build\u914d\u7f6e\u9879\u7684\u5b50\u914d\u7f6e\u9879shm_size\u63a5\u53d7\u4ee5\u7c7b\u4f3c\u5982\u4e0b\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u8868\u793a\u7684\u5b57\u8282\u503c\uff1a<\/p>\n<pre><code>2b\n1024kb\n2048k\n300m\n1gb<\/code><\/pre>\n<p>\u652f\u6301\u7684\u5355\u4f4d\u6709b\u3001k\u6216kb\u3001m\u6216mb\u3001g\u6216gb\u3002\u76ee\u524d\u4e0d\u652f\u6301\u5341\u8fdb\u5236\u3002<\/p>\n<p><strong>3. \u53d8\u91cf\u66ff\u6362<\/strong><\/p>\n<p>\u914d\u7f6e\u9879\u4e2d\u7684\u503c\u53ef\u4ee5\u5305\u542b\u73af\u5883\u53d8\u91cf\uff0cCompose\u4f1a\u4f7f\u7528\u8fd0\u884cdocker-compose\u65f6\u6240\u5728\u7684shell\u4e2d\u7684\u73af\u5883\u53d8\u91cf\u503c\u6765\u66ff\u6362Compose\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u73af\u5883\u53d8\u91cf\uff0c\\({VARIABLE}\u548c\\)VARIABLE\u8fd9\u4e24\u79cd\u8bed\u6cd5\u90fd\u652f\u6301\u3002\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u5047\u8bbeshell\u4e2d\u6709POSTGRES_VERSION=9.3\u8fd9\u4e2a\u73af\u5883\u53d8\u91cf\uff0c\u5219\u914d\u7f6e\u4e2d\u7684${POSTGRES_VERSION}\u5c06\u88ab\u66ff\u6362\u4e3a9.3\uff1a<\/p>\n<pre><code>db:\n  image: &quot;postgres:${POSTGRES_VERSION}&quot;<\/code><\/pre>\n<p>\u5982\u679c\u672a\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u5219Compose\u4f1a\u5c06\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u73af\u5883\u53d8\u91cf\u66ff\u6362\u4e3a\u7a7a\u5b57\u7b26\u4e32\u3002\u5982\u679c\u4e0a\u4f8b\u4e2d\u7684POSTGRES_VERSION\u672a\u8bbe\u7f6e\uff0c\u5219image\u7684\u503c\u4e3apostgres:\u3002\u53ef\u4ee5\u4f7f\u7528.env\u73af\u5883\u6587\u4ef6\u4e3a\u73af\u5883\u53d8\u91cf\u8bbe\u7f6e\u9ed8\u8ba4\u503c\uff0c\u4e0d\u8fc7shell\u4e2d\u7684\u73af\u5883\u53d8\u91cf\u503c\u4f1a\u8986\u76d6.env\u73af\u5883\u6587\u4ef6\u4e2d\u8bbe\u7f6e\u7684\u503c\u3002<\/p>\n<p>\u4f7f\u7528docker stack deploy\u65f6\u7684\u6ce8\u610f\u4e8b\u9879\uff1a.env\u73af\u5883\u6587\u4ef6\u4ec5\u5728\u4f7f\u7528docker-compose up\u547d\u4ee4\u65f6\u6709\u6548\uff0c\u4e0d\u9002\u7528\u4e8edocker stack deploy\u3002<\/p>\n<p>\u6b64\u5916\uff0c\u53ef\u4ee5\u4f7f\u7528\u5178\u578b\u7684shell\u8bed\u6cd5\u63d0\u4f9b\u5185\u8054\u9ed8\u8ba4\u503c\uff0c\u652f\u6301\u4ee5\u4e0b\u4e24\u79cd\u8bed\u6cd5\uff1a<\/p>\n<p><code>${VARIABLE:-default}\uff1a<\/code>\u5982\u679cVARIABLE\u672a\u8bbe\u7f6e\u6216\u4e3a\u7a7a\uff0c\u5219\u4f1a\u5e94\u7528default\u7684\u503c\u3002<\/p>\n<p><code>${VARIABLE-default}\uff1a<\/code>\u4ec5\u5f53VARIABLE\u672a\u8bbe\u7f6e\u65f6\u624d\u4f1a\u5e94\u7528default\u7684\u503c\u3002<\/p>\n<p>\u540c\u6837\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u4e24\u79cd\u8bed\u6cd5\u6765\u5f3a\u5236\u8981\u6c42\u53d8\u91cf\u5fc5\u987b\u8d4b\u503c\uff1a<\/p>\n<p><code>${VARIABLE:?err}\uff1a<\/code>\u5982\u679cVARIABLE\u672a\u8bbe\u7f6e\u6216\u4e3a\u7a7a\uff0c\u9000\u51fa\u5e76\u8f93\u51fa\u4e00\u6761\u5305\u542berr\u7684\u9519\u8bef\u4fe1\u606f\u3002<\/p>\n<p><code>${VARIABLE?err}\uff1a<\/code>\u5982\u679cVARIABLE\u672a\u8bbe\u7f6e\uff0c\u9000\u51fa\u5e76\u8f93\u51fa\u4e00\u6761\u5305\u542berr\u7684\u9519\u8bef\u4fe1\u606f\u3002<\/p>\n<p>\u5f53\u914d\u7f6e\u4e2d\u9700\u8981\\(\u7b26\u53f7\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528\\)\\(\u7b26\u53f7\u3002\u4e5f\u53ef\u4ee5\u9632\u6b62Compose\u63d2\u503c\uff0c\u56e0\u6b64\\)$ \u53ef\u4ee5\u5f15\u7528\u4e0d\u60f3\u7531Compose\u5904\u7406\u7684\u73af\u5883\u53d8\u91cf\u3002\u4f8b\u5982\u4ee5\u4e0b\u793a\u4f8b\uff0c\u5c31\u7b97\u8bbe\u7f6e\u4e86\u73af\u5883\u53d8\u91cfVAR_NOT_INTERPOLATED_BY_COMPOSE\uff0cCompose\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684VAR_NOT_INTERPOLATED_BY_COMPOSE\u4e5f\u4e0d\u4f1a\u88ab\u66ff\u6362\uff1a<\/p>\n<pre><code>web:\n  build: .\n  command: &quot;$$VAR_NOT_INTERPOLATED_BY_COMPOSE&quot;<\/code><\/pre>\n<p>\u5982\u679c\u5c11\u6307\u5b9a\u4e86\u4e00\u4e2a\\(\uff0c\u4e5f\u5c31\u662f\u53ea\u4f7f\u7528\u5355\u4e2a\\)\u7b26\u53f7\uff0c\u5219Compose\u4f1a\u5c06\u503c\u89e3\u91ca\u4e3a\u73af\u5883\u53d8\u91cf\uff0c\u5e76\u51fa\u73b0\u4e00\u4e2a\u7c7b\u4f3cThe VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.\u8fd9\u6837\u7684\u8b66\u544a\u3002  <\/p>\n<pre><code>source: \/\/blog.51cto.com\/u_6207455\/3342253<\/code><\/pre>\n<p><strong>\u8bb0\u5f97\u70b9\u300c****<\/strong>\u8d5e<strong>**<\/strong>\u300d\u548c\u300c<strong>**<\/strong>\u5728\u770b<strong>**<\/strong>\u300d\u2193**<\/p>\n<p><strong>\u7231\u4f60\u4eec<\/strong><\/p>\n<p>\u672c\u6587\u8f6c\u81ea <a href=\"https:\/\/blog.csdn.net\/huangjinjin520\/article\/details\/124054043\">https:\/\/blog.csdn.net\/huangjinjin520\/article\/details\/124054043<\/a>\uff0c\u5982\u6709\u4fb5\u6743\uff0c\u8bf7\u8054\u7cfb\u5220\u9664\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker Compose\u914d\u7f6e\u6587\u4ef6\u662fDocker Compose\u7684\u6838\u5fc3\uff0c\u7528\u4e8e\u5b9a\u4e49\u670d\u52a1\u3001\u7f51\u7edc\u548c\u6570\u636e\u5377\u3002\u683c\u5f0f\u4e3aYAML\uff0c\u9ed8\u8ba4\u8def\u5f84\u4e3a.\/do   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[45],"tags":[61],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1449"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1449"}],"version-history":[{"count":1,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1449\/revisions"}],"predecessor-version":[{"id":1450,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1449\/revisions\/1450"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1449"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1449"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}