{"id":376,"date":"2018-03-14T10:14:24","date_gmt":"2018-03-14T02:14:24","guid":{"rendered":"http:\/\/www.max-shu.com\/blog\/?p=376"},"modified":"2018-03-14T11:58:18","modified_gmt":"2018-03-14T03:58:18","slug":"docker-%e4%bb%8e%e5%85%a5%e9%97%a8%e5%88%b0%e5%ae%9e%e8%b7%b5%ef%bc%88%e7%bb%ad%ef%bc%89","status":"publish","type":"post","link":"http:\/\/www.max-shu.com\/blog\/?p=376","title":{"rendered":"Docker \u2014\u2014 \u4ece\u5165\u95e8\u5230\u5b9e\u8df5\uff08\u7eed\uff09"},"content":{"rendered":"<div>\n<h1>6. \u4ed3\u5e93<\/h1>\n<p>\u4ed3\u5e93\uff08Repository\uff09\u662f\u96c6\u4e2d\u5b58\u653e\u955c\u50cf\u7684\u5730\u65b9\u3002<\/p>\n<p>\u4e00\u4e2a\u5bb9\u6613\u6df7\u6dc6\u7684\u6982\u5ff5\u662f\u6ce8\u518c\u670d\u52a1\u5668\uff08Registry\uff09\u3002\u5b9e\u9645\u4e0a\u6ce8\u518c\u670d\u52a1\u5668\u662f\u7ba1\u7406\u4ed3\u5e93\u7684\u5177\u4f53\u670d\u52a1\u5668\uff0c\u6bcf\u4e2a\u670d\u52a1\u5668\u4e0a\u53ef\u4ee5\u6709\u591a\u4e2a\u4ed3\u5e93\uff0c\u800c\u6bcf\u4e2a\u4ed3\u5e93\u4e0b\u9762\u6709\u591a\u4e2a\u955c\u50cf\u3002\u4ece\u8fd9\u65b9\u9762\u6765\u8bf4\uff0c\u4ed3\u5e93\u53ef\u4ee5\u88ab\u8ba4\u4e3a\u662f\u4e00\u4e2a\u5177\u4f53\u7684\u9879\u76ee\u6216\u76ee\u5f55\u3002\u4f8b\u5982\u5bf9\u4e8e\u4ed3\u5e93\u5730\u5740\u00a0dl.dockerpool.com\/ubuntu\u00a0\u6765\u8bf4\uff0cdl.dockerpool.com\u00a0\u662f\u6ce8\u518c\u670d\u52a1\u5668\u5730\u5740\uff0cubuntu\u00a0\u662f\u4ed3\u5e93\u540d\u3002<\/p>\n<p>\u5927\u90e8\u5206\u65f6\u5019\uff0c\u5e76\u4e0d\u9700\u8981\u4e25\u683c\u533a\u5206\u8fd9\u4e24\u8005\u7684\u6982\u5ff5\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>6.1. Docker Hub<\/h2>\n<p>\u76ee\u524d Docker \u5b98\u65b9\u7ef4\u62a4\u4e86\u4e00\u4e2a\u516c\u5171\u4ed3\u5e93\u00a0<a href=\"https:\/\/hub.docker.com\/\" target=\"_blank\" rel=\"nofollow noopener\">Docker Hub<\/a>\uff0c\u5176\u4e2d\u5df2\u7ecf\u5305\u62ec\u4e86\u8d85\u8fc7 15,000 \u7684\u955c\u50cf\u3002\u5927\u90e8\u5206\u9700\u6c42\uff0c\u90fd\u53ef\u4ee5\u901a\u8fc7\u5728 Docker Hub \u4e2d\u76f4\u63a5\u4e0b\u8f7d\u955c\u50cf\u6765\u5b9e\u73b0\u3002<\/p>\n<h3>\u767b\u5f55<\/h3>\n<p>\u53ef\u4ee5\u901a\u8fc7\u6267\u884c\u00a0docker login\u00a0\u547d\u4ee4\u6765\u8f93\u5165\u7528\u6237\u540d\u3001\u5bc6\u7801\u548c\u90ae\u7bb1\u6765\u5b8c\u6210\u6ce8\u518c\u548c\u767b\u5f55\u3002 \u6ce8\u518c\u6210\u529f\u540e\uff0c\u672c\u5730\u7528\u6237\u76ee\u5f55\u7684\u00a0.dockercfg\u00a0\u4e2d\u5c06\u4fdd\u5b58\u7528\u6237\u7684\u8ba4\u8bc1\u4fe1\u606f\u3002<\/p>\n<h3>\u57fa\u672c\u64cd\u4f5c<\/h3>\n<p>\u7528\u6237\u65e0\u9700\u767b\u5f55\u5373\u53ef\u901a\u8fc7\u00a0docker search\u00a0\u547d\u4ee4\u6765\u67e5\u627e\u5b98\u65b9\u4ed3\u5e93\u4e2d\u7684\u955c\u50cf\uff0c\u5e76\u5229\u7528\u00a0docker pull\u00a0\u547d\u4ee4\u6765\u5c06\u5b83\u4e0b\u8f7d\u5230\u672c\u5730\u3002<\/p>\n<p>\u4f8b\u5982\u4ee5 centos \u4e3a\u5173\u952e\u8bcd\u8fdb\u884c\u641c\u7d22\uff1a<\/p>\n<pre><wbr \/>$ sudo docker search centos\r\nNAME                                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED\r\ncentos                                          The official build of CentOS.                   465       [OK]\r\ntianon\/centos                                   CentOS 5 and 6, created using rinse instea...   28\r\nblalor\/centos                                   Bare-bones base CentOS 6.5 image                6                    [OK]\r\nsaltstack\/centos-6-minimal                                                                      6                    [OK]\r\ntutum\/centos-6.4                                DEPRECATED. Use tutum\/centos:6.4 instead. ...   5                    [OK]\r\n...\r\n<\/pre>\n<p>\u53ef\u4ee5\u770b\u5230\u8fd4\u56de\u4e86\u5f88\u591a\u5305\u542b\u5173\u952e\u5b57\u7684\u955c\u50cf\uff0c\u5176\u4e2d\u5305\u62ec\u955c\u50cf\u540d\u5b57\u3001\u63cf\u8ff0\u3001\u661f\u7ea7\uff08\u8868\u793a\u8be5\u955c\u50cf\u7684\u53d7\u6b22\u8fce\u7a0b\u5ea6\uff09\u3001\u662f\u5426\u5b98\u65b9\u521b\u5efa\u3001\u662f\u5426\u81ea\u52a8\u521b\u5efa\u3002 \u5b98\u65b9\u7684\u955c\u50cf\u8bf4\u660e\u662f\u5b98\u65b9\u9879\u76ee\u7ec4\u521b\u5efa\u548c\u7ef4\u62a4\u7684\uff0cautomated \u8d44\u6e90\u5141\u8bb8\u7528\u6237\u9a8c\u8bc1\u955c\u50cf\u7684\u6765\u6e90\u548c\u5185\u5bb9\u3002<\/p>\n<p>\u6839\u636e\u662f\u5426\u662f\u5b98\u65b9\u63d0\u4f9b\uff0c\u53ef\u5c06\u955c\u50cf\u8d44\u6e90\u5206\u4e3a\u4e24\u7c7b\u3002 \u4e00\u79cd\u662f\u7c7b\u4f3c centos \u8fd9\u6837\u7684\u57fa\u7840\u955c\u50cf\uff0c\u88ab\u79f0\u4e3a\u57fa\u7840\u6216\u6839\u955c\u50cf\u3002\u8fd9\u4e9b\u57fa\u7840\u955c\u50cf\u662f\u7531 Docker \u516c\u53f8\u521b\u5efa\u3001\u9a8c\u8bc1\u3001\u652f\u6301\u3001\u63d0\u4f9b\u3002\u8fd9\u6837\u7684\u955c\u50cf\u5f80\u5f80\u4f7f\u7528\u5355\u4e2a\u5355\u8bcd\u4f5c\u4e3a\u540d\u5b57\u3002 \u8fd8\u6709\u4e00\u79cd\u7c7b\u578b\uff0c\u6bd4\u5982\u00a0tianon\/centos\u00a0\u955c\u50cf\uff0c\u5b83\u662f\u7531 Docker \u7684\u7528\u6237\u521b\u5efa\u5e76\u7ef4\u62a4\u7684\uff0c\u5f80\u5f80\u5e26\u6709\u7528\u6237\u540d\u79f0\u524d\u7f00\u3002\u53ef\u4ee5\u901a\u8fc7\u524d\u7f00\u00a0user_name\/\u00a0\u6765\u6307\u5b9a\u4f7f\u7528\u67d0\u4e2a\u7528\u6237\u63d0\u4f9b\u7684\u955c\u50cf\uff0c\u6bd4\u5982 tianon \u7528\u6237\u3002<\/p>\n<p>\u53e6\u5916\uff0c\u5728\u67e5\u627e\u7684\u65f6\u5019\u901a\u8fc7\u00a0-s N\u00a0\u53c2\u6570\u53ef\u4ee5\u6307\u5b9a\u4ec5\u663e\u793a\u8bc4\u4ef7\u4e3a\u00a0N\u00a0\u661f\u4ee5\u4e0a\u7684\u955c\u50cf\u3002<\/p>\n<p>\u4e0b\u8f7d\u5b98\u65b9 centos \u955c\u50cf\u5230\u672c\u5730\u3002<\/p>\n<pre><wbr \/>$ sudo docker pull centos\r\nPulling repository centos\r\n0b443ba03958: Download complete\r\n539c0211cd76: Download complete\r\n511136ea3c5a: Download complete\r\n7064731afe90: Download complete\r\n<\/pre>\n<p>\u7528\u6237\u4e5f\u53ef\u4ee5\u5728\u767b\u5f55\u540e\u901a\u8fc7\u00a0docker push\u00a0\u547d\u4ee4\u6765\u5c06\u955c\u50cf\u63a8\u9001\u5230 Docker Hub\u3002<\/p>\n<h3>\u81ea\u52a8\u521b\u5efa<\/h3>\n<p>\u81ea\u52a8\u521b\u5efa\uff08Automated Builds\uff09\u529f\u80fd\u5bf9\u4e8e\u9700\u8981\u7ecf\u5e38\u5347\u7ea7\u955c\u50cf\u5185\u7a0b\u5e8f\u6765\u8bf4\uff0c\u5341\u5206\u65b9\u4fbf\u3002 \u6709\u65f6\u5019\uff0c\u7528\u6237\u521b\u5efa\u4e86\u955c\u50cf\uff0c\u5b89\u88c5\u4e86\u67d0\u4e2a\u8f6f\u4ef6\uff0c\u5982\u679c\u8f6f\u4ef6\u53d1\u5e03\u65b0\u7248\u672c\u5219\u9700\u8981\u624b\u52a8\u66f4\u65b0\u955c\u50cf\u3002\u3002<\/p>\n<p>\u800c\u81ea\u52a8\u521b\u5efa\u5141\u8bb8\u7528\u6237\u901a\u8fc7 Docker Hub \u6307\u5b9a\u8ddf\u8e2a\u4e00\u4e2a\u76ee\u6807\u7f51\u7ad9\uff08\u76ee\u524d\u652f\u6301\u00a0<a href=\"http:\/\/yeasy.gitbooks.io\/docker_practice\/content\/repository\/github.org\" rel=\"nofollow\">GitHub<\/a>\u00a0\u6216\u00a0<a href=\"http:\/\/yeasy.gitbooks.io\/docker_practice\/content\/repository\/bitbucket.org\" rel=\"nofollow\">BitBucket<\/a>\uff09\u4e0a\u7684\u9879\u76ee\uff0c\u4e00\u65e6\u9879\u76ee\u53d1\u751f\u65b0\u7684\u63d0\u4ea4\uff0c\u5219\u81ea\u52a8\u6267\u884c\u521b\u5efa\u3002<\/p>\n<p>\u8981\u914d\u7f6e\u81ea\u52a8\u521b\u5efa\uff0c\u5305\u62ec\u5982\u4e0b\u7684\u6b65\u9aa4\uff1a<\/p>\n<ul>\n<li>\u521b\u5efa\u5e76\u767b\u9646 Docker Hub\uff0c\u4ee5\u53ca\u76ee\u6807\u7f51\u7ad9\uff1b<\/li>\n<li>\u5728\u76ee\u6807\u7f51\u7ad9\u4e2d\u8fde\u63a5\u5e10\u6237\u5230 Docker Hub\uff1b<\/li>\n<li>\u5728 Docker Hub \u4e2d\u00a0<a href=\"https:\/\/registry.hub.docker.com\/builds\/add\/\" target=\"_blank\" rel=\"nofollow noopener\">\u914d\u7f6e\u4e00\u4e2a\u81ea\u52a8\u521b\u5efa<\/a>\uff1b<\/li>\n<li>\u9009\u53d6\u4e00\u4e2a\u76ee\u6807\u7f51\u7ad9\u4e2d\u7684\u9879\u76ee\uff08\u9700\u8981\u542b Dockerfile\uff09\u548c\u5206\u652f\uff1b<\/li>\n<li>\u6307\u5b9a Dockerfile \u7684\u4f4d\u7f6e\uff0c\u5e76\u63d0\u4ea4\u521b\u5efa\u3002<\/li>\n<\/ul>\n<p>\u4e4b\u540e\uff0c\u53ef\u4ee5 \u5728Docker Hub \u7684\u00a0<a href=\"https:\/\/registry.hub.docker.com\/builds\/\" target=\"_blank\" rel=\"nofollow noopener\">\u81ea\u52a8\u521b\u5efa\u9875\u9762<\/a>\u00a0\u4e2d\u8ddf\u8e2a\u6bcf\u6b21\u521b\u5efa\u7684\u72b6\u6001\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>6.2. \u79c1\u6709\u4ed3\u5e93<\/h2>\n<p>\u6709\u65f6\u5019\u4f7f\u7528 Docker Hub \u8fd9\u6837\u7684\u516c\u5171\u4ed3\u5e93\u53ef\u80fd\u4e0d\u65b9\u4fbf\uff0c\u7528\u6237\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a\u672c\u5730\u4ed3\u5e93\u4f9b\u79c1\u4eba\u4f7f\u7528\u3002<\/p>\n<p>\u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528\u672c\u5730\u4ed3\u5e93\u3002<\/p>\n<p><wbr \/>docker-registry\u00a0\u662f\u5b98\u65b9\u63d0\u4f9b\u7684\u5de5\u5177\uff0c\u53ef\u4ee5\u7528\u4e8e\u6784\u5efa\u79c1\u6709\u7684\u955c\u50cf\u4ed3\u5e93\u3002<\/p>\n<h3>\u5b89\u88c5\u8fd0\u884c docker-registry<\/h3>\n<h4>\u5bb9\u5668\u8fd0\u884c<\/h4>\n<p>\u5728\u5b89\u88c5\u4e86 Docker \u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u83b7\u53d6\u5b98\u65b9 registry \u955c\u50cf\u6765\u8fd0\u884c\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d -p 5000:5000 registry\r\n<\/pre>\n<p>\u8fd9\u5c06\u4f7f\u7528\u5b98\u65b9\u7684 registry \u955c\u50cf\u6765\u542f\u52a8\u672c\u5730\u7684\u79c1\u6709\u4ed3\u5e93\u3002 \u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u6307\u5b9a\u53c2\u6570\u6765\u914d\u7f6e\u79c1\u6709\u4ed3\u5e93\u4f4d\u7f6e\uff0c\u4f8b\u5982\u914d\u7f6e\u955c\u50cf\u5b58\u50a8\u5230 Amazon S3 \u670d\u52a1\u3002<\/p>\n<pre><wbr \/>$ sudo docker run \\\r\n         -e SETTINGS_FLAVOR=s3 \\\r\n         -e AWS_BUCKET=acme-docker \\\r\n         -e STORAGE_PATH=\/registry \\\r\n         -e AWS_KEY=AKIAHSHB43HS3J92MXZ \\\r\n         -e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T \\\r\n         -e SEARCH_BACKEND=sqlalchemy \\\r\n         -p 5000:5000 \\\r\n         registry<\/pre>\n<p>\u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u6307\u5b9a\u672c\u5730\u8def\u5f84\uff08\u5982\u00a0\/home\/user\/registry-conf\u00a0\uff09\u4e0b\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d -p 5000:5000 -v \/home\/user\/registry-conf:\/registry-conf -e DOCKER_REGISTRY_CONFIG=\/registry-conf\/config.yml registry\r\n<\/pre>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4ed3\u5e93\u4f1a\u88ab\u521b\u5efa\u5728\u5bb9\u5668\u7684\u00a0\/tmp\/registry\u00a0\u4e0b\u3002\u53ef\u4ee5\u901a\u8fc7\u00a0-v\u00a0\u53c2\u6570\u6765\u5c06\u955c\u50cf\u6587\u4ef6\u5b58\u653e\u5728\u672c\u5730\u7684\u6307\u5b9a\u8def\u5f84\u3002 \u4f8b\u5982\u4e0b\u9762\u7684\u4f8b\u5b50\u5c06\u4e0a\u4f20\u7684\u955c\u50cf\u653e\u5230\u00a0\/opt\/da<wbr \/>ta\/registry\u00a0\u76ee\u5f55\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d -p 5000:5000 -v \/opt\/da<wbr \/>ta\/registry:\/tmp\/registry registry\r\n<\/pre>\n<h4>\u672c\u5730\u5b89\u88c5<\/h4>\n<p>\u5bf9\u4e8e Ubuntu \u6216 CentOS \u7b49\u53d1\u884c\u7248\uff0c\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u6e90\u5b89\u88c5\u3002<\/p>\n<ul>\n<li>Ubuntu\n<pre><wbr \/>$ sudo apt-get install -y build-essential python-dev libevent-dev python-pip liblzma-dev\r\n$ sudo pip install docker-registry\r\n<\/pre>\n<\/li>\n<li>CentOS\n<pre><wbr \/>$ sudo yum install -y python-devel libevent-devel python-pip gcc xz-devel\r\n$ sudo python-pip install docker-registry\r\n<\/pre>\n<\/li>\n<\/ul>\n<p>\u4e5f\u53ef\u4ee5\u4ece\u00a0<a href=\"https:\/\/github.com\/docker\/docker-registry\" target=\"_blank\" rel=\"nofollow noopener\">docker-registry<\/a>\u00a0\u9879\u76ee\u4e0b\u8f7d\u6e90\u7801\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<pre><wbr \/>$ sudo apt-get install build-essential python-dev libevent-dev python-pip libssl-dev liblzma-dev libffi-dev\r\n$ git clone https:\/\/github.com\/docker\/docker-registry.git\r\n$ cd docker-registry\r\n$ sudo python setup.py install\r\n<\/pre>\n<p>\u7136\u540e\u4fee\u6539\u914d\u7f6e\u6587\u4ef6\uff0c\u4e3b\u8981\u4fee\u6539 dev \u6a21\u677f\u6bb5\u7684\u00a0storage_path\u00a0\u5230\u672c\u5730\u7684\u5b58\u50a8\u4ed3\u5e93\u7684\u8def\u5f84\u3002<\/p>\n<pre><wbr \/>$ cp config\/config_sample.yml config\/config.yml\r\n<\/pre>\n<p>\u4e4b\u540e\u542f\u52a8 Web \u670d\u52a1\u3002<\/p>\n<pre><wbr \/>$ sudo gunicorn -c contrib\/gunicorn.py docker_registry.wsgi:application\r\n<\/pre>\n<p>\u6216\u8005<\/p>\n<pre><wbr \/>$ sudo gunicorn --access-logfile - --error-logfile - -k gevent -b 0.0.0.0:5000 -w 4 --max-requests 100 docker_registry.wsgi:application\r\n<\/pre>\n<p>\u6b64\u65f6\u4f7f\u7528\u8bbf\u95ee\u672c\u5730\u7684 5000 \u7aef\u53e3\uff0c\u770b\u5230\u8f93\u51fa docker-registry \u7684\u7248\u672c\u4fe1\u606f\u8bf4\u660e\u8fd0\u884c\u6210\u529f\u3002<\/p>\n<p>*\u6ce8\uff1aconfig\/config_sample.yml\u00a0\u6587\u4ef6\u662f\u793a\u4f8b\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<h3>\u5728\u79c1\u6709\u4ed3\u5e93\u4e0a\u4f20\u3001\u4e0b\u8f7d\u3001\u641c\u7d22\u955c\u50cf<\/h3>\n<p>\u521b\u5efa\u597d\u79c1\u6709\u4ed3\u5e93\u4e4b\u540e\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528\u00a0docker tag\u00a0\u6765\u6807\u8bb0\u4e00\u4e2a\u955c\u50cf\uff0c\u7136\u540e\u63a8\u9001\u5b83\u5230\u4ed3\u5e93\uff0c\u522b\u7684\u673a\u5668\u4e0a\u5c31\u53ef\u4ee5\u4e0b\u8f7d\u4e0b\u6765\u4e86\u3002\u4f8b\u5982\u79c1\u6709\u4ed3\u5e93\u5730\u5740\u4e3a\u00a0192.168.7.26:5000\u3002<\/p>\n<p>\u5148\u5728\u672c\u673a\u67e5\u770b\u5df2\u6709\u7684\u955c\u50cf\u3002<\/p>\n<pre><wbr \/>$ sudo docker images\r\nREPOSITORY                        TAG                 IMAGE ID            CREATED             VIRTUAL SIZE\r\nubuntu                            latest              ba5877dc9bec        6 weeks ago         192.7 MB\r\nubuntu                            14.04               ba5877dc9bec        6 weeks ago         192.7 MB\r\n<\/pre>\n<p>\u4f7f\u7528docker tag\u00a0\u5c06\u00a0ba58\u00a0\u8fd9\u4e2a\u955c\u50cf\u6807\u8bb0\u4e3a\u00a0192.168.7.26:5000\/test\uff08\u683c\u5f0f\u4e3a\u00a0docker tag IMAGE[:TAG] [REGISTRYHOST\/][USERNAME\/]NAME[:TAG]\uff09\u3002<\/p>\n<pre><wbr \/>$ sudo docker tag ba58 192.168.7.26:5000\/test\r\nroot ~ # docker images\r\nREPOSITORY                        TAG                 IMAGE ID            CREATED             VIRTUAL SIZE\r\nubuntu                            14.04               ba5877dc9bec        6 weeks ago         192.7 MB\r\nubuntu                            latest              ba5877dc9bec        6 weeks ago         192.7 MB\r\n192.168.7.26:5000\/test            latest              ba5877dc9bec        6 weeks ago         192.7 MB\r\n<\/pre>\n<p>\u4f7f\u7528\u00a0docker push\u00a0\u4e0a\u4f20\u6807\u8bb0\u7684\u955c\u50cf\u3002<\/p>\n<pre><wbr \/>$ sudo docker push 192.168.7.26:5000\/test\r\nThe push refers to a repository [192.168.7.26:5000\/test] (len: 1)\r\nSending image list\r\nPushing repository 192.168.7.26:5000\/test (1 tags)\r\nImage 511136ea3c5a already pushed, skipping\r\nImage 9bad880da3d2 already pushed, skipping\r\nImage 25f11f5fb0cb already pushed, skipping\r\nImage ebc34468f71d already pushed, skipping\r\nImage 2318d26665ef already pushed, skipping\r\nImage ba5877dc9bec already pushed, skipping\r\nPushing tag for rev [ba5877dc9bec] on {http:\/\/192.168.7.26:5000\/v1\/repositories\/test\/tags\/latest}\r\n<\/pre>\n<p>\u7528 curl \u67e5\u770b\u4ed3\u5e93\u4e2d\u7684\u955c\u50cf\u3002<\/p>\n<pre><wbr \/>$ curl http:\/\/192.168.7.26:5000\/v1\/search\r\n{\"num_results\": 7, \"query\": \"\", \"results\": [{\"description\": \"\", \"name\": \"library\/miaxis_j2ee\"}, {\"description\": \"\", \"name\": \"library\/tomcat\"}, {\"description\": \"\", \"name\": \"library\/ubuntu\"}, {\"description\": \"\", \"name\": \"library\/ubuntu_office\"}, {\"description\": \"\", \"name\": \"library\/desktop_ubu\"}, {\"description\": \"\", \"name\": \"dockerfile\/ubuntu\"}, {\"description\": \"\", \"name\": \"library\/test\"}]}\r\n<\/pre>\n<p>\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\u00a0{&#8220;description&#8221;: &#8220;&#8221;, &#8220;name&#8221;: &#8220;library\/test&#8221;}\uff0c\u8868\u660e\u955c\u50cf\u5df2\u7ecf\u88ab\u6210\u529f\u4e0a\u4f20\u4e86\u3002<\/p>\n<p>\u73b0\u5728\u53ef\u4ee5\u5230\u53e6\u5916\u4e00\u53f0\u673a\u5668\u53bb\u4e0b\u8f7d\u8fd9\u4e2a\u955c\u50cf\u3002<\/p>\n<pre><wbr \/>$ sudo docker pull 192.168.7.26:5000\/test\r\nPulling repository 192.168.7.26:5000\/test\r\nba5877dc9bec: Download complete\r\n511136ea3c5a: Download complete\r\n9bad880da3d2: Download complete\r\n25f11f5fb0cb: Download complete\r\nebc34468f71d: Download complete\r\n2318d26665ef: Download complete\r\n$ sudo docker images\r\nREPOSITORY                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE\r\n192.168.7.26:5000\/test             latest              ba5877dc9bec        6 weeks ago         192.7 MB\r\n<\/pre>\n<p>\u53ef\u4ee5\u4f7f\u7528\u00a0<a href=\"https:\/\/github.com\/yeasy\/docker_practice\/raw\/master\/_local\/push_images.sh\" target=\"_blank\" rel=\"nofollow noopener\">\u8fd9\u4e2a\u811a\u672c<\/a>\u00a0\u6279\u91cf\u4e0a\u4f20\u672c\u5730\u7684\u955c\u50cf\u5230\u6ce8\u518c\u670d\u52a1\u5668\u4e2d\uff0c\u9ed8\u8ba4\u662f\u672c\u5730\u6ce8\u518c\u670d\u52a1\u5668\u00a0127.0.0.1:5000\u3002\u4f8b\u5982\uff1a<\/p>\n<pre><wbr \/>$ wget https:\/\/github.com\/yeasy\/docker_practice\/raw\/master\/_local\/push_images.sh; sudo chmod a+x push_images.sh\r\n$ .\/push_images.sh ubuntu:latest centos:centos7\r\nThe registry server is 127.0.0.1\r\nUploading ubuntu:latest...\r\nThe push refers to a repository [127.0.0.1:5000\/ubuntu] (len: 1)\r\nSending image list\r\nPushing repository 127.0.0.1:5000\/ubuntu (1 tags)\r\nImage 511136ea3c5a already pushed, skipping\r\nImage bfb8b5a2ad34 already pushed, skipping\r\nImage c1f3bdbd8355 already pushed, skipping\r\nImage 897578f527ae already pushed, skipping\r\nImage 9387bcc9826e already pushed, skipping\r\nImage 809ed259f845 already pushed, skipping\r\nImage 96864a7d2df3 already pushed, skipping\r\nPushing tag for rev [96864a7d2df3] on {http:\/\/127.0.0.1:5000\/v1\/repositories\/ubuntu\/tags\/latest}\r\nUntagged: 127.0.0.1:5000\/ubuntu:latest\r\nDone\r\nUploading centos:centos7...\r\nThe push refers to a repository [127.0.0.1:5000\/centos] (len: 1)\r\nSending image list\r\nPushing repository 127.0.0.1:5000\/centos (1 tags)\r\nImage 511136ea3c5a already pushed, skipping\r\n34e94e67e63a: Image successfully pushed\r\n70214e5d0a90: Image successfully pushed\r\nPushing tag for rev [70214e5d0a90] on {http:\/\/127.0.0.1:5000\/v1\/repositories\/centos\/tags\/centos7}\r\nUntagged: 127.0.0.1:5000\/centos:centos7\r\nDone<\/pre>\n<\/div>\n<div><\/div>\n<div>\n<h2>6.3. \u4ed3\u5e93\u914d\u7f6e\u6587\u4ef6<\/h2>\n<p>Docker \u7684 Registry \u5229\u7528\u914d\u7f6e\u6587\u4ef6\u63d0\u4f9b\u4e86\u4e00\u4e9b\u4ed3\u5e93\u7684\u6a21\u677f\uff08flavor\uff09\uff0c\u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u5b83\u4eec\u6765\u8fdb\u884c\u5f00\u53d1\u6216\u751f\u4ea7\u90e8\u7f72\u3002<\/p>\n<h3>\u6a21\u677f<\/h3>\n<p>\u5728\u00a0config_sample.yml\u00a0\u6587\u4ef6\u4e2d\uff0c\u53ef\u4ee5\u770b\u5230\u4e00\u4e9b\u73b0\u6210\u7684\u6a21\u677f\u6bb5\uff1a<\/p>\n<ul>\n<li><wbr \/>common\uff1a\u57fa\u7840\u914d\u7f6e<\/li>\n<li><wbr \/>local\uff1a\u5b58\u50a8\u6570\u636e\u5230\u672c\u5730\u6587\u4ef6\u7cfb\u7edf<\/li>\n<li><wbr \/>s3\uff1a\u5b58\u50a8\u6570\u636e\u5230 AWS S3 \u4e2d<\/li>\n<li><wbr \/>dev\uff1a\u4f7f\u7528\u00a0local\u00a0\u6a21\u677f\u7684\u57fa\u672c\u914d\u7f6e<\/li>\n<li><wbr \/>test\uff1a\u5355\u5143\u6d4b\u8bd5\u4f7f\u7528<\/li>\n<li><wbr \/>prod\uff1a\u751f\u4ea7\u73af\u5883\u914d\u7f6e\uff08\u57fa\u672c\u4e0a\u8ddfs3\u914d\u7f6e\u7c7b\u4f3c\uff09<\/li>\n<li><wbr \/>gcs\uff1a\u5b58\u50a8\u6570\u636e\u5230 Google \u7684\u4e91\u5b58\u50a8<\/li>\n<li><wbr \/>swift\uff1a\u5b58\u50a8\u6570\u636e\u5230 OpenStack Swift \u670d\u52a1<\/li>\n<li><wbr \/>glance\uff1a\u5b58\u50a8\u6570\u636e\u5230 OpenStack Glance \u670d\u52a1\uff0c\u672c\u5730\u6587\u4ef6\u7cfb\u7edf\u4e3a\u540e\u5907<\/li>\n<li><wbr \/>glance-swift\uff1a\u5b58\u50a8\u6570\u636e\u5230 OpenStack Glance \u670d\u52a1\uff0cSwift \u4e3a\u540e\u5907<\/li>\n<li><wbr \/>elliptics\uff1a\u5b58\u50a8\u6570\u636e\u5230 Elliptics key\/value \u5b58\u50a8<\/li>\n<\/ul>\n<p>\u7528\u6237\u4e5f\u53ef\u4ee5\u6dfb\u52a0\u81ea\u5b9a\u4e49\u7684\u6a21\u7248\u6bb5\u3002<\/p>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4f7f\u7528\u7684\u6a21\u677f\u662fdev\uff0c\u8981\u4f7f\u7528\u67d0\u4e2a\u6a21\u677f\u4f5c\u4e3a\u9ed8\u8ba4\u503c\uff0c\u53ef\u4ee5\u6dfb\u52a0\u00a0SETTINGS_FLAVOR\u00a0\u5230\u73af\u5883\u53d8\u91cf\u4e2d\uff0c\u4f8b\u5982<\/p>\n<pre><wbr \/>export SETTINGS_FLAVOR=dev\r\n<\/pre>\n<p>\u53e6\u5916\uff0c\u914d\u7f6e\u6587\u4ef6\u4e2d\u652f\u6301\u4ece\u73af\u5883\u53d8\u91cf\u4e2d\u52a0\u8f7d\u503c\uff0c\u8bed\u6cd5\u683c\u5f0f\u4e3a\u00a0_env:VARIABLENAME[:DEFAULT]\u3002<\/p>\n<h3>\u793a\u4f8b\u914d\u7f6e<\/h3>\n<pre><wbr \/>common:\r\n    loglevel: info\r\n    search_backend: \"_env:SEARCH_BACKEND:\"\r\n    sqlalchemy_index_database:\r\n        \"_env:SQLALCHEMY_INDEX_DATABASE:sqlite:\/\/\/\/tmp\/docker-registry.db\"\r\n\r\nprod:\r\n    loglevel: warn\r\n    storage: s3\r\n    s3_access_key: _env:AWS_S3_ACCESS_KEY\r\n    s3_secret_key: _env:AWS_S3_SECRET_KEY\r\n    s3_bucket: _env:AWS_S3_BUCKET\r\n    boto_bucket: _env:AWS_S3_BUCKET\r\n    storage_path: \/srv\/docker\r\n    smtp_host: localhost\r\n    from_addr: docker@myself.com\r\n    to_addr: my@myself.com\r\n\r\ndev:\r\n    loglevel: debug\r\n    storage: local\r\n    storage_path: \/home\/myself\/docker\r\n\r\ntest:\r\n    storage: local\r\n    storage_path: \/tmp\/tmpdockertmp\r\n<\/pre>\n<h3>\u9009\u9879<\/h3>\n<\/div>\n<div>\n<h1><\/h1>\n<h1>7. Docker \u6570\u636e\u7ba1\u7406<\/h1>\n<p>\u8fd9\u4e00\u7ae0\u4ecb\u7ecd\u5982\u4f55\u5728 Docker \u5185\u90e8\u4ee5\u53ca\u5bb9\u5668\u4e4b\u95f4\u7ba1\u7406\u6570\u636e\uff0c\u5728\u5bb9\u5668\u4e2d\u7ba1\u7406\u6570\u636e\u4e3b\u8981\u6709\u4e24\u79cd\u65b9\u5f0f\uff1a<\/p>\n<ul>\n<li>\u6570\u636e\u5377\uff08Da<wbr \/>ta volumes\uff09<\/li>\n<li>\u6570\u636e\u5377\u5bb9\u5668\uff08Da<wbr \/>ta volume containers\uff09<\/li>\n<\/ul>\n<\/div>\n<div><\/div>\n<div>\n<h2>7.1. \u6570\u636e\u5377<\/h2>\n<p>\u6570\u636e\u5377\u662f\u4e00\u4e2a\u53ef\u4f9b\u4e00\u4e2a\u6216\u591a\u4e2a\u5bb9\u5668\u4f7f\u7528\u7684\u7279\u6b8a\u76ee\u5f55\uff0c\u5b83\u7ed5\u8fc7 UFS\uff0c\u53ef\u4ee5\u63d0\u4f9b\u5f88\u591a\u6709\u7528\u7684\u7279\u6027\uff1a<\/p>\n<ul>\n<li>\u6570\u636e\u5377\u53ef\u4ee5\u5728\u5bb9\u5668\u4e4b\u95f4\u5171\u4eab\u548c\u91cd\u7528<\/li>\n<li>\u5bf9\u6570\u636e\u5377\u7684\u4fee\u6539\u4f1a\u7acb\u9a6c\u751f\u6548<\/li>\n<li>\u5bf9\u6570\u636e\u5377\u7684\u66f4\u65b0\uff0c\u4e0d\u4f1a\u5f71\u54cd\u955c\u50cf<\/li>\n<li>\u5377\u4f1a\u4e00\u76f4\u5b58\u5728\uff0c\u76f4\u5230\u6ca1\u6709\u5bb9\u5668\u4f7f\u7528<\/li>\n<\/ul>\n<p>*\u6570\u636e\u5377\u7684\u4f7f\u7528\uff0c\u7c7b\u4f3c\u4e8e Linux \u4e0b\u5bf9\u76ee\u5f55\u6216\u6587\u4ef6\u8fdb\u884c mount\u3002<\/p>\n<h3>\u521b\u5efa\u4e00\u4e2a\u6570\u636e\u5377<\/h3>\n<p>\u5728\u7528\u00a0docker run\u00a0\u547d\u4ee4\u7684\u65f6\u5019\uff0c\u4f7f\u7528\u00a0-v\u00a0\u6807\u8bb0\u6765\u521b\u5efa\u4e00\u4e2a\u6570\u636e\u5377\u5e76\u6302\u8f7d\u5230\u5bb9\u5668\u91cc\u3002\u5728\u4e00\u6b21 run \u4e2d\u591a\u6b21\u4f7f\u7528\u53ef\u4ee5\u6302\u8f7d\u591a\u4e2a\u6570\u636e\u5377\u3002<\/p>\n<p>\u4e0b\u9762\u521b\u5efa\u4e00\u4e2a web \u5bb9\u5668\uff0c\u5e76\u52a0\u8f7d\u4e00\u4e2a\u6570\u636e\u5377\u5230\u5bb9\u5668\u7684\u00a0\/webapp\u00a0\u76ee\u5f55\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d -P --name web -v \/webapp training\/webapp python app.py\r\n<\/pre>\n<p>*\u6ce8\u610f\uff1a\u4e5f\u53ef\u4ee5\u5728 Dockerfile \u4e2d\u4f7f\u7528\u00a0VOLUME\u00a0\u6765\u6dfb\u52a0\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u65b0\u7684\u5377\u5230\u7531\u8be5\u955c\u50cf\u521b\u5efa\u7684\u4efb\u610f\u5bb9\u5668\u3002<\/p>\n<h3>\u6302\u8f7d\u4e00\u4e2a\u4e3b\u673a\u76ee\u5f55\u4f5c\u4e3a\u6570\u636e\u5377<\/h3>\n<p>\u4f7f\u7528\u00a0-v\u00a0\u6807\u8bb0\u4e5f\u53ef\u4ee5\u6307\u5b9a\u6302\u8f7d\u4e00\u4e2a\u672c\u5730\u4e3b\u673a\u7684\u76ee\u5f55\u5230\u5bb9\u5668\u4e2d\u53bb\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d -P --name web -v \/src\/webapp:\/opt\/webapp training\/webapp python app.py\r\n<\/pre>\n<p>\u4e0a\u9762\u7684\u547d\u4ee4\u52a0\u8f7d\u4e3b\u673a\u7684\u00a0\/src\/webapp\u00a0\u76ee\u5f55\u5230\u5bb9\u5668\u7684\u00a0\/opt\/webapp\u00a0\u76ee\u5f55\u3002\u8fd9\u4e2a\u529f\u80fd\u5728\u8fdb\u884c\u6d4b\u8bd5\u7684\u65f6\u5019\u5341\u5206\u65b9\u4fbf\uff0c\u6bd4\u5982\u7528\u6237\u53ef\u4ee5\u653e\u7f6e\u4e00\u4e9b\u7a0b\u5e8f\u5230\u672c\u5730\u76ee\u5f55\u4e2d\uff0c\u6765\u67e5\u770b\u5bb9\u5668\u662f\u5426\u6b63\u5e38\u5de5\u4f5c\u3002\u672c\u5730\u76ee\u5f55\u7684\u8def\u5f84\u5fc5\u987b\u662f\u7edd\u5bf9\u8def\u5f84\uff0c\u5982\u679c\u76ee\u5f55\u4e0d\u5b58\u5728 Docker \u4f1a\u81ea\u52a8\u4e3a\u4f60\u521b\u5efa\u5b83\u3002<\/p>\n<p>*\u6ce8\u610f\uff1aDockerfile \u4e2d\u4e0d\u652f\u6301\u8fd9\u79cd\u7528\u6cd5\uff0c\u8fd9\u662f\u56e0\u4e3a Dockerfile \u662f\u4e3a\u4e86\u79fb\u690d\u548c\u5206\u4eab\u7528\u7684\u3002\u7136\u800c\uff0c\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u7684\u8def\u5f84\u683c\u5f0f\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u76ee\u524d\u8fd8\u4e0d\u80fd\u652f\u6301\u3002<\/p>\n<p>Docker \u6302\u8f7d\u6570\u636e\u5377\u7684\u9ed8\u8ba4\u6743\u9650\u662f\u8bfb\u5199\uff0c\u7528\u6237\u4e5f\u53ef\u4ee5\u901a\u8fc7\u00a0:ro\u00a0\u6307\u5b9a\u4e3a\u53ea\u8bfb\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d -P --name web -v \/src\/webapp:\/opt\/webapp:ro\r\ntraining\/webapp python app.py\r\n<\/pre>\n<p>\u52a0\u4e86\u00a0:ro\u00a0\u4e4b\u540e\uff0c\u5c31\u6302\u8f7d\u4e3a\u53ea\u8bfb\u4e86\u3002<\/p>\n<h3>\u6302\u8f7d\u4e00\u4e2a\u672c\u5730\u4e3b\u673a\u6587\u4ef6\u4f5c\u4e3a\u6570\u636e\u5377<\/h3>\n<p><wbr \/>-v\u00a0\u6807\u8bb0\u4e5f\u53ef\u4ee5\u4ece\u4e3b\u673a\u6302\u8f7d\u5355\u4e2a\u6587\u4ef6\u5230\u5bb9\u5668\u4e2d<\/p>\n<pre><wbr \/>$ sudo docker run --rm -it -v ~\/.bash_history:\/.bash_history ubuntu \/bin\/bash\r\n<\/pre>\n<p>\u8fd9\u6837\u5c31\u53ef\u4ee5\u8bb0\u5f55\u5728\u5bb9\u5668\u8f93\u5165\u8fc7\u7684\u547d\u4ee4\u4e86\u3002<\/p>\n<p>*\u6ce8\u610f\uff1a\u5982\u679c\u76f4\u63a5\u6302\u8f7d\u4e00\u4e2a\u6587\u4ef6\uff0c\u5f88\u591a\u6587\u4ef6\u7f16\u8f91\u5de5\u5177\uff0c\u5305\u62ec\u00a0vi\u00a0\u6216\u8005\u00a0sed &#8211;in-place\uff0c\u53ef\u80fd\u4f1a\u9020\u6210\u6587\u4ef6 inode \u7684\u6539\u53d8\uff0c\u4ece Docker 1.1 .0\u8d77\uff0c\u8fd9\u4f1a\u5bfc\u81f4\u62a5\u9519\u8bef\u4fe1\u606f\u3002\u6240\u4ee5\u6700\u7b80\u5355\u7684\u529e\u6cd5\u5c31\u76f4\u63a5\u6302\u8f7d\u6587\u4ef6\u7684\u7236\u76ee\u5f55\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>7.2. \u6570\u636e\u5377\u5bb9\u5668<\/h2>\n<p>\u5982\u679c\u4f60\u6709\u4e00\u4e9b\u6301\u7eed\u66f4\u65b0\u7684\u6570\u636e\u9700\u8981\u5728\u5bb9\u5668\u4e4b\u95f4\u5171\u4eab\uff0c\u6700\u597d\u521b\u5efa\u6570\u636e\u5377\u5bb9\u5668\u3002<\/p>\n<p>\u6570\u636e\u5377\u5bb9\u5668\uff0c\u5176\u5b9e\u5c31\u662f\u4e00\u4e2a\u6b63\u5e38\u7684\u5bb9\u5668\uff0c\u4e13\u95e8\u7528\u6765\u63d0\u4f9b\u6570\u636e\u5377\u4f9b\u5176\u5b83\u5bb9\u5668\u6302\u8f7d\u7684\u3002<\/p>\n<p>\u9996\u5148\uff0c\u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7684\u6570\u636e\u5377\u5bb9\u5668 dbdata\uff1a<\/p>\n<pre><wbr \/>$ sudo docker run -d -v \/dbdata --name dbdata training\/postgres echo Da<wbr \/>ta-on<wbr \/>ly container for postgres\r\n<\/pre>\n<p>\u7136\u540e\uff0c\u5728\u5176\u4ed6\u5bb9\u5668\u4e2d\u4f7f\u7528\u00a0&#8211;volumes-from\u00a0\u6765\u6302\u8f7d dbdata \u5bb9\u5668\u4e2d\u7684\u6570\u636e\u5377\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d --volumes-from dbdata --name db1 training\/postgres\r\n$ sudo docker run -d --volumes-from dbdata --name db2 training\/postgres\r\n<\/pre>\n<p>\u8fd8\u53ef\u4ee5\u4f7f\u7528\u591a\u4e2a\u00a0&#8211;volumes-from\u00a0\u53c2\u6570\u6765\u4ece\u591a\u4e2a\u5bb9\u5668\u6302\u8f7d\u591a\u4e2a\u6570\u636e\u5377\u3002 \u4e5f\u53ef\u4ee5\u4ece\u5176\u4ed6\u5df2\u7ecf\u6302\u8f7d\u4e86\u5bb9\u5668\u5377\u7684\u5bb9\u5668\u6765\u6302\u8f7d\u6570\u636e\u5377\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d --name db3 --volumes-from db1 training\/postgres\r\n<\/pre>\n<p>*\u6ce8\u610f\uff1a\u4f7f\u7528\u00a0&#8211;volumes-from\u00a0\u53c2\u6570\u6240\u6302\u8f7d\u6570\u636e\u5377\u7684\u5bb9\u5668\u81ea\u5df1\u5e76\u4e0d\u9700\u8981\u4fdd\u6301\u5728\u8fd0\u884c\u72b6\u6001\u3002<\/p>\n<p>\u5982\u679c\u5220\u9664\u4e86\u6302\u8f7d\u7684\u5bb9\u5668\uff08\u5305\u62ec dbdata\u3001db1 \u548c db2\uff09\uff0c\u6570\u636e\u5377\u5e76\u4e0d\u4f1a\u88ab\u81ea\u52a8\u5220\u9664\u3002\u5982\u679c\u8981\u5220\u9664\u4e00\u4e2a\u6570\u636e\u5377\uff0c\u5fc5\u987b\u5728\u5220\u9664\u6700\u540e\u4e00\u4e2a\u8fd8\u6302\u8f7d\u7740\u5b83\u7684\u5bb9\u5668\u65f6\u4f7f\u7528\u00a0docker rm -v\u00a0\u547d\u4ee4\u6765\u6307\u5b9a\u540c\u65f6\u5220\u9664\u5173\u8054\u7684\u5bb9\u5668\u3002 \u8fd9\u53ef\u4ee5\u8ba9\u7528\u6237\u5728\u5bb9\u5668\u4e4b\u95f4\u5347\u7ea7\u548c\u79fb\u52a8\u6570\u636e\u5377\u3002\u5177\u4f53\u7684\u64cd\u4f5c\u5c06\u5728\u4e0b\u4e00\u8282\u4e2d\u8fdb\u884c\u8bb2\u89e3\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>7.3. \u5229\u7528\u6570\u636e\u5377\u5bb9\u5668\u6765\u5907\u4efd\u3001\u6062\u590d\u3001\u8fc1\u79fb\u6570\u636e\u5377<\/h2>\n<p>\u53ef\u4ee5\u5229\u7528\u6570\u636e\u5377\u5bf9\u5176\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u8fdb\u884c\u5907\u4efd\u3001\u6062\u590d\u548c\u8fc1\u79fb\u3002<\/p>\n<h3>\u5907\u4efd<\/h3>\n<p>\u9996\u5148\u4f7f\u7528\u00a0&#8211;volumes-from\u00a0\u6807\u8bb0\u6765\u521b\u5efa\u4e00\u4e2a\u52a0\u8f7d dbdata \u5bb9\u5668\u5377\u7684\u5bb9\u5668\uff0c\u5e76\u4ece\u672c\u5730\u4e3b\u673a\u6302\u8f7d\u5f53\u524d\u5230\u5bb9\u5668\u7684 \/backup \u76ee\u5f55\u3002\u547d\u4ee4\u5982\u4e0b\uff1a<\/p>\n<pre><wbr \/>$ sudo docker run --volumes-from dbdata -v $(pwd):\/backup ubuntu tar cvf \/backup\/backup.tar \/dbdata\r\n<\/pre>\n<p>\u5bb9\u5668\u542f\u52a8\u540e\uff0c\u4f7f\u7528\u4e86tar\u00a0\u547d\u4ee4\u6765\u5c06 dbdata \u5377\u5907\u4efd\u4e3a\u672c\u5730\u7684\u00a0\/backup\/backup.tar\u3002<\/p>\n<h3>\u6062\u590d<\/h3>\n<p>\u5982\u679c\u8981\u6062\u590d\u6570\u636e\u5230\u4e00\u4e2a\u5bb9\u5668\uff0c\u9996\u5148\u521b\u5efa\u4e00\u4e2a\u5e26\u6709\u6570\u636e\u5377\u7684\u5bb9\u5668 dbdata2\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -v \/dbdata --name dbdata2 ubuntu \/bin\/bash\r\n<\/pre>\n<p>\u7136\u540e\u521b\u5efa\u53e6\u4e00\u4e2a\u5bb9\u5668\uff0c\u6302\u8f7d dbdata2 \u7684\u5bb9\u5668\uff0c\u5e76\u4f7f\u7528\u00a0untar\u00a0\u89e3\u538b\u5907\u4efd\u6587\u4ef6\u5230\u6302\u8f7d\u7684\u5bb9\u5668\u5377\u4e2d\u3002<\/p>\n<pre><wbr \/>$ sudo docker run --volumes-from dbdata2 -v $(pwd):\/backup busybox tar xvf\r\n\/backup\/backup.tar<\/pre>\n<\/div>\n<div><\/div>\n<div>\n<h1>8. Docker \u4e2d\u7684\u7f51\u7edc\u529f\u80fd\u4ecb\u7ecd<\/h1>\n<p>Docker \u5141\u8bb8\u901a\u8fc7\u5916\u90e8\u8bbf\u95ee\u5bb9\u5668\u6216\u5bb9\u5668\u4e92\u8054\u7684\u65b9\u5f0f\u6765\u63d0\u4f9b\u7f51\u7edc\u670d\u52a1\u3002<\/p>\n<\/div>\n<div>\n<h2><\/h2>\n<h2>8.1. \u5916\u90e8\u8bbf\u95ee\u5bb9\u5668<\/h2>\n<p>\u5bb9\u5668\u4e2d\u53ef\u4ee5\u8fd0\u884c\u4e00\u4e9b\u7f51\u7edc\u5e94\u7528\uff0c\u8981\u8ba9\u5916\u90e8\u4e5f\u53ef\u4ee5\u8bbf\u95ee\u8fd9\u4e9b\u5e94\u7528\uff0c\u53ef\u4ee5\u901a\u8fc7\u00a0-P\u00a0\u6216\u00a0-p\u00a0\u53c2\u6570\u6765\u6307\u5b9a\u7aef\u53e3\u6620\u5c04\u3002<\/p>\n<p>\u5f53\u4f7f\u7528 -P \u6807\u8bb0\u65f6\uff0cDocker \u4f1a\u968f\u673a\u6620\u5c04\u4e00\u4e2a\u00a049000~49900\u00a0\u7684\u7aef\u53e3\u5230\u5185\u90e8\u5bb9\u5668\u5f00\u653e\u7684\u7f51\u7edc\u7aef\u53e3\u3002<\/p>\n<p>\u4f7f\u7528\u00a0docker ps\u00a0\u53ef\u4ee5\u770b\u5230\uff0c\u672c\u5730\u4e3b\u673a\u7684 49155 \u88ab\u6620\u5c04\u5230\u4e86\u5bb9\u5668\u7684 5000 \u7aef\u53e3\u3002\u6b64\u65f6\u8bbf\u95ee\u672c\u673a\u7684 49115 \u7aef\u53e3\u5373\u53ef\u8bbf\u95ee\u5bb9\u5668\u5185 web \u5e94\u7528\u63d0\u4f9b\u7684\u754c\u9762\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d -P training\/webapp python app.py\r\n$ sudo docker ps -l\r\nCONTAINER ID  IMAGE                   COMMAND       CREATED        STATUS        PORTS                    NAMES\r\nbc533791f3f5  training\/webapp:latest  python app.py 5 seconds ago  Up 2 seconds  0.0.0.0:49155-&gt;5000\/tcp  nostalgic_morse\r\n<\/pre>\n<p>\u540c\u6837\u7684\uff0c\u53ef\u4ee5\u901a\u8fc7\u00a0docker logs\u00a0\u547d\u4ee4\u6765\u67e5\u770b\u5e94\u7528\u7684\u4fe1\u606f\u3002<\/p>\n<pre><wbr \/>$ sudo docker logs -f nostalgic_morse\r\n* Running on http:\/\/0.0.0.0:5000\/\r\n10.0.2.2 - - [23\/May\/2014 20:16:31] \"GET \/ HTTP\/1.1\" 200 -\r\n10.0.2.2 - - [23\/May\/2014 20:16:31] \"GET \/favicon.ico HTTP\/1.1\" 404 -\r\n<\/pre>\n<p>-p\uff08\u5c0f\u5199\u7684\uff09\u5219\u53ef\u4ee5\u6307\u5b9a\u8981\u6620\u5c04\u7684\u7aef\u53e3\uff0c\u5e76\u4e14\uff0c\u5728\u4e00\u4e2a\u6307\u5b9a\u7aef\u53e3\u4e0a\u53ea\u53ef\u4ee5\u7ed1\u5b9a\u4e00\u4e2a\u5bb9\u5668\u3002\u652f\u6301\u7684\u683c\u5f0f\u6709ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort\u3002<\/p>\n<h3>\u6620\u5c04\u6240\u6709\u63a5\u53e3\u5730\u5740<\/h3>\n<p>\u4f7f\u7528\u00a0hostPort:containerPort\u00a0\u683c\u5f0f\u672c\u5730\u7684 5000 \u7aef\u53e3\u6620\u5c04\u5230\u5bb9\u5668\u7684 5000 \u7aef\u53e3\uff0c\u53ef\u4ee5\u6267\u884c<\/p>\n<pre><wbr \/>$ sudo docker run -d -p 5000:5000 training\/webapp python app.py\r\n<\/pre>\n<p>\u6b64\u65f6\u9ed8\u8ba4\u4f1a\u7ed1\u5b9a\u672c\u5730\u6240\u6709\u63a5\u53e3\u4e0a\u7684\u6240\u6709\u5730\u5740\u3002<\/p>\n<h3>\u6620\u5c04\u5230\u6307\u5b9a\u5730\u5740\u7684\u6307\u5b9a\u7aef\u53e3<\/h3>\n<p>\u53ef\u4ee5\u4f7f\u7528\u00a0ip:hostPort:containerPort\u00a0\u683c\u5f0f\u6307\u5b9a\u6620\u5c04\u4f7f\u7528\u4e00\u4e2a\u7279\u5b9a\u5730\u5740\uff0c\u6bd4\u5982 localhost \u5730\u5740 127.0.0.1<\/p>\n<pre><wbr \/>$ sudo docker run -d -p 127.0.0.1:5000:5000 training\/webapp python app.py\r\n<\/pre>\n<h3>\u6620\u5c04\u5230\u6307\u5b9a\u5730\u5740\u7684\u4efb\u610f\u7aef\u53e3<\/h3>\n<p>\u4f7f\u7528\u00a0ip::containerPort\u00a0\u7ed1\u5b9a localhost \u7684\u4efb\u610f\u7aef\u53e3\u5230\u5bb9\u5668\u7684 5000 \u7aef\u53e3\uff0c\u672c\u5730\u4e3b\u673a\u4f1a\u81ea\u52a8\u5206\u914d\u4e00\u4e2a\u7aef\u53e3\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d -p 127.0.0.1::5000 training\/webapp python app.py\r\n<\/pre>\n<p>\u8fd8\u53ef\u4ee5\u4f7f\u7528 udp \u6807\u8bb0\u6765\u6307\u5b9a udp \u7aef\u53e3<\/p>\n<pre><wbr \/>$ sudo docker run -d -p 127.0.0.1:5000:5000\/udp training\/webapp python app.py\r\n<\/pre>\n<h3>\u67e5\u770b\u6620\u5c04\u7aef\u53e3\u914d\u7f6e<\/h3>\n<p>\u4f7f\u7528\u00a0docker port\u00a0\u6765\u67e5\u770b\u5f53\u524d\u6620\u5c04\u7684\u7aef\u53e3\u914d\u7f6e\uff0c\u4e5f\u53ef\u4ee5\u67e5\u770b\u5230\u7ed1\u5b9a\u7684\u5730\u5740<\/p>\n<pre><wbr \/>$ docker port nostalgic_morse 5000\r\n127.0.0.1:49155.\r\n<\/pre>\n<p>\u6ce8\u610f\uff1a<\/p>\n<ul>\n<li>\u5bb9\u5668\u6709\u81ea\u5df1\u7684\u5185\u90e8\u7f51\u7edc\u548c ip \u5730\u5740\uff08\u4f7f\u7528\u00a0docker inspect\u00a0\u53ef\u4ee5\u83b7\u53d6\u6240\u6709\u7684\u53d8\u91cf\uff0cDocker \u8fd8\u53ef\u4ee5\u6709\u4e00\u4e2a\u53ef\u53d8\u7684\u7f51\u7edc\u914d\u7f6e\u3002\uff09<\/li>\n<li>-p \u6807\u8bb0\u53ef\u4ee5\u591a\u6b21\u4f7f\u7528\u6765\u7ed1\u5b9a\u591a\u4e2a\u7aef\u53e3<\/li>\n<\/ul>\n<p>\u4f8b\u5982<\/p>\n<pre><wbr \/>$ sudo docker run -d -p 5000:5000  -p 3000:80 training\/webapp python app.py<\/pre>\n<\/div>\n<div><\/div>\n<div>\n<h2>8.2. \u5bb9\u5668\u4e92\u8054<\/h2>\n<p>\u5bb9\u5668\u7684\u8fde\u63a5\uff08linking\uff09\u7cfb\u7edf\u662f\u9664\u4e86\u7aef\u53e3\u6620\u5c04\u5916\uff0c\u53e6\u4e00\u79cd\u8ddf\u5bb9\u5668\u4e2d\u5e94\u7528\u4ea4\u4e92\u7684\u65b9\u5f0f\u3002<\/p>\n<p>\u8be5\u7cfb\u7edf\u4f1a\u5728\u6e90\u548c\u63a5\u6536\u5bb9\u5668\u4e4b\u95f4\u521b\u5efa\u4e00\u4e2a\u96a7\u9053\uff0c\u63a5\u6536\u5bb9\u5668\u53ef\u4ee5\u770b\u5230\u6e90\u5bb9\u5668\u6307\u5b9a\u7684\u4fe1\u606f\u3002<\/p>\n<h3>\u81ea\u5b9a\u4e49\u5bb9\u5668\u547d\u540d<\/h3>\n<p>\u8fde\u63a5\u7cfb\u7edf\u4f9d\u636e\u5bb9\u5668\u7684\u540d\u79f0\u6765\u6267\u884c\u3002\u56e0\u6b64\uff0c\u9996\u5148\u9700\u8981\u81ea\u5b9a\u4e49\u4e00\u4e2a\u597d\u8bb0\u7684\u5bb9\u5668\u547d\u540d\u3002<\/p>\n<p>\u867d\u7136\u5f53\u521b\u5efa\u5bb9\u5668\u7684\u65f6\u5019\uff0c\u7cfb\u7edf\u9ed8\u8ba4\u4f1a\u5206\u914d\u4e00\u4e2a\u540d\u5b57\u3002\u81ea\u5b9a\u4e49\u547d\u540d\u5bb9\u5668\u67092\u4e2a\u597d\u5904\uff1a<\/p>\n<ul>\n<li>\u81ea\u5b9a\u4e49\u7684\u547d\u540d\uff0c\u6bd4\u8f83\u597d\u8bb0\uff0c\u6bd4\u5982\u4e00\u4e2aweb\u5e94\u7528\u5bb9\u5668\u6211\u4eec\u53ef\u4ee5\u7ed9\u5b83\u8d77\u540d\u53ebweb<\/li>\n<li>\u5f53\u8981\u8fde\u63a5\u5176\u4ed6\u5bb9\u5668\u65f6\u5019\uff0c\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u6709\u7528\u7684\u53c2\u8003\u70b9\uff0c\u6bd4\u5982\u8fde\u63a5web\u5bb9\u5668\u5230db\u5bb9\u5668<\/li>\n<\/ul>\n<p>\u4f7f\u7528\u00a0&#8211;name\u00a0\u6807\u8bb0\u53ef\u4ee5\u4e3a\u5bb9\u5668\u81ea\u5b9a\u4e49\u547d\u540d\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d -P --name web training\/webapp python app.py\r\n<\/pre>\n<p>\u4f7f\u7528\u00a0docker ps\u00a0\u6765\u9a8c\u8bc1\u8bbe\u5b9a\u7684\u547d\u540d\u3002<\/p>\n<pre><wbr \/>$ sudo docker ps -l\r\nCONTAINER ID  IMAGE                  COMMAND        CREATED       STATUS       PORTS                    NAMES\r\naed84ee21bde  training\/webapp:latest python app.py  12 hours ago  Up 2 seconds 0.0.0.0:49154-&gt;5000\/tcp  web\r\n<\/pre>\n<p>\u4e5f\u53ef\u4ee5\u4f7f\u7528\u00a0docker inspect\u00a0\u6765\u67e5\u770b\u5bb9\u5668\u7684\u540d\u5b57<\/p>\n<pre><wbr \/>$ sudo docker inspect -f \"{{ .Name }}\" aed84ee21bde\r\n\/web\r\n<\/pre>\n<p>\u6ce8\u610f\uff1a\u5bb9\u5668\u7684\u540d\u79f0\u662f\u552f\u4e00\u7684\u3002\u5982\u679c\u5df2\u7ecf\u547d\u540d\u4e86\u4e00\u4e2a\u53eb web \u7684\u5bb9\u5668\uff0c\u5f53\u4f60\u8981\u518d\u6b21\u4f7f\u7528 web \u8fd9\u4e2a\u540d\u79f0\u7684\u65f6\u5019\uff0c\u9700\u8981\u5148\u7528docker rm\u00a0\u6765\u5220\u9664\u4e4b\u524d\u521b\u5efa\u7684\u540c\u540d\u5bb9\u5668\u3002<\/p>\n<p>\u5728\u6267\u884c\u00a0docker run\u00a0\u7684\u65f6\u5019\u5982\u679c\u6dfb\u52a0\u00a0&#8211;rm\u00a0\u6807\u8bb0\uff0c\u5219\u5bb9\u5668\u5728\u7ec8\u6b62\u540e\u4f1a\u7acb\u523b\u5220\u9664\u3002\u6ce8\u610f\uff0c&#8211;rm\u00a0\u548c\u00a0-d\u00a0\u53c2\u6570\u4e0d\u80fd\u540c\u65f6\u4f7f\u7528\u3002<\/p>\n<h3>\u5bb9\u5668\u4e92\u8054<\/h3>\n<p>\u4f7f\u7528\u00a0&#8211;link\u00a0\u53c2\u6570\u53ef\u4ee5\u8ba9\u5bb9\u5668\u4e4b\u95f4\u5b89\u5168\u7684\u8fdb\u884c\u4ea4\u4e92\u3002<\/p>\n<p>\u4e0b\u9762\u5148\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6570\u636e\u5e93\u5bb9\u5668\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -d --name db training\/postgres\r\n<\/pre>\n<p>\u5220\u9664\u4e4b\u524d\u521b\u5efa\u7684 web \u5bb9\u5668<\/p>\n<pre><wbr \/>$ docker rm -f web\r\n<\/pre>\n<p>\u7136\u540e\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 web \u5bb9\u5668\uff0c\u5e76\u5c06\u5b83\u8fde\u63a5\u5230 db \u5bb9\u5668<\/p>\n<pre><wbr \/>$ sudo docker run -d -P --name web --link db:db training\/webapp python app.py\r\n<\/pre>\n<p>\u6b64\u65f6\uff0cdb \u5bb9\u5668\u548c web \u5bb9\u5668\u5efa\u7acb\u4e92\u8054\u5173\u7cfb\u3002<\/p>\n<p><wbr \/>&#8211;link\u00a0\u53c2\u6570\u7684\u683c\u5f0f\u4e3a\u00a0&#8211;link name:alias\uff0c\u5176\u4e2d\u00a0name\u00a0\u662f\u8981\u94fe\u63a5\u7684\u5bb9\u5668\u7684\u540d\u79f0\uff0calias\u00a0\u662f\u8fd9\u4e2a\u8fde\u63a5\u7684\u522b\u540d\u3002<\/p>\n<p>\u4f7f\u7528\u00a0docker ps\u00a0\u6765\u67e5\u770b\u5bb9\u5668\u7684\u8fde\u63a5<\/p>\n<pre><wbr \/>$ docker ps\r\nCONTAINER ID  IMAGE                     COMMAND               CREATED             STATUS             PORTS                    NAMES\r\n349169744e49  training\/postgres:latest  su postgres -c '\/usr  About a minute ago  Up About a minute  5432\/tcp                 db, web\/db\r\naed84ee21bde  training\/webapp:latest    python app.py         16 hours ago        Up 2 minutes       0.0.0.0:49154-&gt;5000\/tcp  web\r\n<\/pre>\n<p>\u53ef\u4ee5\u770b\u5230\u81ea\u5b9a\u4e49\u547d\u540d\u7684\u5bb9\u5668\uff0cdb \u548c web\uff0cdb \u5bb9\u5668\u7684 names \u5217\u6709 db \u4e5f\u6709 web\/db\u3002\u8fd9\u8868\u793a web \u5bb9\u5668\u94fe\u63a5\u5230 db \u5bb9\u5668\uff0cweb \u5bb9\u5668\u5c06\u88ab\u5141\u8bb8\u8bbf\u95ee db \u5bb9\u5668\u7684\u4fe1\u606f\u3002<\/p>\n<p>Docker \u5728\u4e24\u4e2a\u4e92\u8054\u7684\u5bb9\u5668\u4e4b\u95f4\u521b\u5efa\u4e86\u4e00\u4e2a\u5b89\u5168\u96a7\u9053\uff0c\u800c\u4e14\u4e0d\u7528\u6620\u5c04\u5b83\u4eec\u7684\u7aef\u53e3\u5230\u5bbf\u4e3b\u4e3b\u673a\u4e0a\u3002\u5728\u542f\u52a8 db \u5bb9\u5668\u7684\u65f6\u5019\u5e76\u6ca1\u6709\u4f7f\u7528\u00a0-p\u00a0\u548c\u00a0-P\u00a0\u6807\u8bb0\uff0c\u4ece\u800c\u907f\u514d\u4e86\u66b4\u9732\u6570\u636e\u5e93\u7aef\u53e3\u5230\u5916\u90e8\u7f51\u7edc\u4e0a\u3002<\/p>\n<p>Docker \u901a\u8fc7 2 \u79cd\u65b9\u5f0f\u4e3a\u5bb9\u5668\u516c\u5f00\u8fde\u63a5\u4fe1\u606f\uff1a<\/p>\n<ul>\n<li>\u73af\u5883\u53d8\u91cf<\/li>\n<li>\u66f4\u65b0\u00a0\/etc\/hosts\u00a0\u6587\u4ef6<\/li>\n<\/ul>\n<p>\u4f7f\u7528\u00a0env\u00a0\u547d\u4ee4\u6765\u67e5\u770b web \u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf<\/p>\n<pre><wbr \/>$ sudo docker run --rm --name web2 --link db:db training\/webapp env\r\n. . .\r\nDB_NAME=\/web2\/db\r\nDB_PORT=tcp:\/\/172.17.0.5:5432\r\nDB_PORT_5000_TCP=tcp:\/\/172.17.0.5:5432\r\nDB_PORT_5000_TCP_PROTO=tcp\r\nDB_PORT_5000_TCP_PORT=5432\r\nDB_PORT_5000_TCP_ADDR=172.17.0.5\r\n. . .\r\n<\/pre>\n<p>\u5176\u4e2d DB_ \u5f00\u5934\u7684\u73af\u5883\u53d8\u91cf\u662f\u4f9b web \u5bb9\u5668\u8fde\u63a5 db \u5bb9\u5668\u4f7f\u7528\uff0c\u524d\u7f00\u91c7\u7528\u5927\u5199\u7684\u8fde\u63a5\u522b\u540d\u3002<\/p>\n<p>\u9664\u4e86\u73af\u5883\u53d8\u91cf\uff0cDocker \u8fd8\u6dfb\u52a0 host \u4fe1\u606f\u5230\u7236\u5bb9\u5668\u7684\u00a0\/etc\/hosts\u00a0\u7684\u6587\u4ef6\u3002\u4e0b\u9762\u662f\u7236\u5bb9\u5668 web \u7684 hosts \u6587\u4ef6<\/p>\n<pre><wbr \/>$ sudo docker run -t -i --rm --link db:db training\/webapp \/bin\/bash\r\nroot@aed84ee21bde:\/opt\/webapp# cat \/etc\/hosts\r\n172.17.0.7  aed84ee21bde\r\n. . .\r\n172.17.0.5  db\r\n<\/pre>\n<p>\u8fd9\u91cc\u6709 2 \u4e2a hosts\uff0c\u7b2c\u4e00\u4e2a\u662f web \u5bb9\u5668\uff0cweb \u5bb9\u5668\u7528 id \u4f5c\u4e3a\u4ed6\u7684\u4e3b\u673a\u540d\uff0c\u7b2c\u4e8c\u4e2a\u662f db \u5bb9\u5668\u7684 ip \u548c\u4e3b\u673a\u540d\u3002 \u53ef\u4ee5\u5728 web \u5bb9\u5668\u4e2d\u5b89\u88c5 ping \u547d\u4ee4\u6765\u6d4b\u8bd5\u8ddfdb\u5bb9\u5668\u7684\u8fde\u901a\u3002<\/p>\n<pre><wbr \/>root@aed84ee21bde:\/opt\/webapp# apt-get install -yqq inetutils-ping\r\nroot@aed84ee21bde:\/opt\/webapp# ping db\r\nPING db (172.17.0.5): 48 da<wbr \/>ta bytes\r\n56 bytes from 172.17.0.5: icmp_seq=0 ttl=64 time=0.267 ms\r\n56 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=0.250 ms\r\n56 bytes from 172.17.0.5: icmp_seq=2 ttl=64 time=0.256 ms\r\n<\/pre>\n<p>\u7528 ping \u6765\u6d4b\u8bd5db\u5bb9\u5668\uff0c\u5b83\u4f1a\u89e3\u6790\u6210\u00a0172.17.0.5\u3002 *\u6ce8\u610f\uff1a\u5b98\u65b9\u7684 ubuntu \u955c\u50cf\u9ed8\u8ba4\u6ca1\u6709\u5b89\u88c5 ping\uff0c\u9700\u8981\u81ea\u884c\u5b89\u88c5\u3002<\/p>\n<p>\u7528\u6237\u53ef\u4ee5\u94fe\u63a5\u591a\u4e2a\u5b50\u5bb9\u5668\u5230\u7236\u5bb9\u5668\uff0c\u6bd4\u5982\u53ef\u4ee5\u94fe\u63a5\u591a\u4e2a web \u5230 db \u5bb9\u5668\u4e0a\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h1>9. \u9ad8\u7ea7\u7f51\u7edc\u914d\u7f6e<\/h1>\n<p>\u672c\u7ae0\u5c06\u4ecb\u7ecd Docker \u7684\u4e00\u4e9b\u9ad8\u7ea7\u7f51\u7edc\u914d\u7f6e\u548c\u9009\u9879\u3002<\/p>\n<p>\u5f53 Docker \u542f\u52a8\u65f6\uff0c\u4f1a\u81ea\u52a8\u5728\u4e3b\u673a\u4e0a\u521b\u5efa\u4e00\u4e2a\u00a0docker0\u00a0\u865a\u62df\u7f51\u6865\uff0c\u5b9e\u9645\u4e0a\u662f Linux \u7684\u4e00\u4e2a bridge\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u8f6f\u4ef6\u4ea4\u6362\u673a\u3002\u5b83\u4f1a\u5728\u6302\u8f7d\u5230\u5b83\u7684\u7f51\u53e3\u4e4b\u95f4\u8fdb\u884c\u8f6c\u53d1\u3002<\/p>\n<p>\u540c\u65f6\uff0cDocker \u968f\u673a\u5206\u914d\u4e00\u4e2a\u672c\u5730\u672a\u5360\u7528\u7684\u79c1\u6709\u7f51\u6bb5\uff08\u5728\u00a0<a href=\"http:\/\/tools.ietf.org\/html\/rfc1918\" target=\"_blank\" rel=\"nofollow noopener\">RFC1918<\/a>\u00a0\u4e2d\u5b9a\u4e49\uff09\u4e2d\u7684\u4e00\u4e2a\u5730\u5740\u7ed9\u00a0docker0\u00a0\u63a5\u53e3\u3002\u6bd4\u5982\u5178\u578b\u7684\u00a0172.17.42.1\uff0c\u63a9\u7801\u4e3a\u00a0255.255.0.0\u3002\u6b64\u540e\u542f\u52a8\u7684\u5bb9\u5668\u5185\u7684\u7f51\u53e3\u4e5f\u4f1a\u81ea\u52a8\u5206\u914d\u4e00\u4e2a\u540c\u4e00\u7f51\u6bb5\uff08172.17.0.0\/16\uff09\u7684\u5730\u5740\u3002<\/p>\n<p>\u5f53\u521b\u5efa\u4e00\u4e2a Docker \u5bb9\u5668\u7684\u65f6\u5019\uff0c\u540c\u65f6\u4f1a\u521b\u5efa\u4e86\u4e00\u5bf9\u00a0veth pair\u00a0\u63a5\u53e3\uff08\u5f53\u6570\u636e\u5305\u53d1\u9001\u5230\u4e00\u4e2a\u63a5\u53e3\u65f6\uff0c\u53e6\u5916\u4e00\u4e2a\u63a5\u53e3\u4e5f\u53ef\u4ee5\u6536\u5230\u76f8\u540c\u7684\u6570\u636e\u5305\uff09\u3002\u8fd9\u5bf9\u63a5\u53e3\u4e00\u7aef\u5728\u5bb9\u5668\u5185\uff0c\u5373\u00a0eth0\uff1b\u53e6\u4e00\u7aef\u5728\u672c\u5730\u5e76\u88ab\u6302\u8f7d\u5230\u00a0docker0\u00a0\u7f51\u6865\uff0c\u540d\u79f0\u4ee5\u00a0veth\u00a0\u5f00\u5934\uff08\u4f8b\u5982\u00a0vethAQI2QT\uff09\u3002\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u4e3b\u673a\u53ef\u4ee5\u8ddf\u5bb9\u5668\u901a\u4fe1\uff0c\u5bb9\u5668\u4e4b\u95f4\u4e5f\u53ef\u4ee5\u76f8\u4e92\u901a\u4fe1\u3002Docker \u5c31\u521b\u5efa\u4e86\u5728\u4e3b\u673a\u548c\u6240\u6709\u5bb9\u5668\u4e4b\u95f4\u4e00\u4e2a\u865a\u62df\u5171\u4eab\u7f51\u7edc\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\u7684\u90e8\u5206\u5c06\u4ecb\u7ecd\u5728\u4e00\u4e9b\u573a\u666f\u4e2d\uff0cDocker \u6240\u6709\u7684\u7f51\u7edc\u5b9a\u5236\u914d\u7f6e\u3002\u4ee5\u53ca\u901a\u8fc7 Linux \u547d\u4ee4\u6765\u8c03\u6574\u3001\u8865\u5145\u3001\u751a\u81f3\u66ff\u6362 Docker \u9ed8\u8ba4\u7684\u7f51\u7edc\u914d\u7f6e\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>9.1. \u5feb\u901f\u914d\u7f6e\u6307\u5357<\/h2>\n<p>\u4e0b\u9762\u662f\u4e00\u4e2a\u8ddf Docker \u7f51\u7edc\u76f8\u5173\u7684\u547d\u4ee4\u5217\u8868\u3002<\/p>\n<p>\u5176\u4e2d\u6709\u4e9b\u547d\u4ee4\u9009\u9879\u53ea\u6709\u5728 Docker \u670d\u52a1\u542f\u52a8\u7684\u65f6\u5019\u624d\u80fd\u914d\u7f6e\uff0c\u800c\u4e14\u4e0d\u80fd\u9a6c\u4e0a\u751f\u6548\u3002<\/p>\n<ul>\n<li><wbr \/>-b BRIDGE or &#8211;bridge=BRIDGE\u00a0&#8211;\u6307\u5b9a\u5bb9\u5668\u6302\u8f7d\u7684\u7f51\u6865<\/li>\n<li><wbr \/>&#8211;bip=CIDR\u00a0&#8211;\u5b9a\u5236 docker0 \u7684\u63a9\u7801<\/li>\n<li><wbr \/>-H SOCKET&#8230; or &#8211;host=SOCKET&#8230;\u00a0&#8211;Docker \u670d\u52a1\u7aef\u63a5\u6536\u547d\u4ee4\u7684\u901a\u9053<\/li>\n<li><wbr \/>&#8211;icc=true|false\u00a0&#8211;\u662f\u5426\u652f\u6301\u5bb9\u5668\u4e4b\u95f4\u8fdb\u884c\u901a\u4fe1<\/li>\n<li><wbr \/>&#8211;ip-forward=true|false\u00a0&#8211;\u8bf7\u770b\u4e0b\u6587\u5bb9\u5668\u4e4b\u95f4\u7684\u901a\u4fe1<\/li>\n<li><wbr \/>&#8211;iptables=true|false\u00a0&#8211;\u7981\u6b62 Docker \u6dfb\u52a0 iptables \u89c4\u5219<\/li>\n<li><wbr \/>&#8211;mtu=BYTES\u00a0&#8211;\u5bb9\u5668\u7f51\u7edc\u4e2d\u7684 MTU<\/li>\n<\/ul>\n<p>\u4e0b\u97622\u4e2a\u547d\u4ee4\u9009\u9879\u65e2\u53ef\u4ee5\u5728\u542f\u52a8\u670d\u52a1\u65f6\u6307\u5b9a\uff0c\u4e5f\u53ef\u4ee5 Docker \u5bb9\u5668\u542f\u52a8\uff08docker run\uff09\u65f6\u5019\u6307\u5b9a\u3002\u5728 Docker \u670d\u52a1\u542f\u52a8\u7684\u65f6\u5019\u6307\u5b9a\u5219\u4f1a\u6210\u4e3a\u9ed8\u8ba4\u503c\uff0c\u540e\u9762\u6267\u884cdocker run\u00a0\u65f6\u53ef\u4ee5\u8986\u76d6\u8bbe\u7f6e\u7684\u9ed8\u8ba4\u503c\u3002<\/p>\n<ul>\n<li><wbr \/>&#8211;dns=IP_ADDRESS&#8230;\u00a0&#8211;\u4f7f\u7528\u6307\u5b9a\u7684DNS\u670d\u52a1\u5668<\/li>\n<li><wbr \/>&#8211;dns-search=DOMAIN&#8230;\u00a0&#8211;\u6307\u5b9aDNS\u641c\u7d22\u57df<\/li>\n<\/ul>\n<p>\u6700\u540e\u8fd9\u4e9b\u9009\u9879\u53ea\u6709\u5728\u00a0docker run\u00a0\u6267\u884c\u65f6\u4f7f\u7528\uff0c\u56e0\u4e3a\u5b83\u662f\u9488\u5bf9\u5bb9\u5668\u7684\u7279\u6027\u5185\u5bb9\u3002<\/p>\n<ul>\n<li><wbr \/>-h HOSTNAME or &#8211;hostname=HOSTNAME\u00a0&#8211;\u914d\u7f6e\u5bb9\u5668\u4e3b\u673a\u540d<\/li>\n<li><wbr \/>&#8211;link=CONTAINER_NAME:ALIAS\u00a0&#8211;\u6dfb\u52a0\u5230\u53e6\u4e00\u4e2a\u5bb9\u5668\u7684\u8fde\u63a5<\/li>\n<li><wbr \/>&#8211;net=bridge|none|container:NAME_or_ID|host\u00a0&#8211;\u914d\u7f6e\u5bb9\u5668\u7684\u6865\u63a5\u6a21\u5f0f<\/li>\n<li><wbr \/>-p SPEC or &#8211;publish=SPEC\u00a0&#8211;\u6620\u5c04\u5bb9\u5668\u7aef\u53e3\u5230\u5bbf\u4e3b\u4e3b\u673a<\/li>\n<li><wbr \/>-P or &#8211;publish-all=true|false\u00a0&#8211;\u6620\u5c04\u5bb9\u5668\u6240\u6709\u7aef\u53e3\u5230\u5bbf\u4e3b\u4e3b\u673a<\/li>\n<\/ul>\n<\/div>\n<div><\/div>\n<div>\n<h2>9.2. \u914d\u7f6e DNS<\/h2>\n<p>Docker \u6ca1\u6709\u4e3a\u6bcf\u4e2a\u5bb9\u5668\u4e13\u95e8\u5b9a\u5236\u955c\u50cf\uff0c\u90a3\u4e48\u600e\u4e48\u81ea\u5b9a\u4e49\u914d\u7f6e\u5bb9\u5668\u7684\u4e3b\u673a\u540d\u548c DNS \u914d\u7f6e\u5462\uff1f \u79d8\u8bc0\u5c31\u662f\u5b83\u5229\u7528\u865a\u62df\u6587\u4ef6\u6765\u6302\u8f7d\u5230\u6765\u5bb9\u5668\u7684 3 \u4e2a\u76f8\u5173\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<p>\u5728\u5bb9\u5668\u4e2d\u4f7f\u7528 mount \u547d\u4ee4\u53ef\u4ee5\u770b\u5230\u6302\u8f7d\u4fe1\u606f\uff1a<\/p>\n<pre><wbr \/>$ mount\r\n...\r\n\/dev\/disk\/by-uuid\/1fec...ebdf on \/etc\/hostname type ext4 ...\r\n\/dev\/disk\/by-uuid\/1fec...ebdf on \/etc\/hosts type ext4 ...\r\ntmpfs on \/etc\/resolv.conf type tmpfs ...\r\n...\r\n<\/pre>\n<p>\u8fd9\u79cd\u673a\u5236\u53ef\u4ee5\u8ba9\u5bbf\u4e3b\u4e3b\u673a DNS \u4fe1\u606f\u53d1\u751f\u66f4\u65b0\u540e\uff0c\u6240\u6709 Docker \u5bb9\u5668\u7684 dns \u914d\u7f6e\u901a\u8fc7\u00a0\/etc\/resolv.conf\u00a0\u6587\u4ef6\u7acb\u523b\u5f97\u5230\u66f4\u65b0\u3002<\/p>\n<p>\u5982\u679c\u7528\u6237\u60f3\u8981\u624b\u52a8\u6307\u5b9a\u5bb9\u5668\u7684\u914d\u7f6e\uff0c\u53ef\u4ee5\u5229\u7528\u4e0b\u9762\u7684\u9009\u9879\u3002<\/p>\n<p><wbr \/>-h HOSTNAME or &#8211;hostname=HOSTNAME\u00a0\u8bbe\u5b9a\u5bb9\u5668\u7684\u4e3b\u673a\u540d\uff0c\u5b83\u4f1a\u88ab\u5199\u5230\u5bb9\u5668\u5185\u7684\u00a0\/etc\/hostname\u00a0\u548c\/etc\/hosts\u3002\u4f46\u5b83\u5728\u5bb9\u5668\u5916\u90e8\u770b\u4e0d\u5230\uff0c\u65e2\u4e0d\u4f1a\u5728\u00a0docker ps\u00a0\u4e2d\u663e\u793a\uff0c\u4e5f\u4e0d\u4f1a\u5728\u5176\u4ed6\u7684\u5bb9\u5668\u7684\u00a0\/etc\/hosts\u00a0\u770b\u5230\u3002<\/p>\n<p><wbr \/>&#8211;link=CONTAINER_NAME:ALIAS\u00a0\u9009\u9879\u4f1a\u5728\u521b\u5efa\u5bb9\u5668\u7684\u65f6\u5019\uff0c\u6dfb\u52a0\u4e00\u4e2a\u5176\u4ed6\u5bb9\u5668\u7684\u4e3b\u673a\u540d\u5230\u00a0\/etc\/hosts\u00a0\u6587\u4ef6\u4e2d\uff0c\u8ba9\u65b0\u5bb9\u5668\u7684\u8fdb\u7a0b\u53ef\u4ee5\u4f7f\u7528\u4e3b\u673a\u540d ALIAS \u5c31\u53ef\u4ee5\u8fde\u63a5\u5b83\u3002<\/p>\n<p><wbr \/>&#8211;dns=IP_ADDRESS\u00a0\u6dfb\u52a0 DNS \u670d\u52a1\u5668\u5230\u5bb9\u5668\u7684\/etc\/resolv.conf\u00a0\u4e2d\uff0c\u8ba9\u5bb9\u5668\u7528\u8fd9\u4e2a\u670d\u52a1\u5668\u6765\u89e3\u6790\u6240\u6709\u4e0d\u5728\/etc\/hosts\u00a0\u4e2d\u7684\u4e3b\u673a\u540d\u3002<\/p>\n<p><wbr \/>&#8211;dns-search=DOMAIN\u00a0\u8bbe\u5b9a\u5bb9\u5668\u7684\u641c\u7d22\u57df\uff0c\u5f53\u8bbe\u5b9a\u641c\u7d22\u57df\u4e3a\u00a0.example.com\u00a0\u65f6\uff0c\u5728\u641c\u7d22\u4e00\u4e2a\u540d\u4e3a host \u7684\u4e3b\u673a\u65f6\uff0cDNS \u4e0d\u4ec5\u641c\u7d22host\uff0c\u8fd8\u4f1a\u641c\u7d22\u00a0host.example.com\u3002 \u6ce8\u610f\uff1a\u5982\u679c\u6ca1\u6709\u4e0a\u8ff0\u6700\u540e 2 \u4e2a\u9009\u9879\uff0cDocker \u4f1a\u9ed8\u8ba4\u7528\u4e3b\u673a\u4e0a\u7684\u00a0\/etc\/resolv.conf\u00a0\u6765\u914d\u7f6e\u5bb9\u5668\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>9.3. \u5bb9\u5668\u8bbf\u95ee\u63a7\u5236<\/h2>\n<p>\u5bb9\u5668\u7684\u8bbf\u95ee\u63a7\u5236\uff0c\u4e3b\u8981\u901a\u8fc7 Linux \u4e0a\u7684\u00a0iptables\u00a0\u9632\u706b\u5899\u6765\u8fdb\u884c\u7ba1\u7406\u548c\u5b9e\u73b0\u3002iptables\u00a0\u662f Linux \u4e0a\u9ed8\u8ba4\u7684\u9632\u706b\u5899\u8f6f\u4ef6\uff0c\u5728\u5927\u90e8\u5206\u53d1\u884c\u7248\u4e2d\u90fd\u81ea\u5e26\u3002<\/p>\n<h3>\u5bb9\u5668\u8bbf\u95ee\u5916\u90e8\u7f51\u7edc<\/h3>\n<p>\u5bb9\u5668\u8981\u60f3\u8bbf\u95ee\u5916\u90e8\u7f51\u7edc\uff0c\u9700\u8981\u672c\u5730\u7cfb\u7edf\u7684\u8f6c\u53d1\u652f\u6301\u3002\u5728Linux \u7cfb\u7edf\u4e2d\uff0c\u68c0\u67e5\u8f6c\u53d1\u662f\u5426\u6253\u5f00\u3002<\/p>\n<pre><wbr \/>$sysctl net.ipv4.ip_forward\r\nnet.ipv4.ip_forward = 1\r\n<\/pre>\n<p>\u5982\u679c\u4e3a 0\uff0c\u8bf4\u660e\u6ca1\u6709\u5f00\u542f\u8f6c\u53d1\uff0c\u5219\u9700\u8981\u624b\u52a8\u6253\u5f00\u3002<\/p>\n<pre><wbr \/>$sysctl -w net.ipv4.ip_forward=1\r\n<\/pre>\n<p>\u5982\u679c\u5728\u542f\u52a8 Docker \u670d\u52a1\u7684\u65f6\u5019\u8bbe\u5b9a\u00a0&#8211;ip-forward=true, Docker \u5c31\u4f1a\u81ea\u52a8\u8bbe\u5b9a\u7cfb\u7edf\u7684\u00a0ip_forward\u00a0\u53c2\u6570\u4e3a 1\u3002<\/p>\n<h3>\u5bb9\u5668\u4e4b\u95f4\u8bbf\u95ee<\/h3>\n<p>\u5bb9\u5668\u4e4b\u95f4\u76f8\u4e92\u8bbf\u95ee\uff0c\u9700\u8981\u4e24\u65b9\u9762\u7684\u652f\u6301\u3002<\/p>\n<ul>\n<li>\u5bb9\u5668\u7684\u7f51\u7edc\u62d3\u6251\u662f\u5426\u5df2\u7ecf\u4e92\u8054\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u6240\u6709\u5bb9\u5668\u90fd\u4f1a\u88ab\u8fde\u63a5\u5230\u00a0docker0\u00a0\u7f51\u6865\u4e0a\u3002<\/li>\n<li>\u672c\u5730\u7cfb\u7edf\u7684\u9632\u706b\u5899\u8f6f\u4ef6 &#8212;\u00a0iptables\u00a0\u662f\u5426\u5141\u8bb8\u901a\u8fc7\u3002<\/li>\n<\/ul>\n<h4>\u8bbf\u95ee\u6240\u6709\u7aef\u53e3<\/h4>\n<p>\u5f53\u542f\u52a8 Docker \u670d\u52a1\u65f6\u5019\uff0c\u9ed8\u8ba4\u4f1a\u6dfb\u52a0\u4e00\u6761\u8f6c\u53d1\u7b56\u7565\u5230 iptables \u7684 FORWARD \u94fe\u4e0a\u3002\u7b56\u7565\u4e3a\u901a\u8fc7\uff08ACCEPT\uff09\u8fd8\u662f\u7981\u6b62\uff08DROP\uff09\u53d6\u51b3\u4e8e\u914d\u7f6e&#8211;icc=true\uff08\u7f3a\u7701\u503c\uff09\u8fd8\u662f\u00a0&#8211;icc=false\u3002\u5f53\u7136\uff0c\u5982\u679c\u624b\u52a8\u6307\u5b9a\u00a0&#8211;iptables=false\u00a0\u5219\u4e0d\u4f1a\u6dfb\u52a0\u00a0iptables\u00a0\u89c4\u5219\u3002<\/p>\n<p>\u53ef\u89c1\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e0d\u540c\u5bb9\u5668\u4e4b\u95f4\u662f\u5141\u8bb8\u7f51\u7edc\u4e92\u901a\u7684\u3002\u5982\u679c\u4e3a\u4e86\u5b89\u5168\u8003\u8651\uff0c\u53ef\u4ee5\u5728\u00a0\/etc\/default\/docker\u00a0\u6587\u4ef6\u4e2d\u914d\u7f6e\u00a0DOCKER_OPTS=&#8211;icc=false\u00a0\u6765\u7981\u6b62\u5b83\u3002<\/p>\n<h4>\u8bbf\u95ee\u6307\u5b9a\u7aef\u53e3<\/h4>\n<p>\u5728\u901a\u8fc7\u00a0-icc=false\u00a0\u5173\u95ed\u7f51\u7edc\u8bbf\u95ee\u540e\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7\u00a0&#8211;link=CONTAINER_NAME:ALIAS\u00a0\u9009\u9879\u6765\u8bbf\u95ee\u5bb9\u5668\u7684\u5f00\u653e\u7aef\u53e3\u3002<\/p>\n<p>\u4f8b\u5982\uff0c\u5728\u542f\u52a8 Docker \u670d\u52a1\u65f6\uff0c\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u00a0icc=false &#8211;iptables=true\u00a0\u53c2\u6570\u6765\u5173\u95ed\u5141\u8bb8\u76f8\u4e92\u7684\u7f51\u7edc\u8bbf\u95ee\uff0c\u5e76\u8ba9 Docker \u53ef\u4ee5\u4fee\u6539\u7cfb\u7edf\u4e2d\u7684\u00a0iptables\u00a0\u89c4\u5219\u3002<\/p>\n<p>\u6b64\u65f6\uff0c\u7cfb\u7edf\u4e2d\u7684\u00a0iptables\u00a0\u89c4\u5219\u53ef\u80fd\u662f\u7c7b\u4f3c<\/p>\n<pre><wbr \/>$ sudo iptables -nL\r\n...\r\nChain FORWARD (policy ACCEPT)\r\ntarget     prot opt source               destination\r\nDROP       all  --  0.0.0.0\/0            0.0.0.0\/0\r\n...\r\n<\/pre>\n<p>\u4e4b\u540e\uff0c\u542f\u52a8\u5bb9\u5668\uff08docker run\uff09\u65f6\u4f7f\u7528\u00a0&#8211;link=CONTAINER_NAME:ALIAS\u00a0\u9009\u9879\u3002Docker \u4f1a\u5728\u00a0iptable\u00a0\u4e2d\u4e3a \u4e24\u4e2a\u5bb9\u5668\u5206\u522b\u6dfb\u52a0\u4e00\u6761\u00a0ACCEPT\u00a0\u89c4\u5219\uff0c\u5141\u8bb8\u76f8\u4e92\u8bbf\u95ee\u5f00\u653e\u7684\u7aef\u53e3\uff08\u53d6\u51b3\u4e8e Dockerfile \u4e2d\u7684 EXPOSE \u884c\uff09\u3002<\/p>\n<p>\u5f53\u6dfb\u52a0\u4e86\u00a0&#8211;link=CONTAINER_NAME:ALIAS\u00a0\u9009\u9879\u540e\uff0c\u6dfb\u52a0\u4e86\u00a0iptables\u00a0\u89c4\u5219\u3002<\/p>\n<pre><wbr \/>$ sudo iptables -nL\r\n...\r\nChain FORWARD (policy ACCEPT)\r\ntarget     prot opt source               destination\r\nACCEPT     tcp  --  172.17.0.2           172.17.0.3           tcp spt:80\r\nACCEPT     tcp  --  172.17.0.3           172.17.0.2           tcp dpt:80\r\nDROP       all  --  0.0.0.0\/0            0.0.0.0\/0\r\n<\/pre>\n<p>\u6ce8\u610f\uff1a&#8211;link=CONTAINER_NAME:ALIAS\u00a0\u4e2d\u7684\u00a0CONTAINER_NAME\u00a0\u76ee\u524d\u5fc5\u987b\u662f Docker \u5206\u914d\u7684\u540d\u5b57\uff0c\u6216\u4f7f\u7528\u00a0&#8211;name\u53c2\u6570\u6307\u5b9a\u7684\u540d\u5b57\u3002\u4e3b\u673a\u540d\u5219\u4e0d\u4f1a\u88ab\u8bc6\u522b\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>9.4. \u6620\u5c04\u5bb9\u5668\u7aef\u53e3\u5230\u5bbf\u4e3b\u4e3b\u673a\u7684\u5b9e\u73b0<\/h2>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5bb9\u5668\u53ef\u4ee5\u4e3b\u52a8\u8bbf\u95ee\u5230\u5916\u90e8\u7f51\u7edc\u7684\u8fde\u63a5\uff0c\u4f46\u662f\u5916\u90e8\u7f51\u7edc\u65e0\u6cd5\u8bbf\u95ee\u5230\u5bb9\u5668\u3002<\/p>\n<h3>\u5bb9\u5668\u8bbf\u95ee\u5916\u90e8\u5b9e\u73b0<\/h3>\n<p>\u5bb9\u5668\u6240\u6709\u5230\u5916\u90e8\u7f51\u7edc\u7684\u8fde\u63a5\uff0c\u6e90\u5730\u5740\u90fd\u4f1a\u88abNAT\u6210\u672c\u5730\u7cfb\u7edf\u7684IP\u5730\u5740\u3002\u8fd9\u662f\u4f7f\u7528\u00a0iptables\u00a0\u7684\u6e90\u5730\u5740\u4f2a\u88c5\u64cd\u4f5c\u5b9e\u73b0\u7684\u3002<\/p>\n<p>\u67e5\u770b\u4e3b\u673a\u7684 NAT \u89c4\u5219\u3002<\/p>\n<pre><wbr \/>$ sudo iptables -t nat -nL\r\n...\r\nChain POSTROUTING (policy ACCEPT)\r\ntarget     prot opt source               destination\r\nMASQUERADE  all  --  172.17.0.0\/16       !172.17.0.0\/16\r\n...\r\n<\/pre>\n<p>\u5176\u4e2d\uff0c\u4e0a\u8ff0\u89c4\u5219\u5c06\u6240\u6709\u6e90\u5730\u5740\u5728\u00a0172.17.0.0\/16\u00a0\u7f51\u6bb5\uff0c\u76ee\u6807\u5730\u5740\u4e3a\u5176\u4ed6\u7f51\u6bb5\uff08\u5916\u90e8\u7f51\u7edc\uff09\u7684\u6d41\u91cf\u52a8\u6001\u4f2a\u88c5\u4e3a\u4ece\u7cfb\u7edf\u7f51\u5361\u53d1\u51fa\u3002MASQUERADE \u8ddf\u4f20\u7edf SNAT \u7684\u597d\u5904\u662f\u5b83\u80fd\u52a8\u6001\u4ece\u7f51\u5361\u83b7\u53d6\u5730\u5740\u3002<\/p>\n<h3>\u5916\u90e8\u8bbf\u95ee\u5bb9\u5668\u5b9e\u73b0<\/h3>\n<p>\u5bb9\u5668\u5141\u8bb8\u5916\u90e8\u8bbf\u95ee\uff0c\u53ef\u4ee5\u5728\u00a0docker run\u00a0\u65f6\u5019\u901a\u8fc7\u00a0-p\u00a0\u6216\u00a0-P\u00a0\u53c2\u6570\u6765\u542f\u7528\u3002<\/p>\n<p>\u4e0d\u7ba1\u7528\u90a3\u79cd\u529e\u6cd5\uff0c\u5176\u5b9e\u4e5f\u662f\u5728\u672c\u5730\u7684\u00a0iptable\u00a0\u7684 nat \u8868\u4e2d\u6dfb\u52a0\u76f8\u5e94\u7684\u89c4\u5219\u3002<\/p>\n<p>\u4f7f\u7528\u00a0-P\u00a0\u65f6\uff1a<\/p>\n<pre><wbr \/>$ iptables -t nat -nL\r\n...\r\nChain DOCKER (2 references)\r\ntarget     prot opt source               destination\r\nDNAT       tcp  --  0.0.0.0\/0            0.0.0.0\/0            tcp dpt:49153 to:172.17.0.2:80\r\n<\/pre>\n<p>\u4f7f\u7528\u00a0-p 80:80\u00a0\u65f6\uff1a<\/p>\n<pre><wbr \/>$ iptables -t nat -nL\r\nChain DOCKER (2 references)\r\ntarget     prot opt source               destination\r\nDNAT       tcp  --  0.0.0.0\/0            0.0.0.0\/0            tcp dpt:80 to:172.17.0.2:80\r\n<\/pre>\n<p>\u6ce8\u610f\uff1a<\/p>\n<ul>\n<li>\u8fd9\u91cc\u7684\u89c4\u5219\u6620\u5c04\u4e86 0.0.0.0\uff0c\u610f\u5473\u7740\u5c06\u63a5\u53d7\u4e3b\u673a\u6765\u81ea\u6240\u6709\u63a5\u53e3\u7684\u6d41\u91cf\u3002\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u00a0-p IP:host_port:container_port\u00a0\u6216\u00a0-p IP::port\u00a0\u6765\u6307\u5b9a\u5141\u8bb8\u8bbf\u95ee\u5bb9\u5668\u7684\u4e3b\u673a\u4e0a\u7684 IP\u3001\u63a5\u53e3\u7b49\uff0c\u4ee5\u5236\u5b9a\u66f4\u4e25\u683c\u7684\u89c4\u5219\u3002<\/li>\n<li>\u5982\u679c\u5e0c\u671b\u6c38\u4e45\u7ed1\u5b9a\u5230\u67d0\u4e2a\u56fa\u5b9a\u7684 IP \u5730\u5740\uff0c\u53ef\u4ee5\u5728 Docker \u914d\u7f6e\u6587\u4ef6\u00a0\/etc\/default\/docker\u00a0\u4e2d\u6307\u5b9aDOCKER_OPTS=&#8221;&#8211;ip=IP_ADDRESS&#8221;\uff0c\u4e4b\u540e\u91cd\u542f Docker \u670d\u52a1\u5373\u53ef\u751f\u6548\u3002<\/li>\n<\/ul>\n<\/div>\n<div><\/div>\n<div>\n<h2>9.5. \u914d\u7f6e docker0 \u7f51\u6865<\/h2>\n<p>Docker \u670d\u52a1\u9ed8\u8ba4\u4f1a\u521b\u5efa\u4e00\u4e2a\u00a0docker0\u00a0\u7f51\u6865\uff08\u5176\u4e0a\u6709\u4e00\u4e2a\u00a0docker0\u00a0\u5185\u90e8\u63a5\u53e3\uff09\uff0c\u5b83\u5728\u5185\u6838\u5c42\u8fde\u901a\u4e86\u5176\u4ed6\u7684\u7269\u7406\u6216\u865a\u62df\u7f51\u5361\uff0c\u8fd9\u5c31\u5c06\u6240\u6709\u5bb9\u5668\u548c\u672c\u5730\u4e3b\u673a\u90fd\u653e\u5230\u540c\u4e00\u4e2a\u7269\u7406\u7f51\u7edc\u3002<\/p>\n<p>Docker \u9ed8\u8ba4\u6307\u5b9a\u4e86\u00a0docker0\u00a0\u63a5\u53e3 \u7684 IP \u5730\u5740\u548c\u5b50\u7f51\u63a9\u7801\uff0c\u8ba9\u4e3b\u673a\u548c\u5bb9\u5668\u4e4b\u95f4\u53ef\u4ee5\u901a\u8fc7\u7f51\u6865\u76f8\u4e92\u901a\u4fe1\uff0c\u5b83\u8fd8\u7ed9\u51fa\u4e86 MTU\uff08\u63a5\u53e3\u5141\u8bb8\u63a5\u6536\u7684\u6700\u5927\u4f20\u8f93\u5355\u5143\uff09\uff0c\u901a\u5e38\u662f 1500 Bytes\uff0c\u6216\u5bbf\u4e3b\u4e3b\u673a\u7f51\u7edc\u8def\u7531\u4e0a\u652f\u6301\u7684\u9ed8\u8ba4\u503c\u3002\u8fd9\u4e9b\u503c\u90fd\u53ef\u4ee5\u5728\u670d\u52a1\u542f\u52a8\u7684\u65f6\u5019\u8fdb\u884c\u914d\u7f6e\u3002<\/p>\n<ul>\n<li><wbr \/>&#8211;bip=CIDR\u00a0&#8212; IP \u5730\u5740\u52a0\u63a9\u7801\u683c\u5f0f\uff0c\u4f8b\u5982 192.168.1.5\/24<\/li>\n<li><wbr \/>&#8211;mtu=BYTES\u00a0&#8212; \u8986\u76d6\u9ed8\u8ba4\u7684 Docker mtu \u914d\u7f6e<\/li>\n<\/ul>\n<p>\u4e5f\u53ef\u4ee5\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u914d\u7f6e DOCKER_OPTS\uff0c\u7136\u540e\u91cd\u542f\u670d\u52a1\u3002 \u7531\u4e8e\u76ee\u524d Docker \u7f51\u6865\u662f Linux \u7f51\u6865\uff0c\u7528\u6237\u53ef\u4ee5\u4f7f\u7528\u00a0brctl show\u00a0\u6765\u67e5\u770b\u7f51\u6865\u548c\u7aef\u53e3\u8fde\u63a5\u4fe1\u606f\u3002<\/p>\n<pre><wbr \/>$ sudo brctl show\r\nbridge name     bridge id               STP enabled     interfaces\r\ndocker0         8000.3a1d7362b4ee       no              veth65f9\r\n                                             vethdda6\r\n<\/pre>\n<p>*\u6ce8\uff1abrctl\u00a0\u547d\u4ee4\u5728 Debian\u3001Ubuntu \u4e2d\u53ef\u4ee5\u4f7f\u7528\u00a0sudo apt-get install bridge-utils\u00a0\u6765\u5b89\u88c5\u3002<\/p>\n<p>\u6bcf\u6b21\u521b\u5efa\u4e00\u4e2a\u65b0\u5bb9\u5668\u7684\u65f6\u5019\uff0cDocker \u4ece\u53ef\u7528\u7684\u5730\u5740\u6bb5\u4e2d\u9009\u62e9\u4e00\u4e2a\u7a7a\u95f2\u7684 IP \u5730\u5740\u5206\u914d\u7ed9\u5bb9\u5668\u7684 eth0 \u7aef\u53e3\u3002\u4f7f\u7528\u672c\u5730\u4e3b\u673a\u4e0a\u00a0docker0\u00a0\u63a5\u53e3\u7684 IP \u4f5c\u4e3a\u6240\u6709\u5bb9\u5668\u7684\u9ed8\u8ba4\u7f51\u5173\u3002<\/p>\n<pre><wbr \/>$ sudo docker run -i -t --rm base \/bin\/bash\r\n$ ip addr show eth0\r\n24: eth0: &lt;BROADCAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\r\n    link\/ether 32:6f:e0:35:57:91 brd ff:ff:ff:ff:ff:ff\r\n    inet 172.17.0.3\/16 scope global eth0\r\n       valid_lft forever preferred_lft forever\r\n    inet6 fe80::306f:e0ff:fe35:5791\/64 scope link\r\n       valid_lft forever preferred_lft forever\r\n$ ip route\r\ndefault via 172.17.42.1 dev eth0\r\n172.17.0.0\/16 dev eth0  proto kernel  scope link  src 172.17.0.3\r\n$ exit<\/pre>\n<\/div>\n<div><\/div>\n<div>\n<h2>9.6. \u81ea\u5b9a\u4e49\u7f51\u6865<\/h2>\n<p>\u9664\u4e86\u9ed8\u8ba4\u7684\u00a0docker0\u00a0\u7f51\u6865\uff0c\u7528\u6237\u4e5f\u53ef\u4ee5\u6307\u5b9a\u7f51\u6865\u6765\u8fde\u63a5\u5404\u4e2a\u5bb9\u5668\u3002<\/p>\n<p>\u5728\u542f\u52a8 Docker \u670d\u52a1\u7684\u65f6\u5019\uff0c\u4f7f\u7528\u00a0-b BRIDGE\u6216&#8211;bridge=BRIDGE\u00a0\u6765\u6307\u5b9a\u4f7f\u7528\u7684\u7f51\u6865\u3002<\/p>\n<p>\u5982\u679c\u670d\u52a1\u5df2\u7ecf\u8fd0\u884c\uff0c\u90a3\u9700\u8981\u5148\u505c\u6b62\u670d\u52a1\uff0c\u5e76\u5220\u9664\u65e7\u7684\u7f51\u6865\u3002<\/p>\n<pre><wbr \/>$ sudo service docker stop\r\n$ sudo ip link set dev docker0 down\r\n$ sudo brctl delbr docker0\r\n<\/pre>\n<p>\u7136\u540e\u521b\u5efa\u4e00\u4e2a\u7f51\u6865\u00a0bridge0\u3002<\/p>\n<pre><wbr \/>$ sudo brctl addbr bridge0\r\n$ sudo ip addr add 192.168.5.1\/24 dev bridge0\r\n$ sudo ip link set dev bridge0 up\r\n<\/pre>\n<p>\u67e5\u770b\u786e\u8ba4\u7f51\u6865\u521b\u5efa\u5e76\u542f\u52a8\u3002<\/p>\n<pre><wbr \/>$ ip addr show bridge0\r\n4: bridge0: &lt;BROADCAST,MULTICAST&gt; mtu 1500 qdisc noop state UP group default\r\n    link\/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ff\r\n    inet 192.168.5.1\/24 scope global bridge0\r\n       valid_lft forever preferred_lft forever\r\n<\/pre>\n<p>\u914d\u7f6e Docker \u670d\u52a1\uff0c\u9ed8\u8ba4\u6865\u63a5\u5230\u521b\u5efa\u7684\u7f51\u6865\u4e0a\u3002<\/p>\n<pre><wbr \/>$ echo 'DOCKER_OPTS=\"-b=bridge0\"' &gt;&gt; \/etc\/default\/docker\r\n$ sudo service docker start\r\n<\/pre>\n<p>\u542f\u52a8 Docker \u670d\u52a1\u3002 \u65b0\u5efa\u4e00\u4e2a\u5bb9\u5668\uff0c\u53ef\u4ee5\u770b\u5230\u5b83\u5df2\u7ecf\u6865\u63a5\u5230\u4e86\u00a0bridge0\u00a0\u4e0a\u3002<\/p>\n<p>\u53ef\u4ee5\u7ee7\u7eed\u7528\u00a0brctl show\u00a0\u547d\u4ee4\u67e5\u770b\u6865\u63a5\u7684\u4fe1\u606f\u3002\u53e6\u5916\uff0c\u5728\u5bb9\u5668\u4e2d\u53ef\u4ee5\u4f7f\u7528\u00a0ip addr\u00a0\u548c\u00a0ip route\u00a0\u547d\u4ee4\u6765\u67e5\u770b IP \u5730\u5740\u914d\u7f6e\u548c\u8def\u7531\u4fe1\u606f\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>9.7. \u5de5\u5177\u548c\u793a\u4f8b<\/h2>\n<p>\u5728\u4ecb\u7ecd\u81ea\u5b9a\u4e49\u7f51\u7edc\u62d3\u6251\u4e4b\u524d\uff0c\u4f60\u53ef\u80fd\u4f1a\u5bf9\u4e00\u4e9b\u5916\u90e8\u5de5\u5177\u548c\u4f8b\u5b50\u611f\u5174\u8da3\uff1a<\/p>\n<h3>pipework<\/h3>\n<p>J\u00e9r?me Petazzoni \u7f16\u5199\u4e86\u4e00\u4e2a\u53eb\u00a0<a href=\"https:\/\/github.com\/jpetazzo\/pipework\" target=\"_blank\" rel=\"nofollow noopener\">pipework<\/a>\u00a0\u7684 shell \u811a\u672c\uff0c\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u5728\u6bd4\u8f83\u590d\u6742\u7684\u573a\u666f\u4e2d\u5b8c\u6210\u5bb9\u5668\u7684\u8fde\u63a5\u3002<\/p>\n<h3>playground<\/h3>\n<p>Brandon Rhodes \u521b\u5efa\u4e86\u4e00\u4e2a\u63d0\u4f9b\u5b8c\u6574\u7684 Docker \u5bb9\u5668\u7f51\u7edc\u62d3\u6251\u7ba1\u7406\u7684\u00a0<a href=\"https:\/\/github.com\/brandon-rhodes\/fopnp\/tree\/m\/playground\" target=\"_blank\" rel=\"nofollow noopener\">Python\u5e93<\/a>\uff0c\u5305\u62ec\u8def\u7531\u3001NAT \u9632\u706b\u5899\uff1b\u4ee5\u53ca\u4e00\u4e9b\u63d0\u4f9b HTTP, SMTP, POP, IMAP, Telnet, SSH, FTP \u7684\u670d\u52a1\u5668\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>9.8. \u7f16\u8f91\u7f51\u7edc\u914d\u7f6e\u6587\u4ef6<\/h2>\n<p>Docker 1.2.0 \u5f00\u59cb\u652f\u6301\u5728\u8fd0\u884c\u4e2d\u7684\u5bb9\u5668\u91cc\u7f16\u8f91\u00a0\/etc\/hosts,\u00a0\/etc\/hostname\u00a0\u548c\u00a0\/etc\/resolve.conf\u00a0\u6587\u4ef6\u3002<\/p>\n<p>\u4f46\u662f\u8fd9\u4e9b\u4fee\u6539\u662f\u4e34\u65f6\u7684\uff0c\u53ea\u5728\u8fd0\u884c\u7684\u5bb9\u5668\u4e2d\u4fdd\u7559\uff0c\u5bb9\u5668\u7ec8\u6b62\u6216\u91cd\u542f\u540e\u5e76\u4e0d\u4f1a\u88ab\u4fdd\u5b58\u4e0b\u6765\u3002\u4e5f\u4e0d\u4f1a\u88ab\u00a0docker commit\u00a0\u63d0\u4ea4\u3002<\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2>9.9. \u793a\u4f8b\uff1a\u521b\u5efa\u4e00\u4e2a\u70b9\u5230\u70b9\u8fde\u63a5<\/h2>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cDocker \u4f1a\u5c06\u6240\u6709\u5bb9\u5668\u8fde\u63a5\u5230\u7531\u00a0docker0\u00a0\u63d0\u4f9b\u7684\u865a\u62df\u5b50\u7f51\u4e2d\u3002<\/p>\n<p>\u7528\u6237\u6709\u65f6\u5019\u9700\u8981\u4e24\u4e2a\u5bb9\u5668\u4e4b\u95f4\u53ef\u4ee5\u76f4\u8fde\u901a\u4fe1\uff0c\u800c\u4e0d\u7528\u901a\u8fc7\u4e3b\u673a\u7f51\u6865\u8fdb\u884c\u6865\u63a5\u3002<\/p>\n<p>\u89e3\u51b3\u529e\u6cd5\u5f88\u7b80\u5355\uff1a\u521b\u5efa\u4e00\u5bf9\u00a0peer\u00a0\u63a5\u53e3\uff0c\u5206\u522b\u653e\u5230\u4e24\u4e2a\u5bb9\u5668\u4e2d\uff0c\u914d\u7f6e\u6210\u70b9\u5230\u70b9\u94fe\u8def\u7c7b\u578b\u5373\u53ef\u3002<\/p>\n<p>\u9996\u5148\u542f\u52a8 2 \u4e2a\u5bb9\u5668\uff1a<\/p>\n<pre><wbr \/>$ sudo docker run -i -t --rm --net=none base \/bin\/bash\r\nroot@1f1f4c1f931a:\/#\r\n$ sudo docker run -i -t --rm --net=none base \/bin\/bash\r\nroot@12e343489d2f:\/#\r\n<\/pre>\n<p>\u627e\u5230\u8fdb\u7a0b\u53f7\uff0c\u7136\u540e\u521b\u5efa\u7f51\u7edc\u540d\u5b57\u7a7a\u95f4\u7684\u8ddf\u8e2a\u6587\u4ef6\u3002<\/p>\n<pre><wbr \/>$ sudo docker inspect -f '{{.State.Pid}}' 1f1f4c1f931a\r\n2989\r\n$ sudo docker inspect -f '{{.State.Pid}}' 12e343489d2f\r\n3004\r\n$ sudo mkdir -p \/var\/run\/netns\r\n$ sudo ln -s \/proc\/2989\/ns\/net \/var\/run\/netns\/2989\r\n$ sudo ln -s \/proc\/3004\/ns\/net \/var\/run\/netns\/3004\r\n<\/pre>\n<p>\u521b\u5efa\u4e00\u5bf9\u00a0peer\u00a0\u63a5\u53e3\uff0c\u7136\u540e\u914d\u7f6e\u8def\u7531<\/p>\n<pre><wbr \/>$ sudo ip link add A type veth peer name B\r\n\r\n$ sudo ip link set A netns 2989\r\n$ sudo ip netns exec 2989 ip addr add 10.1.1.1\/32 dev A\r\n$ sudo ip netns exec 2989 ip link set A up\r\n$ sudo ip netns exec 2989 ip route add 10.1.1.2\/32 dev A\r\n\r\n$ sudo ip link set B netns 3004\r\n$ sudo ip netns exec 3004 ip addr add 10.1.1.2\/32 dev B\r\n$ sudo ip netns exec 3004 ip link set B up\r\n$ sudo ip netns exec 3004 ip route add 10.1.1.1\/32 dev B\r\n<\/pre>\n<p>\u73b0\u5728\u8fd9 2 \u4e2a\u5bb9\u5668\u5c31\u53ef\u4ee5\u76f8\u4e92 ping \u901a\uff0c\u5e76\u6210\u529f\u5efa\u7acb\u8fde\u63a5\u3002\u70b9\u5230\u70b9\u94fe\u8def\u4e0d\u9700\u8981\u5b50\u7f51\u548c\u5b50\u7f51\u63a9\u7801\u3002<\/p>\n<p>\u6b64\u5916\uff0c\u4e5f\u53ef\u4ee5\u4e0d\u6307\u5b9a\u00a0&#8211;net=none\u00a0\u6765\u521b\u5efa\u70b9\u5230\u70b9\u94fe\u8def\u3002\u8fd9\u6837\u5bb9\u5668\u8fd8\u53ef\u4ee5\u901a\u8fc7\u539f\u5148\u7684\u7f51\u7edc\u6765\u901a\u4fe1\u3002<\/p>\n<p>\u5229\u7528\u7c7b\u4f3c\u7684\u529e\u6cd5\uff0c\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a\u53ea\u8ddf\u4e3b\u673a\u901a\u4fe1\u7684\u5bb9\u5668\u3002\u4f46\u662f\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u66f4\u63a8\u8350\u4f7f\u7528\u00a0&#8211;icc=false\u00a0\u6765\u5173\u95ed\u5bb9\u5668\u4e4b\u95f4\u7684\u901a\u4fe1\u3002<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>6. \u4ed3\u5e93 \u4ed3\u5e93\uff08Repository\uff09\u662f\u96c6\u4e2d\u5b58\u653e\u955c\u50cf\u7684\u5730\u65b9\u3002 \u4e00\u4e2a\u5bb9\u6613\u6df7\u6dc6\u7684\u6982\u5ff5\u662f\u6ce8\u518c\u670d\u52a1\u5668\uff08Registr &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[294,297,301,302,303,229,295,299,300,298,252],"class_list":["post-376","post","type-post","status-publish","format-standard","hentry","category-4","tag-docker","tag-hub","tag-nat","tag-pipework","tag-playground","tag-229","tag-295","tag-299","tag-300","tag-298","tag-252"],"views":1637,"_links":{"self":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/376","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=376"}],"version-history":[{"count":3,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/376\/revisions"}],"predecessor-version":[{"id":388,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/376\/revisions\/388"}],"wp:attachment":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=376"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=376"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}