576 Commits

Author SHA1 Message Date
Kang Huaishuai
3e78d41648 Release v1.2.0 2020-12-20 21:48:52 +08:00
Kang Huaishuai
ce1e73af45 [vuepress] bump 1.6.0
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-10-14 13:47:42 +08:00
Kang Huaishuai
d49b997e4e [vuepress] Update config
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-10-14 11:52:48 +08:00
Kang Huaishuai
4e97d001e2 project docker image add bash
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-10-14 00:40:07 +08:00
Kang Huaishuai
f414fb8c4e Add vscode devcontainer
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-10-14 00:28:50 +08:00
Kang Huaishuai
533ed411a3 [vuepress] Update config
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-10-13 22:41:28 +08:00
Kang Huaishuai
013fe20aca Update mirror: check docker.service first
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-10-13 09:35:40 +08:00
Kang Huaishuai
799e1a5a79 rename docker ce to docker
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-10-12 18:54:47 +08:00
Kang Huaishuai
0b481e4da9 Update mirror
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-10-10 09:35:45 +08:00
Kang Huaishuai
e5cdec4cdc Fixed link
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-10-07 13:44:57 +08:00
Kang Huaishuai
0ded0378a7 Update laravel, close #465 2020-10-07 13:31:45 +08:00
Kang Huaishuai
f31e15275f [vuepress] support dark mode, close #463
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-16 18:05:52 +08:00
Kang Huaishuai
40b0f0277b Fixed 404 link 2020-09-16 17:40:22 +08:00
Kang Huaishuai
552bc79755 Add link
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 21:04:01 +08:00
Kang Huaishuai
9badc0bdfa Dockerfile add shell label
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 20:16:04 +08:00
Kang Huaishuai
c72c6ebc88 replace ip.cn
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 17:43:21 +08:00
Kang Huaishuai
01d442e7fb Fixed kubeadm error
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 14:18:12 +08:00
Kang Huaishuai
e035d34377 Update format
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 10:14:38 +08:00
Kang Huaishuai
4e14c6fc8c [install] Update CentOS8
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 10:06:15 +08:00
Kang Huaishuai
54f83e0fa3 [install] remove nightly version
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 09:51:53 +08:00
Kang Huaishuai
aab0132d96 Fixed 301 link
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 09:40:55 +08:00
Kang Huaishuai
a757a3d1fc [install] Update CentOS8
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 09:30:17 +08:00
Kang Huaishuai
50dec0959e [install] Add CentOS 8
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-09-06 09:15:03 +08:00
Kang Huaishuai
1fbf680fda buildkit more arg 2020-09-06 08:53:11 +08:00
Kang Huaishuai
84cb9de5b7 Merge pull request #462 from jackeylu/master
fix #461 https://github.com/yeasy/docker_practice/issues/461#issue-69…
2020-09-04 14:34:16 +08:00
jackeylv
55d0d27be3 fix #461 https://github.com/yeasy/docker_practice/issues/461#issue-692771052
Signed-off-by: jackeylv <lvlin.whu@qq.com>
2020-09-04 14:24:36 +08:00
Kang Huaishuai
1b5e4363f8 link-check exclude ip.cn
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-29 15:46:24 +08:00
Kang Huaishuai
b4722e5cd8 registry image not include htpasswd
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-29 15:30:32 +08:00
Kang Huaishuai
71f506ce8b Update vuepress nav
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-27 23:09:11 +08:00
Kang Huaishuai
d8cbcd77a9 remove opensource
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-25 19:42:35 +08:00
Kang Huaishuai
d1facd566b improve content
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-25 18:01:53 +08:00
Kang Huaishuai
351016c7a3 use nginx:alpine as demo
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-25 16:54:59 +08:00
Kang Huaishuai
ba287367b9 Merge pull request #460 from myccccccc/master
Fix issue #459
2020-08-25 15:53:33 +08:00
mayingchun
cc3e71f7a5 Fix issue #459 2020-08-25 14:19:23 +08:00
Kang Huaishuai
9bdb5bc4f3 [Windows] v1903+ support WSL2
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-22 09:38:34 +08:00
Kang Huaishuai
a3205d87d7 ip.cn not support https
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-10 13:43:33 +08:00
Kang Huaishuai
4595b49208 remove outdated content #458
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-10 13:41:36 +08:00
Kang Huaishuai
0aa19dcc65 wechat is first
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-08-10 13:40:04 +08:00
Kang Huaishuai
3664ba0449 Update link
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-07-31 10:08:01 +08:00
Kang Huaishuai
15de82143b Merge pull request #456 from huiyifyj/master
Add "到" the word to read more fluently
2020-07-30 10:04:07 +08:00
huiyifyj
08e4be2d17 Add the word to read more fluently 2020-07-30 09:26:49 +08:00
Kang Huaishuai
45e92c3fdc Fixed docker image
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-07-14 16:58:22 +08:00
Kang Huaishuai
957d20cbb0 Update image link
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-07-14 16:20:36 +08:00
Kang Huaishuai
8ed2c0c5b2 Update actions 301 link
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-07-14 00:09:11 +08:00
Kang Huaishuai
b5549f4ff3 Remove download link #455
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-07-14 00:08:15 +08:00
Kang Huaishuai
a97d51d9ba Update README
调整章节顺序

Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-07-04 13:02:37 +08:00
Kang Huaishuai
7e7846f288 Fixed #454
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-07-03 12:19:36 +08:00
Kang Huaishuai
835c5f76d8 [windows] install by winget
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-06-22 09:22:53 +08:00
Kang Huaishuai
9fb65599bc Update raspberry os name
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-06-17 18:50:33 +08:00
Kang Huaishuai
5a56571943 Update ide content
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-06-17 10:00:47 +08:00
Kang Huaishuai
7fd06d39b6 docker hub support buildx
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-06-17 00:42:01 +08:00
Kang Huaishuai
1d610c2cfd Update install content
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-06-17 00:10:09 +08:00
Kang Huaishuai
93b3fb1d96 Merge pull request #451 from staticdax/master
Fix Typo issue #450: "运用"疑似笔误
2020-05-20 11:27:43 +08:00
staticdax
53f5ee269b fix typo: "运用"疑似笔误 2020-05-20 01:35:47 +08:00
Kang Huaishuai
fc253d9317 Add baidu registry mirror
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-05-11 19:01:06 +08:00
Kang Huaishuai
cc558bdfae Add link
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-05-10 10:43:51 +08:00
Kang Huaishuai
70e96dd1ed offline read image use cn mirror image
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-05-10 09:46:27 +08:00
Kang Huaishuai
ba42a61cb7 offline read docker image add tips
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-05-10 09:46:27 +08:00
Kang Huaishuai
4b69c1f30a build vuepress docker image
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-05-10 09:46:11 +08:00
Kang Huaishuai
2fdd3a9c36 Merge pull request #448 from niebayes/master
Fix issue #447: 删除了一个多余的"对" (line 97)
2020-05-08 19:44:52 +08:00
Nie Shicong
bbd94352b0 Fix issue #447: 删除了一个多余的"对" (line 97)
Signed-off-by: Nie Shicong <bayes@Nies-MacBook-Pro.local>
2020-05-08 19:20:23 +08:00
Baohua Yang
07fd39324c Migrating to new gitbook link 2020-04-29 11:36:50 -07:00
Kang Huaishuai
1359d89821 Update soft to latest version
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-04-26 10:34:02 +08:00
Kang Huaishuai
5a2838fd9b [buildx] buildkit image support tencent cloud env
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-04-26 10:17:19 +08:00
Kang Huaishuai
dde5488987 FCOS live iso require 3GB RAM
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2020-04-26 09:57:39 +08:00
Kang Huaishuai
ad5b4d0100 Recommit (#446)
* 添加离线部署docker和离线部署minio实践

Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>

Co-authored-by: Daiwj <daiwj@zz3s.com>
2020-04-26 09:42:59 +08:00
Daiwj
9675ee4a69 docker镜像的导入和导出修改了章节名字 2020-04-12 19:13:38 +08:00
Kang HuaiShuai
dd5e8ba6e5 Update buildx image
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-04-07 09:18:40 +08:00
Kang HuaiShuai
8fc0537780 remove azk8s.cn mirror
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-04-04 22:54:32 +08:00
Kang Huaishuai
87115888bc Merge pull request #443 from boblau8686/master
Correct the wrong word
2020-03-31 18:32:40 +08:00
bob.liu
3e29b89c89 Correct the wrong word 2020-03-31 18:23:17 +08:00
Kang HuaiShuai
9243a6ddc2 gitbook dist commit message include main repo sha
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-03-12 15:07:44 +08:00
Kang HuaiShuai
8c10313e6b remove github actions files on gitbook dist
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-03-12 15:04:21 +08:00
Kang HuaiShuai
8677b01018 Add docker roadmap
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-03-12 14:50:34 +08:00
Kang HuaiShuai
935a5157b1 Fixed #440 on fedora
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-03-12 14:47:09 +08:00
Touko
7a9482141e Fix issue #440
http://mirrors.ustc.edu.cn/help/docker-ce.html#id7
2020-03-12 14:23:20 +08:00
Kang HuaiShuai
d0298a7e0a Update install
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-03-10 14:24:46 +08:00
Kang HuaiShuai
72f4eda7aa Update aliyun customer case
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-03-10 14:08:20 +08:00
Kang HuaiShuai
405ad65585 Docker Desktop Support Windows Home
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-03-10 13:39:27 +08:00
Kang HuaiShuai
45142d4379 Change AUFS to OverlayFS
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-03-04 11:50:59 +08:00
Kang HuaiShuai
61cb7e63da Update alpine content: replace default repo
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-02-27 23:31:01 +08:00
Kang HuaiShuai
08150164bf Fixed github pages
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-02-23 21:57:26 +08:00
Kang HuaiShuai
156a02674f Update link
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-02-23 21:17:32 +08:00
Kang HuaiShuai
bbc1ef6f5e Remove 404 link
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-02-23 11:36:56 +08:00
Kang HuaiShuai
a6e5266ec3 [actions] check md files link
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-02-23 11:15:11 +08:00
Kang HuaiShuai
5bb444635a cp _images to vuepress dist
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-02-23 10:53:24 +08:00
Kang HuaiShuai
350b5adca4 vuepress remove archived content
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-02-22 14:59:31 +08:00
Kang HuaiShuai
2eebb763d8 Change CoreOS to Fedora CoreOS(FCOS)
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-02-22 13:55:13 +08:00
Kang Huaishuai
6d2f610633 Merge pull request #439 from firejq/patch-1
Fix a markdown grammatical error
2020-02-11 08:57:29 +08:00
FirejqWei
906d69e63c Fix a markdown grammatical error 2020-02-11 02:03:57 +08:00
Kang HuaiShuai
53949b42ae [Compose] Add lnmp
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-01-09 17:08:35 +08:00
Kang HuaiShuai
3b022db3a2 [Kubernetes] Add dashboard
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2020-01-09 16:57:38 +08:00
Kang HuaiShuai
f30c5d72a6 Replace dead link
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-12-31 21:10:06 +08:00
Kang HuaiShuai
a429039b9e Add podman
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-12-31 20:53:51 +08:00
Kang HuaiShuai
5641b57273 Add kubeadm, close #438
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-12-31 20:26:22 +08:00
Kang HuaiShuai
9ddd1cb2e9 Update docker commit, Fixed #437 2019-12-26 11:54:45 +08:00
Kang Huaishuai
98846f8421 Update link 2019-12-22 10:34:52 +08:00
Kang HuaiShuai
8ac3291ff4 [Cloud] Remove docker cloud
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-12-09 21:00:18 +08:00
Kang HuaiShuai
cb73b58a06 Drone agent use drone/drone-runner-docker:1
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-12-09 20:46:21 +08:00
Kang HuaiShuai
c19ce94a29 Update registry mirror
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-12-09 15:05:06 +08:00
Kang HuaiShuai
61f021df72 Add CODEOWNERS
* https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners

Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-12-09 14:28:18 +08:00
Kang HuaiShuai
8ed1d14c07 Update vuepress
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-12-09 13:40:10 +08:00
Kang HuaiShuai
3d090d8b70 Add enable kubernetes on docker-sektop,close #262
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-12-09 12:21:52 +08:00
Kang HuaiShuai
a4842e0d0d Fixed buildx 2019-12-01 10:12:14 +08:00
Kang HuaiShuai
94ad3d2fe8 [Public] coding.net domain is *.mirror.docker-practice.com
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-29 23:36:58 +08:00
Kang Huaishuai
87fdfd492d Merge pull request #432 from loopever/master
Fix issue #431: AUFS全称修改为Wikipedia的内容
2019-11-26 19:50:29 +08:00
loopever
865557ebb6 Fix issue #431: AUFS全称修改为Wikipedia的内容 2019-11-26 18:56:12 +08:00
Kang Huaishuai
45c2e8204f Fixed #430 2019-11-18 22:32:44 +08:00
Kang HuaiShuai
a04d6f49a3 Update kubernetes
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-15 11:04:23 +08:00
Kang HuaiShuai
dc3e6dd483 Fixed 404 link
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-14 09:22:06 +08:00
Kang HuaiShuai
470b321d52 Update command
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-14 09:21:31 +08:00
Kang HuaiShuai
1820b1762b Update title style
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-06 14:58:03 +08:00
Kang HuaiShuai
4a4a9df1e0 Update link
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-06 14:36:28 +08:00
Kang HuaiShuai
f8951c6276 [vuepress] push dist to coding.net
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-06 13:18:55 +08:00
Kang HuaiShuai
21e2de047b [CI] Fixed actions
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-06 10:44:57 +08:00
Kang HuaiShuai
b3cef76f30 Update title style
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-05 23:35:43 +08:00
Kang HuaiShuai
1301695761 Add experimental
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-05 23:28:01 +08:00
Kang HuaiShuai
aec66284c3 Add ide with docker
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-05 22:19:50 +08:00
Kang HuaiShuai
e490a9c440 Add Docker Buildx
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-05 21:50:05 +08:00
Kang HuaiShuai
a61f9a3504 Archive docker-machine mesos docker-swarm, close #425
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-05 19:35:12 +08:00
Kang HuaiShuai
869dc5362c Use vuepress build book
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-05 19:15:33 +08:00
Kang Huaishuai
741db3431f Merge pull request #423 from uscwifi/patch-1
Update centos.md
2019-10-05 23:41:21 +08:00
uscwifi
652ef4a73d Update centos.md 2019-10-05 23:18:48 +08:00
Kang HuaiShuai
77a6369f4f Update docker hub
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-25 11:04:01 +08:00
Kang HuaiShuai
2eaab1a2fc Update format
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-25 11:00:57 +08:00
Kang HuaiShuai
a1c40c2555 [Registry Mirror] Update mirror
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-25 10:49:40 +08:00
Kang HuaiShuai
6039d39bca [install] Fixed script install, default channel is stable
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-25 10:30:12 +08:00
Kang HuaiShuai
b12607b99f Fixed outdated content
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-20 16:51:04 +08:00
Kang HuaiShuai
b2e36fa9a1 Add wechat group
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-20 16:50:32 +08:00
Kang HuaiShuai
eb21368c7d Update format
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-20 15:29:02 +08:00
Kang HuaiShuai
928f2aad3c [install] Fixed error
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-20 15:05:06 +08:00
Kang HuaiShuai
ba93fa4243 Update format
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-20 14:48:54 +08:00
Kang HuaiShuai
6c748ee06c Update format
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-20 14:28:50 +08:00
Kang HuaiShuai
a61a48b630 [cases] Fixed typo
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-20 14:12:56 +08:00
Kang HuaiShuai
01861c0a4f [install] Update settings
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-20 14:06:04 +08:00
Kang HuaiShuai
2fc832ba9e add docker-practice.com
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-05 13:40:53 +08:00
Kang HuaiShuai
0b651238a5 deploy pages to docker-practice/zh-cn
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-09-05 12:59:25 +08:00
Kang Huaishuai
c499c902b4 Fixed error 2019-09-01 20:06:13 +08:00
Kang
502356078d Fixed error
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2019-09-01 15:15:53 +08:00
khs1994
c87291ab7e Update Docker Desktop name
Signed-off-by: khs1994 <khs1994@khs1994.com>
2019-09-01 15:03:32 +08:00
khs1994
a0f166f62a [Machine] Update to v0.16.1
Signed-off-by: khs1994 <khs1994@khs1994.com>
2019-09-01 14:50:40 +08:00
khs1994
751cad4624 [Compose] Update to v1.24.1
Signed-off-by: khs1994 <khs1994@khs1994.com>
2019-09-01 14:46:33 +08:00
khs1994
b4e3899bf6 Update CoreOS: remove outdated quickstart 2019-09-01 14:16:10 +08:00
khs1994
1c6e1eb70a [etcd] Update to v3.4.x 2019-08-31 22:57:43 +08:00
khs1994
50babae2ce compose wordpress update mysql to v8.0.x #415 2019-08-31 22:11:34 +08:00
khs1994
afd66319e9 Update CI
* Update drone to v1.x
* Add GitHub Actions
2019-08-31 21:15:51 +08:00
khs1994
534f690e1b Update install 2019-08-31 18:35:14 +08:00
khs1994
d2f1945e46 Update project docker image name #416 2019-08-31 17:47:38 +08:00
Kang Huaishuai
ac3d9a2620 Merge pull request #413 from baijunyao/master
Use aliyun compose mirrors
2019-08-14 22:06:45 +08:00
baijunyao
99d0336adc Use aliyun compose mirrors 2019-08-14 21:50:30 +08:00
Kang HuaiShuai
4f462000ba Add image
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-07-03 12:22:22 +08:00
Kang HuaiShuai
3c79652b5e Fix dead link
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-07-03 12:06:31 +08:00
Kang HuaiShuai
6e92eaefd0 Update compose django, Fixed #405
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-07-03 11:49:11 +08:00
khs1994
1a5c0dedaa Merge pull request #407 from yongchengzhao/master
- Fix issue #406: Describe more correctly.
2019-06-28 11:20:06 +08:00
khs1994
a4ea0e5956 Merge pull request #409 from yongchengzhao/master
- Fix issue #408: Fix typos.
2019-06-28 11:17:28 +08:00
yongchengzhao
b4df39ada9 - Fix issue #408: Fix typos. 2019-06-28 10:16:12 +08:00
yongchengzhao
c95147f7c2 - Fix issue #408: Fix typos. 2019-06-28 10:04:57 +08:00
yongchengzhao
98dfbc7023 - Fix issue #406: Describe more correctly. 2019-06-27 17:03:03 +08:00
khs1994
42b45543d9 Add ci icon [skip ci] 2019-05-14 00:29:12 +08:00
khs1994
b4e936f021 Update README [skip ci] 2019-05-13 23:43:29 +08:00
khs1994
c56a8dcbbb Fix gitbook build error: use page-treeview@2.9.8 2019-05-13 22:58:26 +08:00
khs1994
04e4e876dd Update cloud 2019-05-12 10:14:00 +08:00
khs1994
8af712b31c [install] Update mirror: remove docker cn registry #370 2019-05-12 09:44:17 +08:00
khs1994
d69ac403a7 Update cloud 2019-05-12 09:41:35 +08:00
khs1994
dd7f790bdf Update jd link [skip ci] 2019-05-10 07:27:55 +08:00
khs1994
8c039cee61 Buy book by wechat miniprogram [skip ci] 2019-05-07 23:16:36 +08:00
Baohua Yang
4cd6454451 Merge branch 'master' of github.com:yeasy/docker_practice 2019-05-05 19:31:08 +08:00
Baohua Yang
336f009c78 Add resource 2019-05-05 19:31:06 +08:00
khs1994
47585407d5 ubuntu 14.04,debian 7 and 8 EOL 2019-04-29 09:29:46 +08:00
khs1994
0b04aaf1b7 Merge pull request #399 from SmallTianTian/patch-1
expose port.
2019-04-15 20:22:09 +08:00
SmallTianTian
64af6dd220 expose port. 2019-04-15 11:11:58 +08:00
khs1994
51be1ec2e7 Add BuildKit and docker manifest command. close #390 ,close #391
Signed-off-by: khs1994 <khs1994@khs1994.com>
2019-03-29 12:02:18 +08:00
khs1994
84194452f0 show repo language is go 2019-03-22 10:35:29 +08:00
khs1994
73deb22113 Update README
* use jd.com cps url, analysis docker user trend
2019-03-09 11:16:27 +08:00
khs1994
713a2400a4 Fix format and update outdate content 2019-03-08 12:21:07 +08:00
Baohua Yang
ee4f7f6187 Merge pull request #388 from daixiang0/delete-blank
Remove unused blank spaces
2019-02-22 23:44:13 +08:00
Xiang Dai
fcbce67238 delete all duplicate empty blanks
Signed-off-by: Xiang Dai <764524258@qq.com>
2019-02-21 10:53:33 +08:00
khs1994
24399a1ede Replace http with https 2019-01-06 10:15:13 +08:00
khs1994
57b091b0db Update install 2019-01-06 10:00:38 +08:00
khs1994
deeb1356f0 Update docker official docs link 2019-01-06 09:50:03 +08:00
khs1994
51cb8b485a Update link 2019-01-06 09:40:31 +08:00
khs1994
2d3785ccea Add aliyun mirror 2019-01-01 17:59:58 +08:00
khs1994
0357f396c5 replace crlf,Fix #338 2019-01-01 10:30:49 +08:00
khs1994
ac192efc26 Update typeset 2018-12-31 16:09:34 +08:00
khs1994
18aef8ba58 Add cases/ci travis
Signed-off-by: khs1994 <khs1994@khs1994.com>
2018-12-31 15:57:44 +08:00
khs1994
925d93947a Update dockerfile format 2018-12-31 14:50:31 +08:00
khs1994
84959ae8b4 Add Dockerfile multi stage laravel 2018-12-31 14:39:26 +08:00
khs1994
73ccb16b21 Add php image 2018-12-31 09:25:33 +08:00
khs1994
d29d8567f1 Update kubernetes 2018-12-31 09:06:28 +08:00
khs1994
9dc659109c Update fedora.md 2018-12-30 17:43:34 +08:00
khs1994
82b09d7da7 Fix last commit error 2018-12-26 16:47:44 +08:00
Baohua Yang
8ee24dcf28 Add more debug skills 2018-12-26 10:11:42 +08:00
Baohua Yang
c179ba5f1d Add debug skills 2018-12-26 10:05:42 +08:00
khs1994
3b65773b76 Fix image link 404 2018-12-25 19:20:32 +08:00
khs1994
8f26e9cb4b Merge pull request #385 from jxlwqq/patch-1
Fix CentOS website
2018-12-22 00:08:19 +08:00
jxlwqq
479720b658 Fix CentOS website 2018-12-22 00:04:50 +08:00
khs1994
a71aaf29ea Update debian to stretch 2018-12-19 17:27:21 +08:00
khs1994
ba3668b19e Update ubuntu to 18.04 2018-12-19 17:24:52 +08:00
khs1994
a4227497d4 Fix #383, base image not include wget,Update based image to debian:stretch 2018-12-19 17:08:32 +08:00
xufanglu
c9ab9af8da Use daemon.json 2018-12-18 13:13:52 +08:00
khs1994
8b414cf2f5 Update soft version 2018-12-15 23:04:32 +08:00
khs1994
e0e8c0c528 replace docker cloud with docker hub 2018-12-14 19:36:17 +08:00
khs1994
657753c59c replace docker store with docker hub 2018-12-14 19:08:14 +08:00
khs1994
b4c958b458 Update format 2018-12-13 20:51:30 +08:00
khs1994
df27a079ee Merge pull request #380 from daixiang0/update-faq
Update stop cmd
2018-12-13 19:24:00 +08:00
daixiang0
4dcd1800a7 Update stop cmd
`docker stop` send SIGTERM, and then SIGKILL after grace period,
while `docker kill` send SIGTERM directly,
so `docker stop` is more safe and ensure the integrity of the data.

Signed-off-by: daixiang0 <764524258@qq.com>
2018-12-13 19:21:11 +08:00
long
47599f3b42 Update data root info 2018-12-13 18:57:41 +08:00
long
6907b24acd Update docker save command info
Signed-off-by: daixiang0 <764524258@qq.com>
2018-12-13 18:13:08 +08:00
khs1994
46b70102da Update storage drivers #378 #375 2018-12-13 18:01:45 +08:00
khs1994
bcc2100566 Merge pull request #374 from mapleeit/patch-1
fix: fix typos
2018-12-11 14:41:27 +08:00
Maple Miao
c6c1c41de9 fix: fix typos 2018-12-11 14:30:59 +08:00
Devin-Li
4cb7a633ea update entrypotin.md 2018-12-10 18:20:10 +08:00
khs1994
75ac38a92f Update ubuntu version to 18.04
Signed-off-by: khs1994 <khs1994@khs1994.com>
2018-12-08 21:48:16 +08:00
Baohua Yang
00e3f2ecbb Merge pull request #371 from yeasy/miniprogram
Add wechat mini-program info
2018-12-08 21:12:30 +08:00
khs1994
e9a50dbaed Add miniprogram 2018-12-08 18:08:27 +08:00
khs1994
abd0871f5d Update Dockerfile
Signed-off-by: khs1994 <khs1994@khs1994.com>
2018-11-02 08:26:50 +08:00
khs1994
66525a1008 Update supported os
Signed-off-by: khs1994 <khs1994@khs1994.com>
2018-11-02 08:01:29 +08:00
Baohua Yang
de11e5a71c Fix issue#362: update book info 2018-10-23 21:35:18 +08:00
khs1994
d573a4bb98 Merge pull request #364 from wxy325/master
Update django.md, Fix a typo
2018-10-23 12:51:54 +08:00
Xiangyu Wu
d0f693ac09 Update django.md
Fix typo
2018-10-22 15:25:40 -07:00
khs1994
a4966685d6 Next version is 1.0.0 2018-10-21 09:51:36 +08:00
khs1994
fe7d877928 Add Fedora 2018-10-21 09:43:53 +08:00
khs1994
fa688567f8 Merge pull request #359 from mahuihuang/fix-etcd 2018-09-14 16:50:51 +08:00
Ma Huihuang
e668b0650f 添加环境变量
`No help topic for 'put'·
2018-09-14 16:42:45 +08:00
khs1994
9e1c34ac05 Merge pull request #358 from ujnzxw/master
fix typos
2018-09-08 11:10:35 +08:00
Xiaowei ZHAO
b76041a196 fix typos 2018-09-08 02:24:38 +00:00
khs1994
a2ff8fe137 Merge pull request #357 from LeonGravel/patch-1
fix typo
2018-09-06 22:08:40 +08:00
LeonGravel
765608859c fix typo 2018-09-06 14:43:10 +08:00
khs1994
4786b7361e Fix wordpress compose file volume format 2018-08-25 22:20:04 +08:00
khs1994
b6e61560a8 Update issue link 2018-08-14 09:30:08 +08:00
khs1994
49efe1ec18 Update Ubuntu LTS version to 18.04, Fix #352 2018-08-05 08:04:49 +08:00
khs1994
cd18dd6d2c Change Docker CE update channels #351 2018-07-20 09:37:22 +08:00
康怀帅
8376f148da CA should put client host folder 2018-07-11 08:13:17 +08:00
康怀帅
1c616bdf35 Fix registry tls error 2018-07-10 12:28:18 +08:00
khs1994
90679ffc79 Update demo image version 2018-07-10 08:09:43 +08:00
khs1994
cfdd25b1c8 Update etcd 2018-07-10 08:08:34 +08:00
khs1994
0da469f02d Remove -v description 2018-07-10 08:08:21 +08:00
khs1994
e70adfcd4a Update install 2018-07-10 08:07:31 +08:00
康怀帅
9477378eab Remove aliyun daocloud 2018-06-28 11:15:25 +08:00
Baohua Yang
31db05403c Merge pull request #347 from Tuvie/master
Fix mismatch between outline and title
2018-06-21 13:59:56 +08:00
Li Zhaogeng
5d1bdcafaa Fix a dismatch between table of contents and contents 2018-06-21 11:46:41 +08:00
康怀帅
31fcbbeb56 Update README.md 2018-06-03 21:41:17 +08:00
康怀帅
8b1ac33eb0 Update Docker version [skip ci] 2018-06-03 21:39:52 +08:00
康怀帅
0656f8c923 Merge pull request #344 from edxi/patch-1
host file
2018-06-03 21:34:51 +08:00
Xi ErDe
880edd95d1 host file 2018-06-03 21:28:31 +08:00
denwork
780343a09d Create nexus3_registry.md 2018-05-31 18:30:41 +08:00
Baohua Yang
34ef7be800 Merge pull request #339 from khs1994-docker/master
Update Swarm mode: add rolling_update
2018-05-23 22:54:33 +08:00
康怀帅
412187b40d Update docker machine on windows 10
* Set up an external network switch. If you plan at any point to use Docker Machine to set up multiple local VMs, you need this anyway, as described in the topic on the Hyper-V driver for Docker Machine.

* https://docs.docker.com/machine/drivers/hyper-v/#example
2018-05-23 17:45:41 +08:00
khs1994
aaf791020e Update Swarm mode: add rolling_update 2018-05-23 17:18:42 +08:00
康怀帅
cce126e057 Update raspberry-pi content Fix #337 2018-05-10 08:09:39 +08:00
康怀帅
86c7042557 Change docker rmi TO docker image rm #279 2018-05-09 19:45:51 +08:00
Baohua Yang
3bc4fc7770 Update gitbook link 2018-05-07 16:42:04 +08:00
Baohua Yang
97a1517cf9 Update gitbook read link 2018-04-29 15:46:38 +08:00
Shude Li
91d875913c doc(compose_file): fix version number of secrets (#332) 2018-04-22 09:04:30 -07:00
康怀帅
aea908985b Merge pull request #330 from songjiayang/master
fix typo
2018-04-17 19:08:53 +08:00
songjiayang
6fa19cde0e fix typo 2018-04-17 17:40:50 +08:00
康怀帅
6cf0b4e528 Merge pull request #329 from khs1994-docker/master
Remove deprecated content
2018-04-08 21:03:00 +08:00
khs1994
f8a0550c89 Remove deprecated content 2018-04-08 21:00:11 +08:00
康怀帅
2f3a4490f1 Merge pull request #327 from khs1994-docker/master
Add some file
2018-04-08 20:36:47 +08:00
khs1994
a79d139a17 Add some file 2018-04-08 01:06:53 +08:00
康怀帅
abd907d0df Update docker version 2018-03-31 19:22:16 +08:00
康怀帅
6024b8cc96 Merge pull request #326 from Alex-WZ/patch-1
Update concepts.md
2018-03-31 15:39:59 +08:00
Alex-WZ
12ee584895 Update concepts.md
知道容器的生命周期结束或者其被删除 -> 直到容器的生命周期结束或者其被删除
2018-03-31 14:36:42 +08:00
Baohua Yang
99fdb25307 Merge pull request #324 from thomaszdxsn/patch-1
Fix a typo
2018-03-30 21:58:35 +08:00
Yang,Zhou
87bc804730 fix a typo 2018-03-30 20:55:02 +08:00
康怀帅
eba11c1783 Fix docker login docker ce 18.04-rc1+
* https://docs.docker.com/engine/reference/commandline/login/
2018-03-30 10:04:01 +08:00
康怀帅
cef57e5e1d Merge pull request #323 from YL2014/master
Fix 文字错误 拉去 -> 拉取
2018-03-22 13:04:46 +08:00
yl2014
488f94f132 Fix 文字错误 拉去 -> 拉取 2018-03-22 12:31:35 +08:00
Baohua Yang
02449d056f Minor update expression 2018-03-21 14:59:25 +08:00
康怀帅
6c92d41c0f Update Contents
* Fix offlineread docker image

* Add warning on install

* Update install follow official
2018-03-19 16:04:23 +08:00
康怀帅
c706769a44 Merge pull request #321 from khs1994/master
Update Dockerfile multistage-builds #320
2018-03-10 09:18:54 +08:00
khs1994
b8aeb4816e Update Dockerfile multistage-builds #320 2018-03-10 09:16:43 +08:00
康怀帅
fff9b8acd2 Update Compose README
Remove cluster
2018-03-10 08:45:09 +08:00
康怀帅
7194afe014 Merge pull request #319 from khs1994/master
Update Swarm mode create #302
2018-03-10 08:36:20 +08:00
khs1994
51fb449877 Update Swarm mode create #302 2018-03-10 08:34:46 +08:00
康怀帅
bb65fe17be Merge pull request #316 from khs1994/master
Update install
2018-03-08 08:25:55 +08:00
khs1994
749e8cceb7 Update install 2018-03-08 08:23:35 +08:00
khs1994
d677384474 Update macOS mirror #313 2018-02-10 18:00:14 +08:00
康怀帅
473f90d087 Update offline read
Update offline read  (#312)
2018-01-23 21:52:14 +08:00
康怀帅
cfd6d4a112 Merge pull request #309 from khs1994/master
Change command docker ps to docker container ls
2018-01-16 16:31:05 +08:00
khs1994
a2de8f8195 Change command docker ps to docker container ls #279 2018-01-15 22:00:53 +08:00
康怀帅
9289d02b42 Remove content 2018-01-15 09:21:09 +08:00
康怀帅
10818a6990 Update QQ Group status 2018-01-13 00:38:30 +08:00
康怀帅
93822bc05f Update ISSUE_TEMPLATE.md 2018-01-13 00:34:33 +08:00
康怀帅
ea9ed043d2 Update offline 2018-01-05 19:00:22 +08:00
康怀帅
447f104059 Merge pull request #308 from khs1994/master
Update gitbook
2018-01-04 16:18:49 +08:00
khs1994
d2986c5a5f Update README.md about download pdf and epub [skip ci] 2018-01-04 16:16:09 +08:00
khs1994
d252fef1fc Add cover in root 2018-01-04 15:41:34 +08:00
康怀帅
379aa783c3 Fix git url error 2018-01-03 01:08:24 +08:00
Baohua Yang
93c1947770 Merge pull request #306 from khs1994/master
Release v0.9.0
2017-12-31 21:10:11 +08:00
khs1994
4f1c35cf98 Release v0.9.0 2017-12-31 14:35:48 +08:00
khs1994
26ce09cc6f Update faq 2017-12-31 14:27:55 +08:00
khs1994
606f30631e Update appendix repo wordpress 2017-12-31 14:26:03 +08:00
khs1994
519eea1e60 Change debian to alpine 2017-12-31 14:20:04 +08:00
khs1994
9707b94b9e Fix spelling error 2017-12-31 10:33:52 +08:00
khs1994
f7b8786729 Update project docker image Dockerfile 2017-12-31 10:30:53 +08:00
khs1994
c350c18a01 Add shell script for offline read 2017-12-31 10:29:51 +08:00
Baohua Yang
b1967a8da0 Update introduction and read links 2017-12-31 09:44:51 +08:00
康怀帅
0b7ba611a2 Fix spelling error 2017-12-29 09:22:07 +08:00
康怀帅
9838658e69 Merge pull request #303 from shawxr/patch-1
Update bind-mounts.md
2017-12-26 16:13:52 +08:00
康怀帅
2791c6498c Update bind-mounts.md 2017-12-26 16:12:28 +08:00
shawxr
4e4dc5393b Update bind-mounts.md 2017-12-26 16:05:26 +08:00
Baohua Yang
d230ecfe1f Merge pull request #300 from khs1994/master
Update content
2017-12-25 21:12:58 +08:00
康怀帅
b1b3542406 Update advanced_network 2017-12-20 23:49:49 +08:00
khs1994
319202af07 Update volume 2017-12-20 23:46:55 +08:00
khs1994
882a0e226d Update registry 2017-12-20 23:46:46 +08:00
khs1994
6b421a351b Update image 2017-12-20 23:45:25 +08:00
khs1994
297bd84cac Update swarm mode 2017-12-20 23:44:38 +08:00
khs1994
f479e606a4 Add tips #265 2017-12-20 23:44:09 +08:00
Baohua Yang
35b144058c Merge pull request #299 from khs1994/master
Update mesos/framework.md
2017-12-20 21:37:17 +08:00
khs1994
ff69022065 Update install 2017-12-20 10:24:36 +08:00
khs1994
4a8f23dc44 Update mesos/framework.md 2017-12-20 10:14:53 +08:00
康怀帅
e24cd4c791 Update framework.md 2017-12-19 18:11:08 +08:00
康怀帅
3014b1f6d9 Merge pull request #298 from ysykzheng/master
fix link
2017-12-19 18:10:02 +08:00
康怀帅
45939f9334 Update framework.md 2017-12-19 18:08:52 +08:00
ysykzheng
7886c92413 fix link 2017-12-19 16:33:37 +08:00
Baohua Yang
800f33a266 Merge pull request #297 from khs1994/master
User docker exec to enter container
2017-12-18 16:44:42 +08:00
khs1994
f6757c9310 Remove some content in data_management 2017-12-17 23:02:42 +08:00
khs1994
2f49433315 Rename enter.md to attach_exec.md 2017-12-17 22:57:11 +08:00
Baohua Yang
346da872f9 Merge pull request #296 from khs1994/master 2017-12-17 13:39:32 +08:00
khs1994
5cbb033801 Update compose 2017-12-16 15:08:02 +08:00
康怀帅
7bc34cefe5 Update content (#294) 2017-12-16 13:56:57 +08:00
Baohua Yang
a866b5950e Merge pull request #292 from khs1994/master 2017-12-13 10:44:19 +08:00
khs1994
2069026265 Add registry auth TLS #180 2017-12-11 20:22:51 +08:00
khs1994
c9c7ef0023 Fix error:secret to config 2017-12-11 17:44:48 +08:00
Baohua Yang
aeed2026ea Merge pull request #291 from khs1994/master 2017-12-10 15:09:26 +08:00
khs1994
7e24a78fc4 Update install: add logout and login user after install 2017-12-10 13:21:52 +08:00
khs1994
8678c04263 Update docker-compose.yml 2017-12-10 12:53:57 +08:00
khs1994
0dd94bc130 Update book.json [skip ci] 2017-12-10 12:41:08 +08:00
khs1994
5cf854172e Update cloud: add images 2017-12-10 12:19:24 +08:00
khs1994
dff0e69a0a Update compose #288 2017-12-10 11:52:09 +08:00
khs1994
605835541f Remove img 2017-12-10 11:00:24 +08:00
khs1994
1d9837c504 Move DNS to network #278 2017-12-10 10:51:40 +08:00
Baohua Yang
503b73895d Merge pull request #290 from khs1994/master
Release v0.9-rc2: remove unused files
2017-12-09 20:05:20 +08:00
khs1994
df6ef83a14 Update install docker 2017-12-09 00:12:30 +08:00
khs1994
590ccb1031 Update install docker 2017-12-09 00:12:02 +08:00
khs1994
71cb5b3316 Release v0.9-rc2 2017-12-08 23:32:53 +08:00
khs1994
d6e2b4f700 Remove useless file _local 2017-12-08 23:19:20 +08:00
khs1994
2a32ead0ca Add linuxkit #287 2017-12-08 23:01:04 +08:00
khs1994
1f018be085 Remove useless file 2017-12-08 23:00:19 +08:00
Baohua Yang
e88f293eb4 Merge pull request #286 from khs1994/master
Update content
2017-12-08 22:33:58 +08:00
khs1994
d61018603e Add docker config Only Swarm mode #283 2017-12-08 19:15:27 +08:00
Baohua Yang
d95fcea6df Fix MacOS to macOS 2017-12-08 18:58:19 +08:00
Baohua Yang
26c8f243ee Update ISSUE_TEMPLATE.md 2017-12-07 10:18:24 +08:00
khs1994
fc8a203b1e Update CONTRIBUTING.md 2017-12-06 21:43:01 +08:00
khs1994
205ffcf1e4 Add git cn mirror #276 2017-12-06 19:50:49 +08:00
khs1994
fbd05d6b8c Fix error in jekyll: NOT INCLUDE _images 2017-12-06 19:30:57 +08:00
khs1994
1920ec4d71 Add Best practices for writing Dockerfiles 2017-12-06 19:29:09 +08:00
khs1994
47da90ddb7 Add docker secret #285 2017-12-06 13:23:22 +08:00
Baohua Yang
d364cc4565 Merge pull request #284 from khs1994/master
Update network usage and revise changelog and contributing docs
2017-12-05 16:40:41 +08:00
khs1994
772d02b5ec Add docker-library/docs in dockerfile/references.md 2017-12-05 13:04:01 +08:00
khs1994
ea9abbff99 Change revision.md to CHANGELOG.md AND Move CONTRIBUTING.md to root 2017-12-05 12:36:26 +08:00
khs1994
4790993613 Change revision.md to CHANGELOG.md AND Move CONTRIBUTING.md to root 2017-12-05 11:33:33 +08:00
khs1994
3dd42fbdf8 Update revision 2017-12-05 11:16:51 +08:00
khs1994
9dec811c7c Update: #279 2017-12-05 11:15:59 +08:00
khs1994
12c83989de Update Registry AND #279 2017-12-05 11:15:24 +08:00
khs1994
d56e562eb6 Update container:Change docker images TO docker image ls #279 2017-12-05 11:14:56 +08:00
khs1994
db71f822a2 Update network:Change --net TO --network 2017-12-05 11:03:39 +08:00
Baohua Yang
e5267d3754 Merge pull request #281 from khs1994/master
Update container image chapter
2017-12-05 10:19:08 +08:00
Baohua Yang
e0f501b0eb Merge pull request #280 from khs1994/master
Fix #278: Update SUMMARY
2017-12-05 09:48:34 +08:00
khs1994
77009b25b7 Update image:Change docker images TO docker image ls,etc #279 2017-12-05 09:40:50 +08:00
khs1994
cefc523e7e Update container:Change docker ps TO docker container ls,etc #279 2017-12-05 09:22:06 +08:00
khs1994
0302445b0d Update SUMMARY #278 2017-12-04 20:49:59 +08:00
Baohua Yang
414546cc85 Merge pull request #277 from khs1994/master 2017-12-04 20:36:38 +08:00
khs1994
a01f6f5c94 Update .github 2017-12-04 11:49:59 +08:00
khs1994
3c95b69ba1 Update book.json 2017-12-04 11:34:47 +08:00
khs1994
9d7e5140c8 Update machine in swarm 2017-12-04 11:34:28 +08:00
Baohua Yang
b5ad19eac8 Merge pull request #274 from khs1994/master 2017-12-03 23:02:12 +08:00
khs1994
96b4026c94 Update etcd 2017-12-03 18:53:35 +08:00
khs1994
49865efb17 Update machine 2017-12-03 18:26:10 +08:00
khs1994
16b9b51e4a Update SUMMARY revision 2017-12-03 14:34:21 +08:00
khs1994
7187ca598e Update machine 2017-12-03 14:33:46 +08:00
khs1994
e6095decdb Update etcd 2017-12-03 14:04:03 +08:00
khs1994
2f175d81a5 Update etcd to 3.x #275 2017-12-03 13:57:02 +08:00
khs1994
b432fe6b4f Update CoreOS 2017-12-03 13:51:34 +08:00
khs1994
b11481a16c Fix spelling error 2017-12-03 10:31:28 +08:00
khs1994
03d3ab0897 Remove links in compose #215 2017-12-03 10:28:35 +08:00
khs1994
164bfd671a Update install mirror 2017-12-03 10:27:36 +08:00
khs1994
d32dfb21d7 Update repository 2017-12-03 10:27:22 +08:00
khs1994
9c6dc3b7c3 Update image 2017-12-03 10:27:05 +08:00
khs1994
5c4b6c095d Update bind-mounts 2017-12-03 10:26:48 +08:00
khs1994
72962ca829 Update basic_concept 2017-12-03 10:26:28 +08:00
Baohua Yang
7c54647512 Merge pull request #273 from khs1994/master 2017-12-02 08:12:05 +08:00
khs1994
c0045f987c Update cases os 2017-12-01 23:23:26 +08:00
Baohua Yang
421c0b55e3 Merge pull request #272 from khs1994/master
Fix #270: docker daemon deprecated
2017-12-01 22:35:12 +08:00
khs1994
dc6f9c164e Update etcd 2017-12-01 17:33:15 +08:00
khs1994
6591f00635 Update image 2017-12-01 17:33:05 +08:00
khs1994
850cee304d Update cases os 2017-12-01 17:32:53 +08:00
khs1994
ca5b5e088a Update appendix 2017-12-01 17:32:39 +08:00
Baohua Yang
9a403a5e7d Merge pull request #271 from khs1994/master
Update k8s content
2017-12-01 17:29:23 +08:00
khs1994
cd9134842b Fix #270 docker daemon deprecated 2017-12-01 16:50:45 +08:00
Baohua Yang
ce228cf0ae Merge pull request #269 from khs1994/master
Update registry
2017-12-01 16:43:19 +08:00
khs1994
8c882ae593 Fix copywriting in k8s 2017-12-01 16:32:42 +08:00
khs1994
43b9d80b87 Update registry 2017-12-01 15:46:26 +08:00
Baohua Yang
9c8e8429af Add using issue 2017-11-30 23:06:37 +08:00
康怀帅
824d1f96ca Update compose install (#267)
* Update drone

* Update compose install
2017-11-30 08:38:35 -06:00
Baohua Yang
ca1ebd12f3 Add step for reviewing 2017-11-30 22:03:03 +08:00
康怀帅
d4d7d852f0 Update Drone demo 2017-11-30 18:34:14 +08:00
khs1994
73c889a379 Fix error link in install machine 2017-11-30 18:28:23 +08:00
khs1994
aa5e16040b Update linking 2017-11-30 18:22:16 +08:00
khs1994
3608d55710 Update Docker Registry 2017-11-30 16:59:04 +08:00
khs1994
3fff07037f Update install 2017-11-30 15:57:27 +08:00
康怀帅
b14db127e1 Merge pull request #264 from khs1994/master
Add Drone chinese resources AND Fix error links
2017-11-30 01:39:30 -06:00
khs1994
dbce8bf068 Update Drone #261 2017-11-30 15:28:53 +08:00
khs1994
77aec42d49 Add Drone #261 2017-11-30 15:05:57 +08:00
khs1994
a9359e51d3 Add chinese docker resources 2017-11-30 15:05:32 +08:00
khs1994
3b4e195983 Fix links 2017-11-30 15:04:49 +08:00
康怀帅
c5d6e3fdfc Add qq group x 2017-11-29 20:04:21 +08:00
康怀帅
58fd53813e Add gitter 2017-11-29 19:32:50 +08:00
康怀帅
78dd280dc5 Merge pull request #258 from auroraeffect/master
Fix MongoDB version error in compose
2017-11-29 05:18:10 -06:00
liu sicong
c627b487b0 Merge pull request #1 from auroraeffect/auroraeffect-patch-version-error
Fix MongoDB version error
2017-11-29 17:20:47 +08:00
liu sicong
f2fcf42875 Fix MongoDB version error
3.0 => 3.2
2017-11-29 17:19:25 +08:00
khs1994
8e1a1d183b Remove fleet #222 2017-11-29 15:39:06 +08:00
khs1994
f9b23b757f Release v0.9-rc1 2017-11-29 10:49:36 +08:00
khs1994
7fb504457e Update docker-compose.yml 2017-11-29 10:35:57 +08:00
khs1994
13dcfb99ee Change picture links in README.md 2017-11-29 10:35:36 +08:00
khs1994
858ee68d23 Add picture from docs.docker.com 2017-11-29 10:25:19 +08:00
khs1994
a877c87310 Update install 2017-11-29 10:24:44 +08:00
khs1994
f8699bac64 Update container 2017-11-29 10:24:32 +08:00
khs1994
3d8aee7bf8 Update compose 2017-11-29 10:24:19 +08:00
khs1994
31507a513a Fix error link 2017-11-29 10:24:02 +08:00
khs1994
9fb1796c50 Update advanced_network 2017-11-29 10:23:42 +08:00
康怀帅
58801290c7 Update offline read in Windows: fix error in Docker CE LCOW (Permission denied) (#257) 2017-11-28 02:19:39 -06:00
康怀帅
7b79f0da00 Update docker-compose.yml 2017-11-28 15:35:51 +08:00
康怀帅
6ef750b04e Add travis CI/CD #196 #254 (#256)
Add travis CI/CD #196 #254
2017-11-27 23:38:13 -06:00
khs1994
4dab525093 Fix error in docker-compose.yml 2017-11-28 12:05:00 +08:00
khs1994
a00fd6de61 Change offline read way Who use Windows 2017-11-28 11:59:21 +08:00
康怀帅
3cc6c917d0 Fix copywriting 2017-11-27 16:16:44 +08:00
康怀帅
255ab88a73 Merge pull request #253 from yeasy/dev
Update content
2017-11-27 02:15:13 -06:00
khs1994
a78c88c6af Fix copywriting 2017-11-27 14:31:01 +08:00
khs1994
5400402299 Change link 2017-11-27 14:29:33 +08:00
khs1994
a4759c6829 Update image 2017-11-27 14:29:13 +08:00
khs1994
5b4bdf0041 Update basic_concept 2017-11-27 14:29:00 +08:00
khs1994
72da9d6003 Update SUMMARY.md 2017-11-27 14:28:41 +08:00
khs1994
3e346dd3ca Fix spelling error 2017-11-27 14:28:20 +08:00
khs1994
13a6ce4189 Update content 2017-11-26 11:28:55 +08:00
khs1994
d4037fae18 Update ufs 2017-11-26 10:38:07 +08:00
康怀帅
d363f31834 Merge pull request #249 from yeasy/dev
Add Swarm mode AND Fix content
2017-11-25 20:19:16 -06:00
khs1994
48a092beb5 Update underly 2017-11-26 10:18:24 +08:00
khs1994
b1dd38a146 Add OverlayFS #250 2017-11-26 10:06:57 +08:00
khs1994
7a0078b5d4 Update Swarm mode overview 2017-11-26 09:57:48 +08:00
khs1994
5f357b3ad6 Update Swarm mode 2017-11-26 09:54:16 +08:00
khs1994
ef3b0a5077 Update compose 2017-11-26 09:54:04 +08:00
khs1994
78dcf011e8 Update book.json ADD github link SET language 2017-11-25 23:16:43 +08:00
khs1994
1c8d9156aa Update Swarm mode 2017-11-25 15:43:51 +08:00
Baohua Yang
d8b30bc3de Simplify content 2017-11-25 14:17:45 +08:00
khs1994
32573f050a Update Swarm mode create 2017-11-25 10:27:27 +08:00
khs1994
32c65adc48 Add Swarm mode deploy 2017-11-25 10:26:58 +08:00
khs1994
17f7c101a8 Add Swarm mode README 2017-11-25 09:57:16 +08:00
康怀帅
97dca1525b Merge pull request #247 from yeasy/dev
Add multistage builds
2017-11-24 19:45:30 -06:00
khs1994
b62f468468 Add Swarm mode overview 2017-11-25 09:45:16 +08:00
khs1994
16d37d285c Add Swarm mode create 2017-11-25 09:43:04 +08:00
khs1994
1cebe22263 Remove english 2017-11-25 09:28:28 +08:00
khs1994
8c28805e64 Fix #245 2017-11-24 22:42:49 +08:00
khs1994
7db64e34e4 Update content 2017-11-24 22:42:17 +08:00
khs1994
fcfc126446 Add multistage builds #226 2017-11-24 18:39:59 +08:00
khs1994
cf409b0318 Add multistage builds #226 2017-11-24 18:37:38 +08:00
khs1994
1c87565d1a Add multistage builds #226 2017-11-24 18:36:30 +08:00
康怀帅
a5baa245a1 Fix table 2017-11-24 16:50:25 +08:00
康怀帅
b699ec3970 Merge pull request #246 from yeasy/dev
Update content
2017-11-24 02:46:41 -06:00
khs1994
802b51b411 Fix #20 2017-11-24 12:32:36 +08:00
khs1994
68d0468801 Update install 2017-11-24 12:31:12 +08:00
khs1994
8292b693f4 Update image 2017-11-24 12:30:57 +08:00
khs1994
e486686bcf Update container 2017-11-24 12:30:38 +08:00
khs1994
655e513e29 Update data management 2017-11-24 12:30:18 +08:00
khs1994
dcc3d1ae77 Update .github 2017-11-24 11:31:22 +08:00
khs1994
6e45995412 Update revision.md 2017-11-24 11:19:59 +08:00
khs1994
b2fb0e346c Update offline read wiki link 2017-11-24 11:07:21 +08:00
康怀帅
69d619c88d Merge pull request #244 from yeasy/dev
Update appendix/repo #230
2017-11-24 10:56:13 +08:00
康怀帅
4b1859b1f1 Remove SSH 2017-11-24 10:32:39 +08:00
khs1994
9555a6f570 Update appendix/resources 2017-11-24 10:27:39 +08:00
khs1994
e36c307923 Update appendix/repo 2017-11-24 10:19:15 +08:00
康怀帅
8a24edd474 Merge pull request #243 from yeasy/dev
Update install AND FAQ
2017-11-24 10:17:47 +08:00
khs1994
92aed4265c Update FAQ 2017-11-24 09:56:30 +08:00
khs1994
cbc68af6bb Update install content AND Add raspberry-pi 2017-11-24 09:51:06 +08:00
khs1994
131e2f3c94 Update FAQ 2017-11-24 00:29:51 +08:00
康怀帅
83f3ae88c6 Merge pull request #241 from yeasy/dev
Update content
2017-11-24 00:00:17 +08:00
khs1994
bd55b42ead Fix spelling error 2017-11-23 23:59:28 +08:00
khs1994
42b3787134 Fix spelling error 2017-11-23 23:48:52 +08:00
khs1994
e4fd7a7008 Fix spelling error 2017-11-23 23:38:05 +08:00
khs1994
149ce81da2 Remove CoreOS in cases/os 2017-11-23 23:31:47 +08:00
khs1994
469f0af172 Add docker exec #240 #191 #171 #164 #53 2017-11-23 22:30:37 +08:00
khs1994
82624d3501 Update Docker Compose commands 2017-11-23 22:08:41 +08:00
khs1994
f02196c27d Fix error 2017-11-23 21:35:13 +08:00
khs1994
6c7b27023c Add ico in README.md 2017-11-23 21:26:55 +08:00
khs1994
83faad1568 Update Docker Compose file format 3 2017-11-23 21:25:55 +08:00
khs1994
b6513e5525 Update Docker network 2017-11-23 21:25:42 +08:00
Baohua Yang
2e1edc8985 Merge pull request #239 from yeasy/dev 2017-11-23 18:22:15 +08:00
康怀帅
aa0f5afad8 Merge pull request #237 from yeasy/dev
Add compose in network/linking.md
2017-11-23 15:50:11 +08:00
khs1994
c6e8f24e12 Update Docker Compose file format 3 2017-11-23 15:48:52 +08:00
khs1994
225f45c3bd Add compose in network/linking.md 2017-11-23 12:59:13 +08:00
khs1994
b39862ac74 Remove Docker Swarm 2017-11-23 10:56:12 +08:00
khs1994
dd91397ed6 Update README.md 2017-11-23 10:55:12 +08:00
康怀帅
25415c2b52 Merge pull request #236 from yeasy/dev
Remove Docker Swarm,etc
2017-11-23 10:50:25 +08:00
khs1994
38278731f5 Update network remove --link #215 2017-11-23 10:42:43 +08:00
khs1994
e14ff2c7a5 Update revision.md 2017-11-23 10:41:54 +08:00
Baohua Yang
23986bf8fe Update templates for github issue and pr 2017-11-23 09:59:40 +08:00
khs1994
7a3355a0fa Remove Docker Swarm 2017-11-23 09:57:43 +08:00
Baohua Yang
0d42c13818 Minor update description and review image
Fix #231: Update legacy branch name
2017-11-23 09:42:22 +08:00
康怀帅
539b9093dd Merge pull request #234 from yeasy/dev
merge dev branch
2017-11-23 08:05:24 +08:00
khs1994
6dbf69e9f2 Update machine 2017-11-23 01:35:38 +08:00
khs1994
13723b7f19 Update machine 2017-11-23 01:29:38 +08:00
khs1994
650897e17d Update machine 2017-11-23 01:27:16 +08:00
khs1994
cadd96d578 Update machine 2017-11-23 01:23:51 +08:00
khs1994
79cd81910d Update machine 2017-11-23 01:22:25 +08:00
khs1994
236ca1d6a5 Update data management #214 2017-11-23 00:22:03 +08:00
khs1994
6a5b2b398c Update data management #214 2017-11-23 00:19:30 +08:00
康怀帅
0309ff205d Merge pull request #232 from yeasy/dev
计划发布 0.9 版本,基于 Docker CE v17.09 Stable
2017-11-22 22:11:39 +08:00
khs1994
a70e9ea243 计划发布 0.9 版本,基于 Docker CE v17.09 Stable 2017-11-22 22:09:26 +08:00
康怀帅
7f156730ea Merge pull request #228 from yeasy/dev
Fix #227 #180
2017-11-22 21:09:32 +08:00
khs1994
881b6421c3 Remove Registry config.md #180 2017-11-22 21:07:49 +08:00
khs1994
d96135bd80 Update content #227 #180 2017-11-22 20:28:10 +08:00
khs1994
57a29ef76d Follow chinese-copywriting-guidelines #20 2017-11-22 11:41:14 +08:00
khs1994
3c5854670d Follow chinese-copywriting-guidelines #20 2017-11-22 11:36:18 +08:00
康怀帅
f6cb29e42f Merge pull request #225 from yeasy/dev
Fix #223
2017-11-22 11:23:42 +08:00
khs1994
3431d4245b Fix #223 2017-11-22 11:22:57 +08:00
康怀帅
3a43e09e03 Fix table error 2017-11-22 11:22:16 +08:00
康怀帅
69c65ee0fd Merge pull request #224 from yeasy/dev
Fix #117
2017-11-22 11:15:27 +08:00
khs1994
4891f3fb8f Fix #117 2017-11-22 11:13:23 +08:00
康怀帅
7dcf8129d5 Merge pull request #221 from khs1994/master
Chang docker image in offline read AND remove Dockerpool
2017-11-22 10:15:00 +08:00
khs1994
68b4852827 Chang docker image in offline read 2017-11-22 10:10:36 +08:00
Baohua Yang
eb32acd810 Merge pull request #219 from khs1994/master
Fix #216 #218
2017-11-22 09:29:16 +08:00
khs1994
e5569a1776 Remove DockerPool content 2017-11-21 19:17:45 +08:00
康怀帅
17bd7de51f Fix #216 #218
Fix #216 #218
2017-11-21 19:05:06 +08:00
Baohua Yang
1278ea8260 Merge pull request #212 from khs1994/master
Fix code grammar indicator, update help docs
2017-11-14 11:16:53 +08:00
khs1994
1e916ea6cb Follow GitHub recommended community standards 2017-11-13 19:35:41 +08:00
khs1994
2476df00d8 Fix #206 #117 2017-11-13 18:54:38 +08:00
khs1994
5d5f6cf2ce Update image install content 2017-11-13 18:19:35 +08:00
Baohua Yang
cfcc278b86 Merge pull request #211 from khs1994/master
Update with latest content
2017-11-12 22:41:53 +08:00
khs1994
ed1fb29ba9 Fix error in daemon json 2017-11-01 15:50:44 +08:00
khs1994
9cf43a3aa0 Update content AND Use Docker official CN mirror in example 2017-11-01 15:47:41 +08:00
khs1994
e050af9b67 Update README.md 2017-11-01 15:15:12 +08:00
Baohua Yang
7198e22549 Merge pull request #204 from khs1994/master
Fix #203 #206 #208 #209
2017-10-31 19:11:08 -05:00
khs1994
9e09742386 Remove dockerfile in appendix #209 2017-11-01 00:36:57 +08:00
khs1994
2516f79986 Update cloud 2017-11-01 00:24:45 +08:00
khs1994
c309f061ec Update docker-compose 2017-11-01 00:20:30 +08:00
khs1994
424e583eed Remove sudo #206 AND Remove 「本地安装」「批量上传脚本」#208 2017-10-31 23:55:51 +08:00
khs1994
4a4dd3f7d5 Use 「docker container」 in docker v1.13+ #203 AND Remove sudo #206 2017-10-31 23:24:49 +08:00
khs1994
aa1e1d8453 Use 「docker image」 in docker v1.13+ 2017-10-24 13:06:50 +08:00
khs1994
e53e778e8d Add Docker Management Commands in docker v1.13+ 2017-10-24 12:30:17 +08:00
Baohua Yang
933da93481 Merge pull request #205 from LetianFeng/master
Fix typo: Dockrfile -> Dockerfile
2017-10-20 07:52:46 -05:00
Letian Feng
375121696f Fix 单词错误 Dockrfile -> Dockerfile 2017-10-20 11:09:52 +02:00
khs1994
0a98ae5b88 Remove outdated method and add new way in /etc/docker/daemon.json 2017-10-19 23:24:41 +08:00
khs1994
2f7a271261 Add please use latest docker (v17.10.0) 2017-10-19 23:22:55 +08:00
khs1994
97eab3046a Fix error links 2017-10-19 22:46:23 +08:00
khs1994
028a66a4f3 Change aliyun install mirror to ustc because aliyun is outdated,it latest update in 2017/06/23 2017-10-19 22:44:25 +08:00
Baohua Yang
7d5b893af7 Merge pull request #202 from khs1994/master
Fix links
2017-09-16 10:49:07 +08:00
khs1994
d9a26df6a3 Fix links 2017-09-16 10:27:27 +08:00
Baohua Yang
1bfc58ebd7 Set theme jekyll-theme-slate 2017-09-11 15:44:34 +08:00
Baohua Yang
b72dc44d7b Merge pull request #199 from khs1994/master
Fix #186: Refine installation
2017-09-05 22:00:31 +08:00
khs1994
3b0e7e6eef REMOVE alauda mirror and Docker Toolbox 2017-09-05 21:40:41 +08:00
khs1994
826e7efe64 UPDATE install 2017-09-04 23:34:38 +08:00
khs1994
1295b4a7ec ADD link Chinese Copywriting Guidelines 2017-09-04 22:12:15 +08:00
khs1994
a183b98904 change “” ‘’ to 「」『』 2017-09-04 22:06:11 +08:00
khs1994
33ae9109cc rm parenthese in line2 2017-09-04 21:21:52 +08:00
khs1994
3af33b04c6 link install/mirror.md 2017-09-04 20:05:15 +08:00
Baohua Yang
cd7873ba60 Merge pull request #198 from yeasy/revert-195-master
Revert "fix #186"
2017-09-04 19:31:33 +08:00
Baohua Yang
66dd70e5db Revert "fix #186" 2017-09-04 19:31:17 +08:00
khs1994
9dc98b20bd fix #186 2017-09-04 15:19:13 +08:00
Baohua Yang
2070dc8bce Merge pull request #195 from khs1994-gitbook/master
Fix #186 and #195
2017-09-04 14:57:52 +08:00
Baohua Yang
0f883b44a4 Merge pull request #194 from khs1994/master
UPDATE install with adding more os types
2017-09-04 14:54:19 +08:00
khs1994
83619f6820 add travis 2017-09-04 13:31:21 +08:00
khs1994
80b6d320b5 add travis 2017-09-04 13:29:26 +08:00
khs1994
9088a8e593 add travis 2017-09-04 13:25:27 +08:00
khs1994
b1981c23b0 add travis 2017-09-04 13:18:58 +08:00
khs1994
a284c991ba add travis 2017-09-04 12:56:06 +08:00
khs1994
cd1a1f3651 add travis 2017-09-04 12:47:22 +08:00
khs1994
87e4426503 fix #186 2017-09-04 11:39:33 +08:00
khs1994
6d835a3223 ADD Docker CE & Docker EE 2017-09-04 11:19:16 +08:00
khs1994
58825092fb ADD Docker CE for Windows 10 PC 2017-09-04 11:18:56 +08:00
khs1994
22bedf108e UP Docker CE for Debian 2017-09-04 11:18:25 +08:00
khs1994
ff520b5913 UP Docker CE for Ubuntu 2017-09-04 11:18:14 +08:00
khs1994
1591496dbf UP Docker CE for macOS 2017-09-04 11:17:56 +08:00
khs1994
94ef476be0 UP Docker CE for CentOS 7 2017-09-04 11:17:39 +08:00
khs1994
c5522602c9 ADD install debian.md windows.md 2017-09-04 11:16:15 +08:00
khs1994
75cb449ed2 ADD Docker for Windows imgs 2017-09-04 11:15:44 +08:00
296 changed files with 9944 additions and 5753 deletions

View File

@@ -0,0 +1,20 @@
{
"image": "yeasy/docker_practice:latest",
"mounts": [
"source=dp-code-remote-cache,target=/root/.vscode-server,type=volume"
],
"settings": {
"terminal.integrated.shell.linux": "/bin/sh"
},
"forwardPorts": [
4000
],
"runArgs": [
"--cap-add=SYS_ADMIN"
],
"postStartCommand": [
"sh",
"-cx",
"pwd ; cd /workspaces/docker_practice ; mkdir -p ${PWD}/node_modules; mkdir -p ${PWD}/_book; mount --bind /srv/gitbook/node_modules ${PWD}/node_modules ; mount --bind /mnt ${PWD}/_book"
]
}

11
.docker/docker-entrypoint.sh Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/env sh
echo
echo
echo "Please open your browser: 127.0.0.1:4000"
echo
echo "欢迎加入 QQ 群:【 145983035 】 分享 Docker 资源,交流 Docker 技术"
echo
echo
exec nginx -g "daemon off;"

15
.drone.yml Normal file
View File

@@ -0,0 +1,15 @@
kind: pipeline
type: docker
name: build
steps:
- name: build
image: yeasy/docker_practice:latest
pull: if-not-exists # always never
environment:
TZ: Asia/Shanghai
commands:
- docker-entrypoint.sh build
trigger:
branch:
- master

29
.editorconfig Normal file
View File

@@ -0,0 +1,29 @@
# EditorConfig is awesome: https://EditorConfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
[*.py]
indent_size = 4
[Makefile]
indent_style = tab

5
.gitattributes vendored Normal file
View File

@@ -0,0 +1,5 @@
* text=auto
*.sh text eol=lf
* linguist-language=go

40
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1,40 @@
* @yeasy @khs1994
/.github/* @khs1994
/.travis/* @khs1994
/.vuepress/* @khs1994
/advanced_network/* @yeasy @khs1994
/appendix/* @yeasy @khs1994
/archive/* @khs1994
/basic_concept/* @yeasy @khs1994
/buildx/* @khs1994
/cases/* @yeasy @khs1994
/cloud/* @khs1994
/compose/* @yeasy @khs1994
/container/* @yeasy @khs1994
/coreos/* @khs1994
/data_management/* @khs1994
/etcd/* @khs1994
/IDE/* @khs1994
/image/* @yeasy @khs1994
/install/* @khs1994
/introduction/* @yeasy @khs1994
/kubernetes/* @yeasy @khs1994
/network/* @yeasy @khs1994
/opensource/* @khs1994
/repository/* @khs1994
/security/* @yeasy @khs1994
/underly/* @yeasy @khs1994
/.drone.yml @khs1994
/.editorconfig/ @khs1994
/.gitattributes @khs1994
/.gitignore @khs1994
/.travis.yml @khs1994
/_config.yml @yeasy @khs1994
/book.json @yeasy @khs1994
/CHANGELOG.md @yeasy @khs1994
/CONTRIBUTING.md @yeasy @khs1994
/docker-compose.yml @khs1994
/manifest @khs1994
/package.json @khs1994
/README.md @yeasy @khs1994
/SUMMARY.md @yeasy @khs1994

41
.github/ISSUE_TEMPLATE/Bug_report.md vendored Normal file
View File

@@ -0,0 +1,41 @@
---
name: Bug report
about: Create a report to help us improve
---
* [ ] Have u googled the problem? If no, pls do that first!
### Environment
<!--请提供环境信息包括操作系统版本等保留你的操作系统其他选项删除-->
<!--Provides env info like OS version-->
* [x] Linux
* [x] CentOS 7
* [x] Fedora
* [x] Ubuntu 16.04 +
* [x] Debian 9 +
* [x] macOS
* [x] Windows 10
* [x] Raspberry Pi (ARM)
* [x] Others (Pls describe below)
### Docker Version
<!--如果你的 Docker 版本低于 19.03 请尽可能升级到该版本保留你的 Docker 版本其他选项删除-->
<!--if Docker version under 19.03, please upgrade Docker to 19.03-->
* [x] Edge (v19.03)
* [x] Stable (v19.03)
* [x] 1.13.0 or Before
### Problem Description
<!--描述你的问题请贴出操作步骤终端报错截图或文字信息-->
<!--describe problem with detailed steps and logs-->
<!--提交问题之前请点击预览标签符合要求之后再提交问题-->

41
.github/ISSUE_TEMPLATE/Custom.md vendored Normal file
View File

@@ -0,0 +1,41 @@
---
name: Custom issue template
about: Create a issue about Docker
---
* [ ] Have u googled the problem? If no, pls do that first!
### Environment
<!--请提供环境信息包括操作系统版本等保留你的操作系统其他选项删除-->
<!--Provides env info like OS version-->
* [x] Linux
* [x] CentOS 7
* [x] Fedora
* [x] Ubuntu 16.04 +
* [x] Debian 9 +
* [x] macOS
* [x] Windows 10
* [x] Raspberry Pi (ARM)
* [x] Others (Pls describe below)
### Docker Version
<!--如果你的 Docker 版本低于 19.03 请尽可能升级到该版本保留你的 Docker 版本其他选项删除-->
<!--if Docker version under 19.03, please upgrade Docker to 19.03-->
* [x] Edge (v19.03)
* [x] Stable (v19.03)
* [x] 1.13.0 or Before
### Problem Description
<!--描述你的问题请贴出操作步骤终端报错截图或文字信息-->
<!--describe problem with detailed steps and logs-->
<!--提交问题之前请点击预览标签符合要求之后再提交问题-->

View File

@@ -0,0 +1,5 @@
---
name: Feature request
about: Suggest an idea for docker_practice
---

20
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,20 @@
<!--
Thanks for your contribution.
See [CONTRIBUTING](CONTRIBUTING.md) for contribution guidelines.
-->
**Proposed changes (Mandatory)**
<!--
Tell us what you did and why:
One line short description
And details in other paragraphs.
-->
**Fix issues (Optional)**
<!--
Tell us what issues you fixed, e.g., fix #123
-->

71
.github/workflows/check-link.yml vendored Normal file
View File

@@ -0,0 +1,71 @@
name: check-link
on:
# push:
# pull_request:
workflow_dispatch:
jobs:
check-link:
name: check-link
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
with:
fetch-depth: 1
# search Issues :-(
- run: |
docker run -i --rm \
-v $PWD:/mnt:ro \
dkhamsing/awesome_bot \
--white-list "localhost","0.0.0.0",\
"server","example.com","docker",\
"docker.domain.com","YourIP","register",\
"172.16.238.100","172.16.238.101","172.16.238.102",\
"192.168.199.100",\
"github.com/settings",\
"github.com/docker/compose/releases/download",\
"github.com/docker/machine/releases/download",\
"github.com/etcd-io/etcd/releases/download",\
"github.com/tianon/gosu/releases/download",\
"github.com/yeasy/docker_practice",\
"github.com/AliyunContainerService/k8s-for-docker-desktop/raw",\
"dl-cdn.alpinelinux.org/alpine/edge/testing",\
"www.w3.org/1999/xhtml",\
"cr.console.aliyun.com",\
"cloud.tencent.com",\
"nodejs.org/dist/",\
"c.163.com/hub",\
"drone.yeasy.com",\
"mirrors.ustc.edu.cn",\
"docs.docker.com",\
"dockerhub.azk8s.cn",\
"reg-mirror.qiniu.com",\
"registry.docker-cn.com",\
"mirror.ccs.tencentyun.com",\
"vuepress.mirror.docker-practice.com",\
"mc.qcloudimg.com/static/img",\
"www.daocloud.io/mirror",\
"download.docker.com",\
"www.ubuntu.com",\
"archive.ubuntu.com",\
"security.ubuntu.com/ubuntu",\
"nginx.com",\
"img.shields.io/github/release/yeasy/docker_practice",\
"travis-ci.org/yeasy/docker_practice.svg",\
"launchpad.net",\
"www.w3.org/1999",\
"chat.freenode.net",\
"en.wikipedia.org/wiki/UnionFS",\
"product.china-pub.com",\
"union-click.jd.com",\
"x.x.x.x/base",\
"x.x.x.x:9000/minio/",\
"yeasy.gitbooks.io",\
"www.aliyun.com" \
--allow-dupe \
--skip-save-results \
-t 10 \
`find . \( -path "./mesos" -o -path "./machine" -o -path "./swarm_mode" \) -prune -o -name "*.md" -exec ls {} \;`
name: check-link
timeout-minutes: 25

106
.github/workflows/ci.yaml vendored Normal file
View File

@@ -0,0 +1,106 @@
on:
push:
pull_request:
workflow_dispatch:
name: CI
jobs:
build:
name: Build GitBook
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
with:
fetch-depth: 2
- name: Build
uses: docker://yeasy/docker_practice
with:
args: build
- name: vuepress
run: |
sudo rm -rf _book
# npm i vuepress --save-dev
npm i
git clone https://github.com/docker-practice/.vuepress .vuepress2
cp -r .vuepress2/. .vuepress/
rm -rf .vuepress2
find . \( -path "./mesos" -o -path "./machine" -o -path "./swarm_mode" -o -path "./node_modules" -o -path "./.vuepress" -o -path "./_book" -o -path "./CHANGELOG.md" -o -path "./CONTRIBUTING.md" \) -prune -o -name "*.md" -exec sed -i 'N;2a\<AdSenseTitle/>\n' {} \;
npx vuepress --version
npm run vuepress:build
echo "vuepress.docker-practice.com" > .vuepress/dist/CNAME
cp -r _images .vuepress/dist
cp -r advanced_network/_images .vuepress/dist/advanced_network
cp -r appendix/_images .vuepress/dist/appendix
cp -r cases/ci/drone/_images .vuepress/dist/cases/ci/drone
cp -r cases/os/_images .vuepress/dist/cases/os
cp -r cloud/_images .vuepress/dist/cloud
cp -r data_management/_images .vuepress/dist/data_management
cp -r etcd/_images .vuepress/dist/etcd
cp -r image/_images .vuepress/dist/image
cp -r install/_images .vuepress/dist/install
cp -r introduction/_images .vuepress/dist/introduction
cp -r kubernetes/_images .vuepress/dist/kubernetes
cp -r mesos/_images .vuepress/dist/mesos
cp -r underly/_images .vuepress/dist/underly
echo "include: [_images]" > .vuepress/dist/_config.yml
- name: Upload Vuepress dist
uses: docker://pcit/pages
if: github.repository == 'docker-practice/docker_practice'
env:
PCIT_EMAIL: khs1994@khs1994.com
PCIT_GIT_TOKEN: ${{ secrets.PCIT_GIT_TOKEN }}
PCIT_GIT_URL: github.com/docker-practice/vuepress
PCIT_KEEP_HISTORY: "true"
PCIT_LOCAL_DIR: .vuepress/dist
PCIT_MESSAGE: Sync from yeasy/docker_practice@${{github.sha}} by PCIT
PCIT_TARGET_BRANCH: master
PCIT_USERNAME: khs1994
- name: Set coding.net CNAME
run: |
echo "vuepress.mirror.docker-practice.com" > .vuepress/dist/CNAME
- name: Upload Vuepress dist to coding.net
uses: docker://pcit/pages
if: github.repository == 'docker-practice/docker_practice'
env:
PCIT_EMAIL: khs1994@khs1994.com
PCIT_GIT_TOKEN: ${{ secrets.CODING_GIT_TOKEN }}
PCIT_GIT_URL: e.coding.net/dpsigs/docker_practice
PCIT_KEEP_HISTORY: "true"
PCIT_LOCAL_DIR: .vuepress/dist
PCIT_MESSAGE: Sync from yeasy/docker_practice@${{github.sha}} by PCIT
PCIT_TARGET_BRANCH: master
PCIT_USERNAME: ptt0xjqzbke3
- name: Build vuepress docker image
if: github.repository == 'docker-practice/docker_practice'
run: |
sudo rm -rf .vuepress/dist/.git
echo "FROM nginx:alpine" >> Dockerfile
echo "COPY .vuepress/dist /usr/share/nginx/html" >> Dockerfile
echo "COPY .docker/docker-entrypoint.sh /" >> Dockerfile
echo "ENTRYPOINT [\"/docker-entrypoint.sh\"]" >> Dockerfile
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
VCS_REF=`git rev-parse --short HEAD`
docker build -t dockerpracticesig/docker_practice:vuepress \
--label org.opencontainers.image.revision=$VCS_REF \
--label org.opencontainers.image.source="https://github.com/yeasy/docker_practice" \
--label maintainer="https://github.com/docker-practice" \
.
docker push dockerpracticesig/docker_practice:vuepress
docker run -it --rm -d -p 4000:80 dockerpracticesig/docker_practice:vuepress
curl 127.0.0.1:4000
env:
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}

2
.gitignore vendored
View File

@@ -7,5 +7,5 @@ _book/
*.edx
.DS_Store
node_modules/
package-lock.json

65
.travis.yml Normal file
View File

@@ -0,0 +1,65 @@
language: bash
services:
- docker
before_install:
- openssl aes-256-cbc -K $encrypted_6cc8cff04075_key -iv $encrypted_6cc8cff04075_iv
-in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
- chmod 600 ~/.ssh/id_rsa
- export TZ='Asia/Shanghai'
- date
- git config --global user.name "khs1994"
- git config --global user.email "khs1994@khs1994.com"
script:
- docker run -it --rm -v $PWD:/srv/gitbook-src yeasy/docker_practice build
after_success:
- sudo chmod -R 777 _book
- echo "FROM nginx:alpine" >> Dockerfile
- echo "COPY _book /usr/share/nginx/html" >> Dockerfile
- echo "COPY .docker/docker-entrypoint.sh /" >> Dockerfile
- echo "ENTRYPOINT [\"/docker-entrypoint.sh\"]" >> Dockerfile
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
- export VCS_REF=`git rev-parse --short HEAD`
- |
docker build \
-t dockerpracticesig/docker_practice \
-t dockerpracticesig/docker_practice:gitbook \
--label org.opencontainers.image.revision=$VCS_REF \
--label org.opencontainers.image.source="https://github.com/yeasy/docker_practice" \
--label maintainer="https://github.com/docker-practice" \
.
- docker run -dit --rm -p 4000:80 dockerpracticesig/docker_practice
- sleep 5
- curl 127.0.0.1:4000
- docker push dockerpracticesig/docker_practice
- docker push dockerpracticesig/docker_practice:gitbook
- cd _book
- rm -rf .github/workflows
- git init
- git remote add origin "$DEPLOY_REPO"
- git add .
- COMMIT=`date "+%F %T"`
- git commit -m "Travis CI Site updated $COMMIT yeasy/docker_practice@${TRAVIS_COMMIT}"
- git push -f origin master:"$DEPLOY_BRANCH"
env:
global:
- DEPLOY_BRANCH: master
- DEPLOY_REPO: git@github.com:docker-practice/zh-cn.git
addons:
ssh_known_hosts:
- github.com
branches:
only:
- master

26
.travis/Dockerfile Normal file
View File

@@ -0,0 +1,26 @@
FROM node:14.4.0-alpine
ENV TZ=Asia/Shanghai
WORKDIR /srv/gitbook
COPY book.json book.json
COPY docker-entrypoint.sh /usr/local/bin/
RUN set -x && apk add --no-cache \
tzdata bash \
&& npm install -g gitbook-cli \
&& gitbook install \
&& ln -s /usr/local/bin/docker-entrypoint.sh / \
&& rm -rf /root/.npm /tmp/*
EXPOSE 4000
VOLUME /srv/gitbook-src
WORKDIR /srv/gitbook-src
ENTRYPOINT ["docker-entrypoint.sh"]
CMD server

37
.travis/book.json Normal file
View File

@@ -0,0 +1,37 @@
{
"title": "Docker -- 从入门到实践",
"author": "yeasy",
"language": "zh-hans",
"links": {
"sidebar": {
"GitHub": "https://github.com/yeasy/docker_practice"
}
},
"plugins": [
"-livereload",
"image-captions",
"github",
"page-treeview@2.9.8",
"editlink"
],
"pluginsConfig": {
"image-captions": {
"attributes": {
"width": "600"
},
"caption": "图 _PAGE_LEVEL_._PAGE_IMAGE_NUMBER_ - _CAPTION_"
},
"github": {
"url": "https://github.com/yeasy/docker_practice"
},
"editlink": {
"base": "https://github.com/yeasy/docker_practice/blob/master/",
"label": "编辑本页"
},
"page-treeview": {
"copyright": "Copyright &#169; yeasy",
"minHeaderCount": "2",
"minHeaderDeep": "2"
}
}
}

43
.travis/conf.d/nginx.conf Normal file
View File

@@ -0,0 +1,43 @@
user root;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
index index.html index.php;
server {
server_name localhost;
listen 4000;
root /srv/www/;
index index.html;
}
}

View File

@@ -0,0 +1,5 @@
sut:
build: .
volumes:
- ../:/srv/gitbook-src
command: build

23
.travis/docker-entrypoint.sh Executable file
View File

@@ -0,0 +1,23 @@
#!/bin/sh
START=`date "+%F %T"`
if [ $1 = "sh" ];then sh ; exit 0; fi
rm -rf node_modules _book
srcDir=$PWD
cp -a . /srv/gitbook
cd /srv/gitbook
main(){
if [ "$1" = build ];then
gitbook build && cp -a _book $srcDir && echo $START && date "+%F %T" && exit 0
else
exec gitbook serve
fi
}
main $1 $2 $3

BIN
.travis/id_rsa.enc Normal file

Binary file not shown.

8
.travis/update.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/env bash
# cd .travis
# ./update.sh
if [ ! -f Dockerfile ];then exit 1; fi
cp -a ../book.json book.json

3
.vuepress/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
/*
!.gitignore
!config.js

449
.vuepress/config.js Normal file
View File

@@ -0,0 +1,449 @@
const resolve = require("vuepress-theme-hope/resolve");
// const { config } = require('vuepress-theme-hope')
// module.exports =config({
module.exports = resolve({
title: 'Docker 从入门到实践',
base: '/',
head: [['script', {}, `
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?81a3490c9cd141dbcf6d00bc18b6edae";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
`],
[
'script', {}, `
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
`
]
],
plugins: {
// sitemap: {
// hostname: 'https://vuepress.mirror.docker-practice.com'
// },
// 'git-log': {
// additionalArgs: '--no-merge',
// onlyFirstAndLastCommit: true,
// },
},
themeConfig: {
blog: false,
// comment: false,
comment: {
type: "disable", // 使用 Valine
appId: "...", // your appId
appKey: "...", // your appKey
},
pageInfo: [
// 'Author',
'ReadTime',
'Word',
],
footer: {
content: "Made with <a target='_blank' href='https://github.com/mister-hope/vuepress-theme-hope'>vuepress-theme-hope</a>",
display: true,
copyright: false,
},
searchPlaceholder: 'Search',
repo: 'yeasy/docker_practice',
repoLabel: 'GitHub',
hostname: 'https://vuepress.mirror.docker-practice.com',
// author: 'yeasy',
markdown: {
lineNumbers: true,
},
themeColor: {
blue: '#2196f3',
// red: '#f26d6d',
// green: '#3eaf7c',
// orange: '#fb9b5f'
},
//
showAds: true,
docsRepo: 'yeasy/docker_practice',
docsDir: '/',
docsBranch: 'master',
editLinks: true,
nav: [
{
text: '微信交流群',
link: 'https://yewm28.coding-pages.com/wechat.jpg',
},
{
text: '小程序',
link: 'https://yewm28.coding-pages.com/49682252-3ac4c500-faec-11e8-86ab-eafe0139be6b.jpg',
},
{
text: '安装 Docker',
link: '/install/',
},
{
text: 'Docker 入门',
link: '/'
},
{
text: 'Docker 实战',
link: '/cases/os/'
},
{
text: 'CI/CD',
link: '/cases/ci/'
},
{
text: 'Compose',
link: '/compose/',
},
{
text: 'Kubernetes',
link: '/kubernetes/',
},
{
text: "云计算",
link: "/cloud/",
},
{
text: 'GitHub',
link: 'https://github.com/yeasy/docker_practice'
},
// {
// text: '捐赠',
// link: ''
// },
{
text: '腾讯云容器服务',
link: 'https://cloud.tencent.com/act/cps/redirect?redirect=10058&cps_key=3a5255852d5db99dcd5da4c72f05df61'
},
// {
// text: '语言',
// items: [{
// text: 'English',
// link: ''
// }]
// }
],
sidebar: {
'/cloud/': [
'intro',
'tencentCloud',
'alicloud',
'aws',
'summary',
],
'/kubernetes/': [
'intro',
'concepts',
'design',
{
title: "部署 Kubernetes",
collapsable: false,
children: [
"setup/",
"setup/kubeadm",
"setup/docker-desktop",
"setup/systemd",
"setup/dashboard",
]
},
{
title: "Kubernetes 命令行 kubectl",
collapsable: false,
children: [
'kubectl/'
]
}
],
'/compose/': [
'introduction',
'install',
'usage',
'commands',
'compose_file',
'django',
'rails',
'wordpress',
'lnmp',
],
'/install/': [
'ubuntu',
'debian',
'fedora',
'centos',
'centos8',
'raspberry-pi',
'offline',
'mac',
'windows',
'mirror',
'experimental',
],
'/cases/os/': [
{
title: "操作系统",
collapsable: false,
children: [
'busybox',
'alpine',
'debian',
'centos',
'summary',
],
},
{
title: "在 IDE 中使用 Docker",
collapsable: false,
children: [
'/ide/',
'/ide/vsCode',
],
},
],
'/cases/ci/': [
'actions/',
{
title: "Drone",
collapsable: false,
children: [
'drone/',
'drone/install'
]
},
'travis/'
],
'/': [
'/',
'/CHANGELOG',
'/CONTRIBUTING',
{
title: "Docker 简介",
collapsable: false,
children: [
'introduction/',
'introduction/what',
'introduction/why',
]
}, {
title: "基本概念",
collapsable: false,
children: [
'basic_concept/',
'basic_concept/image',
'basic_concept/container',
'basic_concept/repository'
]
},
{
title: "使用镜像",
collapsable: false,
children: [
'image/',
'image/pull',
'image/list',
'image/rm',
'image/commit',
'image/build',
'image/other.md',
'image/internal.md',
]
},
{
title: 'Dockerfile',
collapsable: false,
children: [
"image/dockerfile/",
'image/dockerfile/copy',
'image/dockerfile/add',
'image/dockerfile/cmd',
'image/dockerfile/entrypoint',
'image/dockerfile/env',
'image/dockerfile/arg',
'image/dockerfile/volume',
'image/dockerfile/expose',
'image/dockerfile/workdir',
'image/dockerfile/user',
'image/dockerfile/healthcheck',
'image/dockerfile/label',
'image/dockerfile/shell',
'image/dockerfile/onbuild',
'image/dockerfile/references',
'image/multistage-builds/',
'image/multistage-builds/laravel',
'image/manifest',
]
}, {
title: "操作容器",
collapsable: false,
children: [
'container/',
'container/run',
'container/daemon',
'container/stop',
'container/attach_exec',
'container/import_export',
'container/rm',
],
},
{
title: "Docker 仓库",
collapsable: false,
children: [
'repository/',
'repository/dockerhub',
'repository/registry',
'repository/registry_auth',
'repository/nexus3_registry',
],
},
{
title: "数据管理",
collapsable: false,
children: [
'data_management/',
'data_management/volume',
'data_management/bind-mounts',
],
}, {
title: "使用网络",
collapsable: false,
children: [
'network/',
'network/port_mapping',
'network/linking',
'network/dns',
],
},
{
title: "高级网络配置",
collapsable: false,
children: [
'advanced_network/',
'advanced_network/quick_guide',
'advanced_network/access_control',
'advanced_network/port_mapping',
'advanced_network/bridge',
'advanced_network/example',
'advanced_network/config_file',
'advanced_network/ptp',
],
},
{
title: "Swarm mode",
collapsable: false,
children: [
'swarm_mode/',
'swarm_mode/overview',
'swarm_mode/create',
'swarm_mode/deploy',
'swarm_mode/stack',
'swarm_mode/secret',
'swarm_mode/config',
'swarm_mode/rolling_update',
],
},
{
title: "安全",
collapsable: false,
children: [
'security/',
'security/kernel_ns',
'security/control_group',
'security/daemon_sec',
'security/kernel_capability',
'security/other_feature',
'security/summary',
],
},
{
title: "底层实现",
collapsable: false,
children: [
'underly/',
'underly/arch',
'underly/namespace',
'underly/cgroups',
'underly/ufs',
'underly/container_format',
'underly/network',
],
},
{
title: "Docker Buildx",
collapsable: false,
children: [
"buildx/",
"buildx/buildkit",
"buildx/buildx",
"buildx/multi-arch-images",
],
},
{
title: "Etcd",
collapsable: false,
children: [
'etcd/',
'etcd/intro',
'etcd/install',
'etcd/cluster',
'etcd/etcdctl',
],
},
{
title: "Fedora CoreOS",
collapsable: false,
children: [
'coreos/',
'coreos/intro',
'coreos/install',
],
},
'podman/',
'appendix/faq/',
{
title: "热门镜像介绍",
collapsable: false,
children: [
'appendix/repo/',
'appendix/repo/ubuntu',
'appendix/repo/centos',
'appendix/repo/nginx',
'appendix/repo/php',
'appendix/repo/nodejs',
'appendix/repo/mysql',
'appendix/repo/wordpress',
'appendix/repo/mongodb',
'appendix/repo/redis',
'appendix/repo/minio',
],
},
{
title: "Docker 命令",
collapsable: false,
children: [
'appendix/command/',
'appendix/command/docker',
'appendix/command/dockerd',
]
},
'appendix/best_practices',
'appendix/debug',
'appendix/resources',
],
},
}
});

124
CHANGELOG.md Normal file
View File

@@ -0,0 +1,124 @@
# 修订记录
* 1.2.0 2020-12-20
* 错误修复
* 1.1.0 2019-12-31
* 全面支持 Docker v19.03 新版本
* 增加 `BuildKit`
* 增加 `docker buildx` 命令使用说明
* 增加 `docker manifest` 命令使用说明
* 移除 `Ubuntu 14.04` `Debian 8` `Debian 7`
* 1.0.0: 2018-12-31
* 全面支持 Docker v18.x 新版本
* 添加如何调试 Docker
* 错误修正
* 0.9.0: 2017-12-31
* v1.13.x 旧版本的最后支持
* 0.9.0-rc2: 2017-12-10
* 增加 Docker 中文资源链接
* 增加介绍基于 Docker CI/CD 工具 `Drone`
* 增加 `docker secret` 相关内容
* 增加 `docker config` 相关内容
* 增加 `LinuxKit` 相关内容
* 更新 `CoreOS` 章节
* 更新 `etcd` 章节基于 3.x 版本
* 删除 `Docker Compose` 中的 `links`指令
* 替换 `docker daemon` 命令为 `dockerd`
* 替换 `docker ps` 命令为 `docker container ls`
* 替换 `docker images` 命令为 `docker image ls`
* 修改 `安装 Docker` 一节中部分文字表述
* 移除历史遗留文件和错误的文件
* 优化文字排版
* 调整目录结构
* 修复内容逻辑错误
* 修复`404` 链接
* 0.9.0-rc1: 2017-11-29
* 根据最新版本v17.09修订内容
* 增加 `Dockerfile` 多阶段构建( `multistage builds` ) `Docker 17.05` 新增特性
* 增加 `docker exec` 子命令介绍
* 增加 `docker` 管理子命令 `container` `image` `network` `volume` 介绍
* 增加 `树莓派单片电脑` 安装 Docker
* 增加 Docker 存储驱动 `OverlayFS` 相关内容
* 更新 `Docker CE` `v17.x` 安装说明
* 更新 `Docker 网络` 一节
* 更新 `Docker Machine` 基于 0.13.0 版本
* 更新 `Docker Compose` 基于 3 文件格式
* 删除 `Docker Swarm` 相关内容替换为 `Swarm mode` `Docker 1.12.0` 新增特性
* 删除 `docker run` `--link` 参数
* 精简 `Docker Registry` 一节
* 替换 `docker run` `-v` 参数为 `--mount`
* 修复 `404` 链接
* 优化文字排版
* 增加离线阅读功能
* 0.8.0: 2017-01-08
* 修正文字内容
* 根据最新版本1.12修订安装使用
* 补充附录章节
* 0.7.0: 2016-06-12
* 根据最新版本进行命令调整
* 修正若干文字描述
* 0.6.0: 2015-12-24
* 补充 Machine 项目
* 修正若干 bug
* 0.5.0: 2015-06-29
* 添加 Compose 项目
* 添加 Machine 项目
* 添加 Swarm 项目
* 完善 Kubernetes 项目内容
* 添加 Mesos 项目内容
* 0.4.0: 2015-05-08
* 添加 Etcd 项目
* 添加 Fig 项目
* 添加 CoreOS 项目
* 添加 Kubernetes 项目
* 0.3.0: 2014-11-25
* 完成仓库章节
* 重写安全章节
* 修正底层实现章节的架构命名空间控制组文件系统容器格式等内容
* 添加对常见仓库和镜像的介绍
* 添加 Dockerfile 的介绍
* 重新校订中英文混排格式
* 修订文字表达
* 发布繁体版本分支zh-Hant
* 0.2.0: 2014-09-18
* 对照官方文档重写介绍基本概念安装镜像容器仓库数据管理网络等章节
* 添加底层实现章节
* 添加命令查询和资源链接章节
* 其它修正
* 0.1.0: 2014-09-05
* 添加基本内容
* 修正错别字和表达不通顺的地方

41
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,41 @@
# 如何贡献
领取或创建新的 [Issue](https://github.com/yeasy/docker_practice/issues),如 [issue 235](https://github.com/yeasy/docker_practice/issues/235),添加自己为 `Assignee`。
[GitHub](https://github.com/yeasy/docker_practice/fork) 上 `fork` 到自己的仓库,如 `docker_user/docker_practice`,然后 `clone` 到本地,并设置用户信息。
```bash
$ git clone git@github.com:docker_user/docker_practice.git
$ cd docker_practice
```
修改代码后提交并推送到自己的仓库注意修改提交消息为对应 Issue 号和描述
```bash
# Update the content
$ git commit -a -s
# In commit msg dialog, add content like "Fix issue #235: describe ur change"
$ git push
```
[GitHub](https://github.com/yeasy/docker_practice/pulls) 上提交 `Pull Request`,添加标签,并邀请维护者进行 `Review`。
定期使用项目仓库内容更新自己仓库内容
```bash
$ git remote add upstream https://github.com/yeasy/docker_practice
$ git fetch upstream
$ git rebase upstream/master
$ git push -f origin master
```
## 排版规范
本开源书籍遵循 [中文排版指南](https://github.com/mzlogin/chinese-copywriting-guidelines) 规范。

View File

@@ -1,25 +1,46 @@
# Docker 从入门到实践
0.8.3
[![](https://img.shields.io/github/stars/yeasy/docker_practice.svg?style=social&label=Stars)](https://github.com/yeasy/docker_practice) [![](https://travis-ci.org/yeasy/docker_practice.svg?branch=master)](https://travis-ci.org/yeasy/docker_practice) [![](https://img.shields.io/github/release/yeasy/docker_practice/all.svg)](https://github.com/yeasy/docker_practice/releases) [![](https://img.shields.io/badge/Based-Docker%20CE%20v19.03-blue.svg)](https://github.com/docker/docker-ce) [![](https://img.shields.io/badge/Docker%20%E6%8A%80%E6%9C%AF%E5%85%A5%E9%97%A8%E4%B8%8E%E5%AE%9E%E6%88%98-jd.com-red.svg)][1]
[Docker](http://www.docker.com) 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本! 使用 Docker可以让应用的部署、测试和分发都变得前所未有的高效和轻松
**v1.2.0**
无论是应用开发者运维人员还是其他信息技术从业人员都有必要认识和掌握 Docker以在有限的时间内做更多有意义的事
| 语言 | 构建状态 | - |
| :------------- | :------------- | :--- |
| [zh-hans](https://github.com/yeasy/docker_practice) | [![](https://travis-ci.org/yeasy/docker_practice.svg?branch=master)](https://travis-ci.org/yeasy/docker_practice)| [阅读](https://vuepress.mirror.docker-practice.com/) |
| [us-en](https://github.com/yeasy/docker_practice/tree/english) | [![](https://travis-ci.org/yeasy/docker_practice.svg?branch=english)](https://travis-ci.org/yeasy/docker_practice)| [阅读](https://docker_practice.gitee.io/us-en) |
| [zh-hant](https://github.com/yeasy/docker_practice/tree/zh-Hant) | [![](https://travis-ci.org/yeasy/docker_practice.svg?branch=zh-hant)](https://travis-ci.org/yeasy/docker_practice)| [阅读](https://docker_practice.gitee.io/zh-hant) |
本开源书籍既适用于具备基础 Linux 知识的 Docker 初学者也希望可供理解原理和实现的高级用户参考同时书中给出的实践案例可供在进行实际部署时借鉴前六章为基础内容供用户理解 Docker 的基本概念和操作7 ~ 9 章介绍一些高级操作 10 章给出典型的应用场景和实践案例1112 章介绍关于 Docker 安全和实现技术等高级话题后续章节则分别介绍一些相关的热门开源项目
[Docker](https://www.docker.com) 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker可以让应用的部署、测试和分发都变得前所未有的高效和轻松
在线阅读[GitBook](https://www.gitbook.io/book/yeasy/docker_practice) 或 [Github](https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md)
无论是应用开发者运维人员还是其他信息技术从业人员都有必要认识和掌握 Docker节约有限的生命
* pdf 版本 [下载](https://www.gitbook.com/download/pdf/book/yeasy/docker_practice)
* epub 版本 [下载](https://www.gitbook.com/download/epub/book/yeasy/docker_practice)
本书既适用于具备基础 Linux 知识的 Docker 初学者也希望可供理解原理和实现的高级用户参考同时书中给出的实践案例可供在进行实际部署时借鉴前六章为基础内容供用户理解 Docker 的基本概念和操作7 ~ 9 章介绍包括数据管理网络等高级操作 10 ~ 12 章介绍了容器生态中的几个核心项目1314 章讨论了关于 Docker 安全和实现技术等高级话题后续章节则分别介绍包括 EtcdFedora CoreOSKubernetes容器云等相关热门开源项目最后还展示了使用容器技术的典型的应用场景和实践案例
Docker 自身仍在快速发展中生态环境也在蓬勃成长欢迎参与维护项目[如何贡献](contribute.md)
* 在线阅读[docker-practice.com](https://vuepress.mirror.docker-practice.com/)[GitBook](https://yeasy.gitbook.io/docker_practice/)[Github](https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md)
* [离线阅读 `$ docker run -it --rm -p 4000:80 ccr.ccs.tencentyun.com/dockerpracticesig/docker_practice:vuepress`](https://github.com/yeasy/docker_practice/wiki/%E7%A6%BB%E7%BA%BF%E9%98%85%E8%AF%BB%E5%8A%9F%E8%83%BD%E8%AF%A6%E8%A7%A3)
* [修订记录](revision.md)
Docker 自身仍在快速发展中生态环境也在蓬勃成长建议初学者使用最新稳定版本的 Docker 进行学习实践欢迎 [参与项目维护](CONTRIBUTING.md)
* [修订记录](CHANGELOG.md)
* [贡献者名单](https://github.com/yeasy/docker_practice/graphs/contributors)
## 微信小程序
<p align="center">
<img width="200" src="https://yewm28.coding-pages.com/49682252-3ac4c500-faec-11e8-86ab-eafe0139be6b.jpg">
</p>
<p align="center"><strong>微信扫码 随时随地阅读~</strong></p>
## 技术交流
欢迎关注 DockerPool 社区微博 [@dockerpool](http://weibo.com/u/5345404432),或加入 Docker 技术交流 QQ 群或微信组,分享 Docker 资源,交流 Docker 技术。
<p align="center">
<img width="200" src="https://yewm28.coding-pages.com/wechat.jpg">
</p>
<p align="center"><strong>微信扫码 加入群聊~ 或者微信添加 <code>dpsigs</code> 邀请入群</strong></p>
欢迎加入 Docker 技术交流 QQ 分享 Docker 资源交流 Docker 技术
* QQ I 已满341410255
* QQ II 已满419042067
@@ -29,18 +50,26 @@ Docker 自身仍在快速发展中,生态环境也在蓬勃成长。欢迎参
* QQ VI 已满581983671
* QQ VII 已满252403484
* QQ VIII已满544818750
* QQ IX 可加571502246
* QQ IX 已满571502246
* QQ X 可加145983035
>如果有容器相关的疑问请通过 [Issues](https://github.com/yeasy/docker_practice/issues/new/choose) 来提出。
## 进阶学习
![Docker 技术入门与实战](_images/docker_primer2.png)
[Docker 技术入门与实战](http://item.jd.com/12121728.html)》第二版已经正式出版,针对初版进行内容升级,欢迎大家阅读使用并反馈建议。
[![](https://github.com/yeasy/docker_practice/raw/master/_images/docker_primer3.png)][1]
* [京东图书](https://item.jd.com/12121728.html)
* [China-Pub](http://product.china-pub.com/5089907)
[Docker 技术入门与实战][1]第三版已经面世介绍最新的容器技术栈欢迎大家阅读使用并反馈建议
* [京东图书][1]
* [China-Pub](http://product.china-pub.com/8052127)
## 鼓励项目
欢迎鼓励项目一杯 coffee~
<p align="center">
<img width="200" src="https://github.com/yeasy/docker_practice/raw/master/_images/donate.jpeg">
</p>
![coffee](_images/donate.jpeg)
<p align="center"><strong>欢迎鼓励项目一杯 coffee~</strong></p>
[1]: https://union-click.jd.com/jdc?e=&p=AyIGZRtYFAcXBFIZWR0yEgRQH1kXAhs3EUQDS10iXhBeGlcJDBkNXg9JHU4YDk5ER1xOGRNLGEEcVV8BXURFUFdfC0RVU1JRUy1OVxUBFwNXGVscMlVYLlAaXAV1Z1JHA0dWEHVXZTliY1QLWStaJQAWB10fXhwKEDdlG1wlUHzf462DsLMO0%2F%2BUjp2VIgZlG18RBBcCUBlbEAoTBWUcWxwySVI7HAhBBxEOBUgOFQYQUGUraxYyIjdVK1glQHxXUEhYEVEUUFQcC0IHGgRRSAgVARAPAhsLFgNCDl0ZWiUAEwZREg%3D%3D&t=W1dCFFlQCxxKQgFHREkdSVJKSQVJHFRXFk9FUlpGQUpLCVBaTFhbXQtWVmpSWRtYEAYQBVUS

View File

@@ -1,8 +1,8 @@
# Summary
# [Docker 从入门到实践](https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md)
* [前言](README.md)
* [修订记录](revision.md)
* [如何贡献](contribute.md)
* [修订记录](CHANGELOG.md)
* [如何贡献](CONTRIBUTING.md)
* [Docker 简介](introduction/README.md)
* [什么是 Docker](introduction/what.md)
* [为什么要用 Docker](introduction/why.md)
@@ -11,13 +11,21 @@
* [容器](basic_concept/container.md)
* [仓库](basic_concept/repository.md)
* [安装 Docker](install/README.md)
* [UbuntuDebian](install/ubuntu.md)
* [Ubuntu](install/ubuntu.md)
* [Debian](install/debian.md)
* [Fedora](install/fedora.md)
* [CentOS](install/centos.md)
* [CentOS8](install/centos8.md)
* [Raspberry Pi](install/raspberry-pi.md)
* [Linux 离线安装](install/offline.md)
* [macOS](install/mac.md)
* [Windows 10](install/windows.md)
* [镜像加速器](install/mirror.md)
* [开启实验特性](install/experimental.md)
* [使用镜像](image/README.md)
* [获取镜像](image/pull.md)
* [列出镜像](image/list.md)
* [删除本地镜像](image/rm.md)
* [利用 commit 理解镜像构成](image/commit.md)
* [使用 Dockerfile 定制镜像](image/build.md)
* [Dockerfile 指令详解](image/dockerfile/README.md)
@@ -33,31 +41,35 @@
* [USER 指定当前用户](image/dockerfile/user.md)
* [HEALTHCHECK 健康检查](image/dockerfile/healthcheck.md)
* [ONBUILD 为他人作嫁衣裳](image/dockerfile/onbuild.md)
* [LABEL 为镜像添加元数据](image/dockerfile/label.md)
* [SHELL 指令](image/dockerfile/shell.md)
* [参考文档](image/dockerfile/references.md)
* [Dockerfile 多阶段构建](image/multistage-builds/README.md)
* [实战多阶段构建 Laravel 镜像](image/multistage-builds/laravel.md)
* [构建多种系统架构支持的 Docker 镜像](image/manifest.md)
* [其它制作镜像的方式](image/other.md)
* [删除本地镜像](image/rmi.md)
* [实现原理](image/internal.md)
* [操作容器](container/README.md)
* [启动](container/run.md)
* [守护态运行](container/daemon.md)
* [终止](container/stop.md)
* [进入容器](container/enter.md)
* [进入容器](container/attach_exec.md)
* [导出和导入](container/import_export.md)
* [删除](container/rm.md)
* [访问仓库](repository/README.md)
* [Docker Hub](repository/dockerhub.md)
* [私有仓库](repository/local_repo.md)
* [配置文件](repository/config.md)
* [私有仓库](repository/registry.md)
* [私有仓库高级配置](repository/registry_auth.md)
* [Nexus 3](repository/nexus3_registry.md)
* [数据管理](data_management/README.md)
* [数据卷](data_management/volume.md)
* [数据卷容器](data_management/container.md)
* [备份恢复迁移数据卷](data_management/management.md)
* [挂载主机目录](data_management/bind-mounts.md)
* [使用网络](network/README.md)
* [外部访问容器](network/port_mapping.md)
* [容器互联](network/linking.md)
* [配置 DNS](network/dns.md)
* [高级网络配置](advanced_network/README.md)
* [快速配置指南](advanced_network/quick_guide.md)
* [配置 DNS](advanced_network/dns.md)
* [容器访问控制](advanced_network/access_control.md)
* [端口映射实现](advanced_network/port_mapping.md)
* [配置 docker0 网桥](advanced_network/docker0.md)
@@ -65,6 +77,28 @@
* [工具和示例](advanced_network/example.md)
* [编辑网络配置文件](advanced_network/config_file.md)
* [实例创建一个点到点连接](advanced_network/ptp.md)
* [Docker Buildx](buildx/README.md)
* [BuildKit](buildx/buildkit.md)
* [使用 buildx 构建镜像](buildx/buildx.md)
* [使用 buildx 构建多种系统架构支持的 Docker 镜像](buildx/multi-arch-images.md)
* [Docker Compose](compose/README.md)
* [简介](compose/introduction.md)
* [安装与卸载](compose/install.md)
* [使用](compose/usage.md)
* [命令说明](compose/commands.md)
* [Compose 模板文件](compose/compose_file.md)
* [实战 Django](compose/django.md)
* [实战 Rails](compose/rails.md)
* [实战 WordPress](compose/wordpress.md)
* [实战 LNMP](compose/lnmp.md)
* [Swarm mode](swarm_mode/README.md)
* [基本概念](swarm_mode/overview.md)
* [创建 Swarm 集群](swarm_mode/create.md)
* [部署服务](swarm_mode/deploy.md)
* [使用 compose 文件](swarm_mode/stack.md)
* [管理密钥](swarm_mode/secret.md)
* [管理配置信息](swarm_mode/config.md)
* [滚动升级](swarm_mode/rolling_update.md)
* [安全](security/README.md)
* [内核命名空间](security/kernel_ns.md)
* [控制组](security/control_group.md)
@@ -79,73 +113,73 @@
* [联合文件系统](underly/ufs.md)
* [容器格式](underly/container_format.md)
* [网络](underly/network.md)
* [Docker 三剑客之 Compose 项目](compose/README.md)
* [简介](compose/intro.md)
* [安装与卸载](compose/install.md)
* [使用](compose/usage.md)
* [命令说明](compose/commands.md)
* [YAML 模板文件](compose/yaml_file.md)
* [实战 Django](compose/django.md)
* [实战 Rails](compose/rails.md)
* [实战 wordpress](compose/wordpress.md)
* [Docker 三剑客之 Machine 项目](machine/README.md)
* [简介](machine/intro.md)
* [安装](machine/install.md)
* [使用](machine/usage.md)
* [Docker 三剑客之 Docker Swarm](swarm/README.md)
* [Swarm 简介](swarm/intro.md)
* [安装 Swarm](swarm/install.md)
* [使用 Swarm](swarm/usage.md)
* [使用其它服务发现后端](swarm/servicebackend.md)
* [Swarm 中的调度器](swarm/scheduling.md)
* [Swarm 中的过滤器](swarm/filter.md)
* [本章小结](swarm/summary.md)
* [Etcd 项目](etcd/README.md)
* [简介](etcd/intro.md)
* [安装](etcd/install.md)
* [集群](etcd/cluster.md)
* [使用 etcdctl](etcd/etcdctl.md)
* [CoreOS 项目](coreos/README.md)
* [Fedora CoreOS](coreos/README.md)
* [简介](coreos/intro.md)
* [工具](coreos/intro_tools.md)
* [快速搭建CoreOS集群](coreos/quickstart.md)
* [Kubernetes 项目](kubernetes/README.md)
* [安装](coreos/install.md)
* [Kubernetes - 开源容器编排引擎](kubernetes/README.md)
* [简介](kubernetes/intro.md)
* [快速上手](kubernetes/quickstart.md)
* [基本概念](kubernetes/concepts.md)
* [kubectl 使用](kubernetes/kubectl.md)
* [架构设计](kubernetes/design.md)
* [Mesos - 优秀的集群资源调度平台](mesos/README.md)
* [Mesos 简介](mesos/intro.md)
* [安装与使用](mesos/installation.md)
* [原理与架构](mesos/architecture.md)
* [Mesos 配置项解析](mesos/configuration.md)
* [日志与监控](mesos/monitor.md)
* [常见应用框架](mesos/framework.md)
* [本章小结](mesos/summary.md)
* [部署 Kubernetes](kubernetes/setup/README.md)
* [使用 kubeadm 部署 kubernetes](kubernetes/setup/kubeadm.md)
* [ Docker Desktop 使用](kubernetes/setup/docker-desktop.md)
* [一步步部署 kubernetes 集群](kubernetes/setup/systemd.md)
* [部署 Dashboard](kubernetes/setup/dashboard.md)
* [Kubernetes 命令行 kubectl](kubernetes/kubectl/README.md)
* [容器与云计算](cloud/README.md)
* [简介](cloud/intro.md)
* [亚马逊](cloud/aws.md)
* [腾讯云](cloud/qcloud.md)
* [腾讯](cloud/tencentCloud.md)
* [阿里云](cloud/alicloud.md)
* [亚马逊云](cloud/aws.md)
* [小结](cloud/summary.md)
* [实战案例-操作系统](cases/os/README.md)
* [实战案例 - 操作系统](cases/os/README.md)
* [Busybox](cases/os/busybox.md)
* [Alpine](cases/os/alpine.md)
* [Debian\/Ubuntu](cases/os/debian.md)
* [CentOS\/Fedora](cases/os/centos.md)
* [CoreOS](cases/os/coreos.md)
* [Debian Ubuntu](cases/os/debian.md)
* [CentOS Fedora](cases/os/centos.md)
* [本章小结](cases/os/summary.md)
* [实战案例 - CI/CD](cases/ci/README.md)
* [GitHub Actions](cases/ci/actions/README.md)
* [Drone](cases/ci/drone/README.md)
* [部署 Drone](cases/ci/drone/install.md)
* [Travis CI](cases/ci/travis/README.md)
* [ IDE 中使用 Docker](ide/README.md)
* [VS Code](ide/vsCode.md)
* [podman - 下一代 Linux 容器工具](podman/README.md)
* [附录](appendix/README.md)
* [附录一常见问题总结](appendix/faq/README.md)
* [附录二热门镜像介绍](appendix/repo/README.md)
* [Ubuntu](appendix/repo/ubuntu.md)
* [CentOS](appendix/repo/centos.md)
* [Nginx](appendix/repo/nginx.md)
* [PHP](appendix/repo/php.md)
* [Node.js](appendix/repo/nodejs.md)
* [MySQL](appendix/repo/mysql.md)
* [WordPress](appendix/repo/wordpress.md)
* [MongoDB](appendix/repo/mongodb.md)
* [Redis](appendix/repo/redis.md)
* [Nginx](appendix/repo/nginx.md)
* [WordPress](appendix/repo/wordpress.md)
* [Node.js](appendix/repo/nodejs.md)
* [Minio](appendix/repo/minio.md)
* [附录三Docker 命令查询](appendix/command/README.md)
* [附录四资源链接](appendix/resources/README.md)
* [客户端命令 - docker](appendix/command/docker.md)
* [服务端命令 - dockerd](appendix/command/dockerd.md)
* [附录四Dockerfile 最佳实践](appendix/best_practices.md)
* [附录五如何调试 Docker](appendix/debug.md)
* [附录六资源链接](appendix/resources.md)
* [归档](archive/README.md)
* [Mesos - 优秀的集群资源调度平台](mesos/README.md)
* [Mesos 简介](mesos/intro.md)
* [安装与使用](mesos/installation.md)
* [原理与架构](mesos/architecture.md)
* [Mesos 配置项解析](mesos/configuration.md)
* [日志与监控](mesos/monitor.md)
* [常见应用框架](mesos/framework.md)
* [本章小结](mesos/summary.md)
* [Docker Machine](machine/README.md)
* [安装](machine/install.md)
* [使用](machine/usage.md)
* [Docker Swarm](swarm/README.md)

2
_config.yml Normal file
View File

@@ -0,0 +1,2 @@
theme: jekyll-theme-slate
include: [_images]

BIN
_images/docker_primer3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

@@ -1,12 +0,0 @@
{% extends template.self %}
{% block head %}
{{ super() }}
<style>
@media only screen and (max-width: 640px) {
.book-header .btn[aria-label="github"] {
display: none;
}
}
</style>
{% endblock %}

View File

@@ -1,49 +0,0 @@
# Some useful commands to use docker.
# Author: yeasy@github
# Created:2014-09-25
alias docker-pid="sudo docker inspect --format '{{.State.Pid}}'"
alias docker-ip="sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}'"
#the implementation refs from https://github.com/jpetazzo/nsenter/blob/master/docker-enter
function docker-enter() {
#if [ -e $(dirname "$0")/nsenter ]; then
#Change for centos bash running
if [ -e $(dirname '$0')/nsenter ]; then
# with boot2docker, nsenter is not in the PATH but it is in the same folder
NSENTER=$(dirname "$0")/nsenter
else
# if nsenter has already been installed with path notified, here will be clarified
NSENTER=$(which nsenter)
#NSENTER=nsenter
fi
[ -z "$NSENTER" ] && echo "WARN Cannot find nsenter" && return
if [ -z "$1" ]; then
echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]"
echo ""
echo "Enters the Docker CONTAINER and executes the specified COMMAND."
echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
else
PID=$(sudo docker inspect --format "{{.State.Pid}}" "$1")
if [ -z "$PID" ]; then
echo "WARN Cannot find the given container"
return
fi
shift
OPTS="--target $PID --mount --uts --ipc --net --pid"
if [ -z "$1" ]; then
# No command given.
# Use su to clear all host environment variables except for TERM,
# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
# and start a login shell.
#sudo $NSENTER "$OPTS" su - root
sudo $NSENTER --target $PID --mount --uts --ipc --net --pid su - root
else
# Use env to clear all host environment variables.
sudo $NSENTER --target $PID --mount --uts --ipc --net --pid env -i $@
fi
fi
}

Binary file not shown.

View File

@@ -1,13 +0,0 @@
#!/bin/sh
# This script will update all local images
# See: https://github.com/yeasy/docker_practice/blob/master/_local/pull_all.sh
# Usage: pull_all
# Author: yeasy@github
# Create: 2014-09-23
for image in `sudo docker images|grep -v "REPOSITORY"|grep -v "<none>"|awk '{print $1":"$2}'`
do
sudo docker pull $image
done

View File

@@ -1,12 +0,0 @@
#!/bin/sh
# This script will upload all local images to a registry server ($registry is the default value).
# This script requires the push_images, which can be found at https://github.com/yeasy/docker_practice/blob/master/_local/push_images.sh
# Usage: push_all
# Author: yeasy@github
# Create: 2014-09-23
for image in `sudo docker images|grep -v "REPOSITORY"|grep -v "<none>"|awk '{print $1":"$2}'`
do
push_images $image
done

View File

@@ -1,47 +0,0 @@
#!/bin/sh
# This script will upload the given local images to a registry server ($registry is the default value).
# See: https://github.com/yeasy/docker_practice/blob/master/_local/push_images.sh
# Usage: push_images image1 [image2...]
# Author: yeasy@github
# Create: 2014-09-23
#The registry server address where you want push the images into
registry=127.0.0.1:5000
### DO NOT MODIFY THE FOLLOWING PART, UNLESS YOU KNOW WHAT IT MEANS ###
echo_r () {
[ $# -ne 1 ] && return 0
echo -e "\033[31m$1\033[0m"
}
echo_g () {
[ $# -ne 1 ] && return 0
echo -e "\033[32m$1\033[0m"
}
echo_y () {
[ $# -ne 1 ] && return 0
echo -e "\033[33m$1\033[0m"
}
echo_b () {
[ $# -ne 1 ] && return 0
echo -e "\033[34m$1\033[0m"
}
usage() {
sudo docker images
echo "Usage: $0 registry1:tag1 [registry2:tag2...]"
}
[ $# -lt 1 ] && usage && exit
echo_b "The registry server is $registry"
for image in "$@"
do
echo_b "Uploading $image..."
sudo docker tag $image $registry/$image
sudo docker push $registry/$image
sudo docker rmi $registry/$image
echo_g "Done"
done

View File

@@ -1,9 +1,12 @@
# 高级网络配置
>注意本章属于 `Docker` 高级配置如果您是初学者您可以暂时跳过本章节直接学习 [Docker Compose](../compose) 一节
本章将介绍 Docker 的一些高级网络配置和选项
Docker 启动时会自动在主机上创建一个 `docker0` 虚拟网桥实际上是 Linux 的一个 bridge可以理解为一个软件交换机它会在挂载到它的网口之间进行转发
同时Docker 随机分配一个本地未占用的私有网段 [RFC1918](http://tools.ietf.org/html/rfc1918) 中定义)中的一个地址给 `docker0` 接口。比如典型的 `172.17.42.1`,掩码为 `255.255.0.0`。此后启动的容器内的网口也会自动分配一个同一网段(`172.17.0.0/16`)的地址。
同时Docker 随机分配一个本地未占用的私有网段 [RFC1918](https://tools.ietf.org/html/rfc1918) 中定义)中的一个地址给 `docker0` 接口。比如典型的 `172.17.42.1`,掩码为 `255.255.0.0`。此后启动的容器内的网口也会自动分配一个同一网段(`172.17.0.0/16`)的地址。
当创建一个 Docker 容器的时候同时会创建了一对 `veth pair` 接口当数据包发送到一个接口时另外一个接口也可以收到相同的数据包这对接口一端在容器内 `eth0`另一端在本地并被挂载到 `docker0` 网桥名称以 `veth` 开头例如 `vethAQI2QT`通过这种方式主机可以跟容器通信容器之间也可以相互通信Docker 就创建了在主机和所有容器之间一个虚拟共享网络

View File

@@ -1,36 +1,36 @@
## 容器访问控制
# 容器访问控制
容器的访问控制主要通过 Linux 上的 `iptables` 防火墙来进行管理和实现`iptables` Linux 上默认的防火墙软件在大部分发行版中都自带
### 容器访问外部网络
## 容器访问外部网络
容器要想访问外部网络需要本地系统的转发支持在Linux 系统中检查转发是否打开
```
```bash
$sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
```
如果为 0说明没有开启转发则需要手动打开
```
```bash
$sysctl -w net.ipv4.ip_forward=1
```
如果在启动 Docker 服务的时候设定 `--ip-forward=true`, Docker 就会自动设定系统的 `ip_forward` 参数为 1
### 容器之间访问
## 容器之间访问
容器之间相互访问需要两方面的支持
* 容器的网络拓扑是否已经互联默认情况下所有容器都会被连接到 `docker0` 网桥上
* 本地系统的防火墙软件 -- `iptables` 是否允许通过
#### 访问所有端口
当启动 Docker 服务时候默认会添加一条转发策略到 iptables FORWARD 链上策略为通过`ACCEPT`还是禁止`DROP`取决于配置`--icc=true`缺省值还是 `--icc=false`当然如果手动指定 `--iptables=false` 则不会添加 `iptables` 规则
### 访问所有端口
当启动 Docker 服务 dockerd时候默认会添加一条转发策略到本地主机 iptables FORWARD 链上策略为通过`ACCEPT`还是禁止`DROP`取决于配置`--icc=true`缺省值还是 `--icc=false`当然如果手动指定 `--iptables=false` 则不会添加 `iptables` 规则
可见默认情况下不同容器之间是允许网络互通的如果为了安全考虑可以在 `/etc/default/docker` 文件中配置 `DOCKER_OPTS=--icc=false` 来禁止它
可见默认情况下不同容器之间是允许网络互通的如果为了安全考虑可以在 `/etc/docker/daemon.json` 文件中配置 `{"icc": false}` 来禁止它
#### 访问指定端口
### 访问指定端口
在通过 `-icc=false` 关闭网络访问后还可以通过 `--link=CONTAINER_NAME:ALIAS` 选项来访问容器的开放端口
例如在启动 Docker 服务时可以同时使用 `icc=false --iptables=true` 参数来关闭允许相互的网络访问并让 Docker 可以修改系统中的 `iptables` 规则
此时系统中的 `iptables` 规则可能是类似
```
```bash
$ sudo iptables -nL
...
Chain FORWARD (policy ACCEPT)
@@ -39,10 +39,10 @@ DROP all -- 0.0.0.0/0 0.0.0.0/0
...
```
之后启动容器`docker run`时使用 `--link=CONTAINER_NAME:ALIAS` 选项Docker 会在 `iptable` 中为 两个容器分别添加一条 `ACCEPT` 规则允许相互访问开放的端口取决于 Dockerfile 中的 EXPOSE
之后启动容器`docker run`时使用 `--link=CONTAINER_NAME:ALIAS` 选项Docker 会在 `iptable` 中为 两个容器分别添加一条 `ACCEPT` 规则允许相互访问开放的端口取决于 `Dockerfile` 中的 `EXPOSE` 指令
当添加了 `--link=CONTAINER_NAME:ALIAS` 选项后添加了 `iptables` 规则
```
```bash
$ sudo iptables -nL
...
Chain FORWARD (policy ACCEPT)

View File

@@ -1,34 +1,45 @@
## 自定义网桥
# 自定义网桥
除了默认的 `docker0` 网桥用户也可以指定网桥来连接各个容器
在启动 Docker 服务的时候使用 `-b BRIDGE``--bridge=BRIDGE` 来指定使用的网桥
如果服务已经运行那需要先停止服务并删除旧的网桥
```
$ sudo service docker stop
```bash
$ sudo systemctl stop docker
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0
```
然后创建一个网桥 `bridge0`
```
```bash
$ sudo brctl addbr bridge0
$ sudo ip addr add 192.168.5.1/24 dev bridge0
$ sudo ip link set dev bridge0 up
```
查看确认网桥创建并启动
```
```bash
$ ip addr show bridge0
4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
link/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.1/24 scope global bridge0
valid_lft forever preferred_lft forever
```
配置 Docker 服务默认桥接到创建的网桥上
```
$ echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
$ sudo service docker start
Docker 配置文件 `/etc/docker/daemon.json` 中添加如下内容即可将 Docker 默认桥接到创建的网桥上
```json
{
"bridge": "bridge0",
}
```
启动 Docker 服务
新建一个容器可以看到它已经桥接到了 `bridge0`
可以继续用 `brctl show` 命令查看桥接的信息另外在容器中可以使用 `ip addr` `ip route` 命令来查看 IP 地址配置和路由信息

View File

@@ -1,5 +1,5 @@
## 编辑网络配置文件
# 编辑网络配置文件
Docker 1.2.0 开始支持在运行中的容器里编辑 `/etc/hosts`, `/etc/hostname` `/etc/resolve.conf` 文件
Docker 1.2.0 开始支持在运行中的容器里编辑 `/etc/hosts`, `/etc/hostname` `/etc/resolv.conf` 文件
但是这些修改是临时的只在运行的容器中保留容器终止或重启后并不会被保存下来也不会被 `docker commit` 提交
但是这些修改是临时的只在运行的容器中保留容器终止或重启后并不会被保存下来也不会被 `docker commit` 提交

View File

@@ -1,29 +0,0 @@
## 配置 DNS
Docker 没有为每个容器专门定制镜像那么怎么自定义配置容器的主机名和 DNS 配置呢
秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件
在容器中使用 mount 命令可以看到挂载信息
```
$ mount
...
/dev/disk/by-uuid/1fec...ebdf on /etc/hostname type ext4 ...
/dev/disk/by-uuid/1fec...ebdf on /etc/hosts type ext4 ...
tmpfs on /etc/resolv.conf type tmpfs ...
...
```
这种机制可以让宿主主机 DNS 信息发生更新后所有 Docker 容器的 dns 配置通过 `/etc/resolv.conf` 文件立刻得到更新
如果用户想要手动指定容器的配置可以利用下面的选项
`-h HOSTNAME or --hostname=HOSTNAME`
设定容器的主机名它会被写到容器内的 `/etc/hostname` `/etc/hosts`但它在容器外部看不到既不会在 `docker ps` 中显示也不会在其他的容器的 `/etc/hosts` 看到
`--link=CONTAINER_NAME:ALIAS`
选项会在创建容器的时候添加一个其他容器的主机名到 `/etc/hosts` 文件中让新容器的进程可以使用主机名 ALIAS 就可以连接它
`--dns=IP_ADDRESS`
添加 DNS 服务器到容器的 `/etc/resolv.conf` 让容器用这个服务器来解析所有不在 `/etc/hosts` 中的主机名
`--dns-search=DOMAIN`
设定容器的搜索域当设定搜索域为 `.example.com` 在搜索一个名为 host 的主机时DNS 不仅搜索host还会搜索 `host.example.com`
注意如果没有上述最后 2 个选项Docker 会默认用主机上的 `/etc/resolv.conf` 来配置容器

View File

@@ -1,13 +1,17 @@
## 配置 docker0 网桥
# 配置 docker0 网桥
Docker 服务默认会创建一个 `docker0` 网桥其上有一个 `docker0` 内部接口它在内核层连通了其他的物理或虚拟网卡这就将所有容器和本地主机都放到同一个物理网络
Docker 默认指定了 `docker0` 接口 IP 地址和子网掩码让主机和容器之间可以通过网桥相互通信它还给出了 MTU接口允许接收的最大传输单元通常是 1500 Bytes或宿主主机网络路由上支持的默认值这些值都可以在服务启动的时候进行配置
* `--bip=CIDR` -- IP 地址加掩码格式例如 192.168.1.5/24
* `--mtu=BYTES` -- 覆盖默认的 Docker mtu 配置
* `--bip=CIDR` IP 地址加掩码格式例如 192.168.1.5/24
* `--mtu=BYTES` 覆盖默认的 Docker mtu 配置
也可以在配置文件中配置 DOCKER_OPTS然后重启服务
由于目前 Docker 网桥是 Linux 网桥用户可以使用 `brctl show` 来查看网桥和端口连接信息
```
```bash
$ sudo brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.3a1d7362b4ee no veth65f9
@@ -17,7 +21,8 @@ docker0 8000.3a1d7362b4ee no veth65f9
每次创建一个新容器的时候Docker 从可用的地址段中选择一个空闲的 IP 地址分配给容器的 eth0 端口使用本地主机上 `docker0` 接口的 IP 作为所有容器的默认网关
```
```bash
$ sudo docker run -i -t --rm base /bin/bash
$ ip addr show eth0
24: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
@@ -29,5 +34,4 @@ $ ip addr show eth0
$ ip route
default via 172.17.42.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.3
$ exit
```

View File

@@ -1,8 +1,8 @@
## 工具和示例
# 工具和示例
在介绍自定义网络拓扑之前你可能会对一些外部工具和例子感兴趣
### pipework
## pipework
Jérôme Petazzoni 编写了一个叫 [pipework](https://github.com/jpetazzo/pipework) 的 shell 脚本,可以帮助用户在比较复杂的场景中完成容器的连接。
### playground
Brandon Rhodes 创建了一个提供完整的 Docker 容器网络拓扑管理的 [Python库](https://github.com/brandon-rhodes/fopnp/tree/m/playground)包括路由、NAT 防火墙;以及一些提供 HTTP, SMTP, POP, IMAP, Telnet, SSH, FTP 的服务器。
## playground
Brandon Rhodes 创建了一个提供完整的 Docker 容器网络拓扑管理的 [Python库](https://github.com/brandon-rhodes/fopnp/tree/m/playground)包括路由、NAT 防火墙;以及一些提供 `HTTP` `SMTP` `POP` `IMAP` `Telnet` `SSH` `FTP` 的服务器。

View File

@@ -1,11 +1,14 @@
## 映射容器端口到宿主主机的实现
# 映射容器端口到宿主主机的实现
默认情况下容器可以主动访问到外部网络的连接但是外部网络无法访问到容器
### 容器访问外部实现
容器所有到外部网络的连接源地址都会被NAT成本地系统的IP地址这是使用 `iptables` 的源地址伪装操作实现的
## 容器访问外部实现
容器所有到外部网络的连接源地址都会被 NAT 成本地系统的 IP 地址这是使用 `iptables` 的源地址伪装操作实现的
查看主机的 NAT 规则
```
```bash
$ sudo iptables -t nat -nL
...
Chain POSTROUTING (policy ACCEPT)
@@ -13,16 +16,18 @@ target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 !172.17.0.0/16
...
```
其中上述规则将所有源地址在 `172.17.0.0/16` 网段目标地址为其他网段外部网络的流量动态伪装为从系统网卡发出MASQUERADE 跟传统 SNAT 的好处是它能动态从网卡获取地址
### 外部访问容器实现
## 外部访问容器实现
容器允许外部访问可以在 `docker run` 时候通过 `-p` `-P` 参数来启用
不管用那种办法其实也是在本地的 `iptable` nat 表中添加相应的规则
使用 `-P`
```
```bash
$ iptables -t nat -nL
...
Chain DOCKER (2 references)
@@ -31,13 +36,22 @@ DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:49153 to:1
```
使用 `-p 80:80`
```
```bash
$ iptables -t nat -nL
Chain DOCKER (2 references)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:80
```
注意
* 这里的规则映射了 0.0.0.0意味着将接受主机来自所有接口的流量用户可以通过 `-p IP:host_port:container_port` `-p
IP::port` 来指定允许访问容器的主机上的 IP接口等以制定更严格的规则
* 如果希望永久绑定到某个固定的 IP 地址可以在 Docker 配置文件 `/etc/default/docker` 中指定 `DOCKER_OPTS="--ip=IP_ADDRESS"`之后重启 Docker 服务即可生效
* 这里的规则映射了 `0.0.0.0`意味着将接受主机来自所有接口的流量用户可以通过 `-p IP:host_port:container_port` `-p IP::port` 来指定允许访问容器的主机上的 IP接口等以制定更严格的规则
* 如果希望永久绑定到某个固定的 IP 地址可以在 Docker 配置文件 `/etc/docker/daemon.json` 中添加如下内容
```json
{
"ip": "0.0.0.0"
}
```

View File

@@ -1,4 +1,4 @@
## 示例创建一个点到点连接
# 示例创建一个点到点连接
默认情况下Docker 会将所有容器连接到由 `docker0` 提供的虚拟子网中
用户有时候需要两个容器之间可以直连通信而不用通过主机网桥进行桥接
@@ -6,18 +6,18 @@
解决办法很简单创建一对 `peer` 接口分别放到两个容器中配置成点到点链路类型即可
首先启动 2 个容器
```
$ sudo docker run -i -t --rm --net=none base /bin/bash
```bash
$ docker run -i -t --rm --net=none base /bin/bash
root@1f1f4c1f931a:/#
$ sudo docker run -i -t --rm --net=none base /bin/bash
$ docker run -i -t --rm --net=none base /bin/bash
root@12e343489d2f:/#
```
找到进程号然后创建网络命名空间的跟踪文件
```
$ sudo docker inspect -f '{{.State.Pid}}' 1f1f4c1f931a
```bash
$ docker inspect -f '{{.State.Pid}}' 1f1f4c1f931a
2989
$ sudo docker inspect -f '{{.State.Pid}}' 12e343489d2f
$ docker inspect -f '{{.State.Pid}}' 12e343489d2f
3004
$ sudo mkdir -p /var/run/netns
$ sudo ln -s /proc/2989/ns/net /var/run/netns/2989
@@ -25,7 +25,7 @@ $ sudo ln -s /proc/3004/ns/net /var/run/netns/3004
```
创建一对 `peer` 接口然后配置路由
```
```bash
$ sudo ip link add A type veth peer name B
$ sudo ip link set A netns 2989

View File

@@ -1,23 +1,26 @@
## 快速配置指南
# 快速配置指南
下面是一个跟 Docker 网络相关的命令列表
其中有些命令选项只有在 Docker 服务启动的时候才能配置而且不能马上生效
* `-b BRIDGE or --bridge=BRIDGE` --指定容器挂载的网桥
* `--bip=CIDR` --定制 docker0 的掩码
* `-H SOCKET... or --host=SOCKET...` --Docker 服务端接收命令的通道
* `--icc=true|false` --是否支持容器之间进行通信
* `--ip-forward=true|false` --请看下文容器之间的通信
* `--iptables=true|false` --是否允许 Docker 添加 iptables 规则
* `--mtu=BYTES` --容器网络中的 MTU
下面2个命令选项既可以在启动服务时指定也可以 Docker 容器启动`docker run`时候指定 Docker 服务启动的时候指定则会成为默认值后面执行 `docker run` 时可以覆盖设置的默认值
* `--dns=IP_ADDRESS...` --使用指定的DNS服务器
* `--dns-search=DOMAIN...` --指定DNS搜索域
* `-b BRIDGE` `--bridge=BRIDGE` 指定容器挂载的网桥
* `--bip=CIDR` 定制 docker0 的掩码
* `-H SOCKET...` `--host=SOCKET...` Docker 服务端接收命令的通道
* `--icc=true|false` 是否支持容器之间进行通信
* `--ip-forward=true|false` 请看下文容器之间的通信
* `--iptables=true|false` 是否允许 Docker 添加 iptables 规则
* `--mtu=BYTES` 容器网络中的 MTU
下面2个命令选项既可以在启动服务时指定也可以在启动容器时指定 Docker 服务启动的时候指定则会成为默认值后面执行 `docker run` 时可以覆盖设置的默认值
* `--dns=IP_ADDRESS...` 使用指定的DNS服务器
* `--dns-search=DOMAIN...` 指定DNS搜索域
最后这些选项只有在 `docker run` 执行时使用因为它是针对容器的特性内容
* `-h HOSTNAME or --hostname=HOSTNAME` --配置容器主机名
* `--link=CONTAINER_NAME:ALIAS` --添加到另一个容器的连接
* `--net=bridge|none|container:NAME_or_ID|host` --配置容器的桥接模式
* `-p SPEC or --publish=SPEC` --映射容器端口到宿主主机
* `-P or --publish-all=true|false` --映射容器所有端口到宿主主机
* `-h HOSTNAME` `--hostname=HOSTNAME` 配置容器主机名
* `--link=CONTAINER_NAME:ALIAS` 添加到另一个容器的连接
* `--net=bridge|none|container:NAME_or_ID|host` 配置容器的桥接模式
* `-p SPEC` `--publish=SPEC` 映射容器端口到宿主主机
* `-P or --publish-all=true|false` 映射容器所有端口到宿主主机

344
appendix/best_practices.md Normal file
View File

@@ -0,0 +1,344 @@
# Dockerfile 最佳实践
本附录是笔者对 Docker 官方文档中 [Best practices for writing Dockerfiles](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/) 的理解与翻译。
## 一般性的指南和建议
### 容器应该是短暂的
通过 `Dockerfile` 构建的镜像所启动的容器应该尽可能短暂生命周期短短暂意味着可以停止和销毁容器并且创建一个新容器并部署好所需的设置和配置工作量应该是极小的
### 使用 `.dockerignore` 文件
使用 `Dockerfile` 构建镜像时最好是将 `Dockerfile` 放置在一个新建的空目录下然后将构建镜像所需要的文件添加到该目录中为了提高构建镜像的效率你可以在目录下新建一个 `.dockerignore` 文件来指定要忽略的文件和目录`.dockerignore` 文件的排除模式语法和 Git `.gitignore` 文件相似
### 使用多阶段构建
`Docker 17.05` 以上版本中你可以使用 [多阶段构建](../image/multistage-builds.md) 来减少所构建镜像的大小
### 避免安装不必要的包
为了降低复杂性减少依赖减小文件大小节约构建时间你应该避免安装任何不必要的包例如不要在数据库镜像中包含一个文本编辑器
### 一个容器只运行一个进程
应该保证在一个容器中只运行一个进程将多个应用解耦到不同容器中保证了容器的横向扩展和复用例如 web 应用应该包含三个容器web应用数据库缓存
如果容器互相依赖你可以使用 [Docker 自定义网络](../network/linking.md) 来把这些容器连接起来
### 镜像层数尽可能少
你需要在 `Dockerfile` 可读性也包括长期的可维护性和减少层数之间做一个平衡
### 将多行参数排序
将多行参数按字母顺序排序比如要安装多个包时这可以帮助你避免重复包含同一个包更新包列表时也更容易也便于 `PRs` 阅读和审查建议在反斜杠符号 `\` 之前添加一个空格以增加可读性
下面是来自 `buildpack-deps` 镜像的例子
```docker
RUN apt-get update && apt-get install -y \
bzr \
cvs \
git \
mercurial \
subversion
```
### 构建缓存
在镜像的构建过程中Docker 会遍历 `Dockerfile` 文件中的指令然后按顺序执行在执行每条指令之前Docker 都会在缓存中查找是否已经存在可重用的镜像如果有就使用现存的镜像不再重复创建如果你不想在构建过程中使用缓存你可以在 `docker build` 命令中使用 `--no-cache=true` 选项
但是如果你想在构建的过程中使用缓存你得明白什么时候会什么时候不会找到匹配的镜像遵循的基本规则如下
* 从一个基础镜像开始`FROM` 指令指定下一条指令将和该基础镜像的所有子镜像进行匹配检查这些子镜像被创建时使用的指令是否和被检查的指令完全一样如果不是则缓存失效
* 在大多数情况下只需要简单地对比 `Dockerfile` 中的指令和子镜像然而有些指令需要更多的检查和解释
* 对于 `ADD` `COPY` 指令镜像中对应文件的内容也会被检查每个文件都会计算出一个校验和文件的最后修改时间和最后访问时间不会纳入校验在缓存的查找过程中会将这些校验和和已存在镜像中的文件校验和进行对比如果文件有任何改变比如内容和元数据则缓存失效
* 除了 `ADD` `COPY` 指令缓存匹配过程不会查看临时容器中的文件来决定缓存是否匹配例如当执行完 `RUN apt-get -y update` 指令后容器中一些文件被更新 Docker 不会检查这些文件这种情况下只有指令字符串本身被用来匹配缓存
一旦缓存失效所有后续的 `Dockerfile` 指令都将产生新的镜像缓存不会被使用
## Dockerfile 指令
下面针对 `Dockerfile` 中各种指令的最佳编写方式给出建议
### FROM
尽可能使用当前官方仓库作为你构建镜像的基础推荐使用 [Alpine](https://hub.docker.com/_/alpine/) 镜像,因为它被严格控制并保持最小尺寸(目前小于 5 MB但它仍然是一个完整的发行版。
### LABEL
你可以给镜像添加标签来帮助组织镜像记录许可信息辅助自动化构建等每个标签一行 `LABEL` 开头加上一个或多个标签对下面的示例展示了各种不同的可能格式`#` 开头的行是注释内容
>注意如果你的字符串中包含空格必须将字符串放入引号中或者对空格使用转义如果字符串内容本身就包含引号必须对引号使用转义
```docker
# Set one or more individual labels
LABEL com.example.version="0.0.1-beta"
LABEL vendor="ACME Incorporated"
LABEL com.example.release-date="2015-02-12"
LABEL com.example.version.is-production=""
```
一个镜像可以包含多个标签但建议将多个标签放入到一个 `LABEL` 指令中
```docker
# Set multiple labels at once, using line-continuation characters to break long lines
LABEL vendor=ACME\ Incorporated \
com.example.is-beta= \
com.example.is-production="" \
com.example.version="0.0.1-beta" \
com.example.release-date="2015-02-12"
```
关于标签可以接受的键值对参考 [Understanding object labels](https://docs.docker.com/config/labels-custom-metadata/)。关于查询标签信息,参考 [Managing labels on objects](https://docs.docker.com/config/labels-custom-metadata/)。
### RUN
为了保持 `Dockerfile` 文件的可读性可理解性以及可维护性建议将长的或复杂的 `RUN` 指令用反斜杠 `\` 分割成多行
#### apt-get
`RUN` 指令最常见的用法是安装包用的 `apt-get`因为 `RUN apt-get` 指令会安装包所以有几个问题需要注意
不要使用 `RUN apt-get upgrade` `dist-upgrade`因为许多基础镜像中的必须包不会在一个非特权容器中升级如果基础镜像中的某个包过时了你应该联系它的维护者如果你确定某个特定的包比如 `foo`需要升级使用 `apt-get install -y foo` 就行该指令会自动升级 `foo`
永远将 `RUN apt-get update` `apt-get install` 组合成一条 `RUN` 声明例如
```docker
RUN apt-get update && apt-get install -y \
package-bar \
package-baz \
package-foo
```
`apt-get update` 放在一条单独的 `RUN` 声明中会导致缓存问题以及后续的 `apt-get install` 失败比如假设你有一个 `Dockerfile` 文件
```docker
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y curl
```
构建镜像后所有的层都在 Docker 的缓存中假设你后来又修改了其中的 `apt-get install` 添加了一个包
```docker
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y curl nginx
```
Docker 发现修改后的 `RUN apt-get update` 指令和之前的完全一样所以`apt-get update` 不会执行而是使用之前的缓存镜像因为 `apt-get update` 没有运行后面的 `apt-get install` 可能安装的是过时的 `curl` `nginx` 版本
使用 `RUN apt-get update && apt-get install -y` 可以确保你的 Dockerfiles 每次安装的都是包的最新的版本而且这个过程不需要进一步的编码或额外干预这项技术叫作 `cache busting`你也可以显示指定一个包的版本号来达到 `cache-busting`这就是所谓的固定版本例如
```docker
RUN apt-get update && apt-get install -y \
package-bar \
package-baz \
package-foo=1.3.*
```
固定版本会迫使构建过程检索特定的版本而不管缓存中有什么这项技术也可以减少因所需包中未预料到的变化而导致的失败
下面是一个 `RUN` 指令的示例模板展示了所有关于 `apt-get` 的建议
```docker
RUN apt-get update && apt-get install -y \
aufs-tools \
automake \
build-essential \
curl \
dpkg-sig \
libcap-dev \
libsqlite3-dev \
mercurial \
reprepro \
ruby1.9.1 \
ruby1.9.1-dev \
s3cmd=1.1.* \
&& rm -rf /var/lib/apt/lists/*
```
其中 `s3cmd` 指令指定了一个版本号 `1.1.*`如果之前的镜像使用的是更旧的版本指定新的版本会导致 `apt-get udpate` 缓存失效并确保安装的是新版本
另外清理掉 apt 缓存 `var/lib/apt/lists` 可以减小镜像大小因为 `RUN` 指令的开头为 `apt-get udpate`包缓存总是会在 `apt-get install` 之前刷新
> 注意官方的 Debian Ubuntu 镜像会自动运行 apt-get clean所以不需要显式的调用 apt-get clean
### CMD
`CMD` 指令用于执行目标镜像中包含的软件可以包含参数`CMD` 大多数情况下都应该以 `CMD ["executable", "param1", "param2"...]` 的形式使用因此如果创建镜像的目的是为了部署某个服务(比如 `Apache`)你可能会执行类似于 `CMD ["apache2", "-DFOREGROUND"]` 形式的命令我们建议任何服务镜像都使用这种形式的命令
多数情况下`CMD` 都需要一个交互式的 `shell` (bash, Python, perl )例如 `CMD ["perl", "-de0"]`或者 `CMD ["PHP", "-a"]`使用这种形式意味着当你执行类似 `docker run -it python` 你会进入一个准备好的 `shell` `CMD` 应该在极少的情况下才能以 `CMD ["param", "param"]` 的形式与 `ENTRYPOINT` 协同使用除非你和你的镜像使用者都对 `ENTRYPOINT` 的工作方式十分熟悉
### EXPOSE
`EXPOSE` 指令用于指定容器将要监听的端口因此你应该为你的应用程序使用常见的端口例如提供 `Apache` web 服务的镜像应该使用 `EXPOSE 80`而提供 `MongoDB` 服务的镜像使用 `EXPOSE 27017`
对于外部访问用户可以在执行 `docker run` 时使用一个标志来指示如何将指定的端口映射到所选择的端口
### ENV
为了方便新程序运行你可以使用 `ENV` 来为容器中安装的程序更新 `PATH` 环境变量例如使用 `ENV PATH /usr/local/nginx/bin:$PATH` 来确保 `CMD ["nginx"]` 能正确运行
`ENV` 指令也可用于为你想要容器化的服务提供必要的环境变量比如 Postgres 需要的 `PGDATA`
最后`ENV` 也能用于设置常见的版本号比如下面的示例
```docker
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
```
类似于程序中的常量这种方法可以让你只需改变 `ENV` 指令来自动的改变容器中的软件版本
### ADD COPY
虽然 `ADD` `COPY` 功能类似但一般优先使用 `COPY`因为它比 `ADD` 更透明`COPY` 只支持简单将本地文件拷贝到容器中 `ADD` 有一些并不明显的功能比如本地 tar 提取和远程 URL 支持因此`ADD` 的最佳用例是将本地 tar 文件自动提取到镜像中例如 `ADD rootfs.tar.xz`
如果你的 `Dockerfile` 有多个步骤需要使用上下文中不同的文件单独 `COPY` 每个文件而不是一次性的 `COPY` 所有文件这将保证每个步骤的构建缓存只在特定的文件变化时失效例如
```docker
COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/
```
如果将 `COPY . /tmp/` 放置在 `RUN` 指令之前只要 `.` 目录中任何一个文件变化都会导致后续指令的缓存失效
为了让镜像尽量小最好不要使用 `ADD` 指令从远程 URL 获取包而是使用 `curl` `wget`这样你可以在文件提取完之后删掉不再需要的文件来避免在镜像中额外添加一层比如尽量避免下面的用法
```docker
ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all
```
而是应该使用下面这种方法
```docker
RUN mkdir -p /usr/src/things \
&& curl -SL http://example.com/big.tar.xz \
| tar -xJC /usr/src/things \
&& make -C /usr/src/things all
```
上面使用的管道操作所以没有中间文件需要删除
对于其他不需要 `ADD` 的自动提取功能的文件或目录你应该使用 `COPY`
### ENTRYPOINT
`ENTRYPOINT` 的最佳用处是设置镜像的主命令允许将镜像当成命令本身来运行 `CMD` 提供默认选项
例如下面的示例镜像提供了命令行工具 `s3cmd`:
```docker
ENTRYPOINT ["s3cmd"]
CMD ["--help"]
```
现在直接运行该镜像创建的容器会显示命令帮助
```bash
$ docker run s3cmd
```
或者提供正确的参数来执行某个命令
```bash
$ docker run s3cmd ls s3://mybucket
```
这样镜像名可以当成命令行的参考
`ENTRYPOINT` 指令也可以结合一个辅助脚本使用和前面命令行风格类似即使启动工具需要不止一个步骤
例如`Postgres` 官方镜像使用下面的脚本作为 `ENTRYPOINT`
```bash
#!/bin/bash
set -e
if [ "$1" = 'postgres' ]; then
chown -R postgres "$PGDATA"
if [ -z "$(ls -A "$PGDATA")" ]; then
gosu postgres initdb
fi
exec gosu postgres "$@"
fi
exec "$@"
```
>注意该脚本使用了 Bash 的内置命令 exec所以最后运行的进程就是容器的 PID 1 的进程这样进程就可以接收到任何发送给容器的 Unix 信号了
该辅助脚本被拷贝到容器并在容器启动时通过 `ENTRYPOINT` 执行
```docker
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
```
该脚本可以让用户用几种不同的方式和 `Postgres` 交互
你可以很简单地启动 `Postgres`
```bash
$ docker run postgres
```
也可以执行 `Postgres` 并传递参数
```bash
$ docker run postgres postgres --help
```
最后你还可以启动另外一个完全不同的工具比如 `Bash`
```bash
$ docker run --rm -it postgres bash
```
### VOLUME
`VOLUME` 指令用于暴露任何数据库存储文件配置文件或容器创建的文件和目录强烈建议使用 `VOLUME` 来管理镜像中的可变部分和用户可以改变的部分
### USER
如果某个服务不需要特权执行建议使用 `USER` 指令切换到非 root 用户先在 `Dockerfile` 中使用类似 `RUN groupadd -r postgres && useradd -r -g postgres postgres` 的指令创建用户和用户组
>注意在镜像中用户和用户组每次被分配的 UID/GID 都是不确定的下次重新构建镜像时被分配到的 UID/GID 可能会不一样如果要依赖确定的 UID/GID你应该显示的指定一个 UID/GID
你应该避免使用 `sudo`因为它不可预期的 TTY 和信号转发行为可能造成的问题比它能解决的问题还多如果你真的需要和 `sudo` 类似的功能例如 root 权限初始化某个守护进程以非 root 权限执行它你可以使用 [gosu](https://github.com/tianon/gosu)。
最后为了减少层数和复杂度避免频繁地使用 `USER` 来回切换用户
### WORKDIR
为了清晰性和可靠性你应该总是在 `WORKDIR` 中使用绝对路径另外你应该使用 `WORKDIR` 来替代类似于 `RUN cd ... && do-something` 的指令后者难以阅读排错和维护
## 官方镜像示例
这些官方镜像的 Dockerfile 都是参考典范https://github.com/docker-library/docs

View File

@@ -1,126 +1,13 @@
# Docker 命令查询
## 基本语法
Docker 命令有两大类客户端命令和服务端命令前者是主要的操作接口后者用来启动 Docker daemon
Docker 命令有两大类客户端命令和服务端命令前者是主要的操作接口后者用来启动 Docker Daemon
* 客户端命令基本命令格式为 `docker [OPTIONS] COMMAND [arg...]`
* 服务端命令基本命令格式为 `docker daemon [OPTIONS]`
* 服务端命令基本命令格式为 `dockerd [OPTIONS]`
可以通过 `man docker` `docker help` 来查看这些命令
## 客户端命令选项
* --config=""指定客户端配置文件默认为 `/.docker`
* -D=true|false是否使用 debug 模式默认不开启
* -H, --host=[]指定命令对应 Docker daemon 的监听接口可以为 unix 套接字unix:///path/to/socket文件句柄fd://socketfd或 tcp 套接字tcp://[host[:port]]),默认为 unix:///var/run/docker.sock
* -l, --log-level="debug|info|warn|error|fatal"指定日志输出级别
* --tls=true|false是否对 Docker daemon 启用 TLS 安全机制默认为否
* --tlscacert= /.docker/ca.pemTLS CA 签名的可信证书文件路径
* --tlscert= /.docker/cert.pemTLS 可信证书文件路径
* --tlscert= /.docker/key.pemTLS 密钥文件路径
* --tlsverify=true|false启用 TLS 校验默认为否
## daemon 命令选项
* --api-cors-header=""CORS 头部域默认不允许 CORS要允许任意的跨域访问可以指定为 *
* --authorization-plugin=""载入认证的插件
* -b=""将容器挂载到一个已存在的网桥上指定为 'none' 时则禁用容器的网络 --bip 选项互斥
* --bip=""让动态创建的 docker0 网桥采用给定的 CIDR 地址; -b 选项互斥
* --cgroup-parent=""指定 cgroup 的父组默认 fs cgroup 驱动为 `/docker`systemd cgroup 驱动为 `system.slice`
* --cluster-store=""构成集群 Swarm集群键值数据库服务地址
* --cluster-advertise=""构成集群时自身的被访问地址可以为 `host:port` `interface:port`
* --cluster-store-opt=""构成集群时键值数据库的配置选项
* --config-file="/etc/docker/daemon.json"daemon 配置文件路径
* --containerd=""containerd 文件的路径
* -D, --debug=true|false是否使用 Debug 模式缺省为 false
* --default-gateway=""容器的 IPv4 网关地址必须在网桥的子网段内
* --default-gateway-v6=""容器的 IPv6 网关地址
* --default-ulimit=[]默认的 ulimit
* --disable-legacy-registry=true|false是否允许访问旧版本的镜像仓库服务器
* --dns=""指定容器使用的 DNS 服务器地址
* --dns-opt=""DNS 选项
* --dns-search=[]DNS 搜索域
* --exec-opt=[]运行时的执行选项
* --exec-root=""容器执行状态文件的根路径默认为 `/var/run/docker`
* --fixed-cidr=""限定分配 IPv4 地址范围
* --fixed-cidr-v6=""限定分配 IPv6 地址范围
* -G, --group=""分配给 unix 套接字的组默认为 `docker`
* -g, --graph=""Docker 运行时的根路径默认为 `/var/lib/docker`
* -H, --host=[]指定命令对应 Docker daemon 的监听接口可以为 unix 套接字unix:///path/to/socket文件句柄fd://socketfd或 tcp 套接字tcp://[host[:port]]),默认为 unix:///var/run/docker.sock
* --icc=true|false是否启用容器间以及跟 daemon 所在主机的通信默认为 true
* --insecure-registry=[]允许访问给定的非安全仓库服务
* --ip=""绑定容器端口时候的默认 IP 地址缺省为 0.0.0.0
* --ip-forward=true|false是否检查启动在 Docker 主机上的启用 IP 转发服务默认开启注意关闭该选项将不对系统转发能力进行任何检查修改
* --ip-masq=true|false是否进行地址伪装用于容器访问外部网络默认开启
* --iptables=true|false是否允许 Docker 添加 iptables 规则缺省为 true
* --ipv6=true|false是否启用 IPv6 支持默认关闭
* -l, --log-level="debug|info|warn|error|fatal"指定日志输出级别
* --label="[]"添加指定的键值对标注
* --log-driver="json-file|syslog|journald|gelf|fluentd|awslogs|splunk|etwlogs|gcplogs|none"指定日志后端驱动默认为 json-file
* --log-opt=[]日志后端的选项
* --mtu=VALUE指定容器网络的 mtu
* -p=""指定 daemon PID 文件路径缺省为 `/var/run/docker.pid`
* --raw-logs输出原始未加色彩的日志信息
* --registry-mirror=<scheme>://<host>:指定 `docker pull` 时使用的注册服务器镜像地址;
* -s, --storage-driver=""指定使用给定的存储后端
* --selinux-enabled=true|false是否启用 SELinux 支持缺省值为 falseSELinux 目前尚不支持 overlay 存储驱动
* --storage-opt=[]驱动后端选项
* --tls=true|false是否对 Docker daemon 启用 TLS 安全机制默认为否
* --tlscacert= /.docker/ca.pemTLS CA 签名的可信证书文件路径
* --tlscert= /.docker/cert.pemTLS 可信证书文件路径
* --tlscert= /.docker/key.pemTLS 密钥文件路径
* --tlsverify=true|false启用 TLS 校验默认为否
* --userland-proxy=true|false是否使用用户态代理来实现容器间和出容器的回环通信默认为 true
* --userns-remap=default|uid:gid|user:group|user|uid指定容器的用户命名空间默认是创建新的 UID GID 映射到容器内进程
## 客户端命令
可以通过 `man docker-COMMAND` `docker help COMMAND` 来查看这些命令的具体用法
* attach依附到一个正在运行的容器中
* build从一个 Dockerfile 创建一个镜像
* commit从一个容器的修改中创建一个新的镜像
* cp在容器和本地宿主系统之间复制文件中
* create创建一个新容器但并不运行它
* diff检查一个容器内文件系统的修改包括修改和增加
* events从服务端获取实时的事件
* exec在运行的容器内执行命令
* export导出容器内容为一个 tar
* history显示一个镜像的历史信息
* images列出存在的镜像
* import导入一个文件典型为 tar 路径或目录来创建一个本地镜像
* info显示一些相关的系统信息
* inspect显示一个容器的具体配置信息
* kill关闭一个运行中的容器 (包括进程和所有相关资源)
* load从一个 tar 包中加载一个镜像
* login注册或登录到一个 Docker 的仓库服务器
* logout Docker 的仓库服务器登出
* logs获取容器的 log 信息
* network管理 Docker 的网络包括查看创建删除挂载卸载等
* node管理 swarm 集群中的节点包括查看更新删除提升/取消管理节点等
* pause暂停一个容器中的所有进程
* port查找一个 nat 到一个私有网口的公共口
* ps列出主机上的容器
* pull从一个Docker的仓库服务器下拉一个镜像或仓库
* push将一个镜像或者仓库推送到一个 Docker 的注册服务器
* rename重命名一个容器
* restart重启一个运行中的容器
* rm删除给定的若干个容器
* rmi删除给定的若干个镜像
* run创建一个新容器并在其中运行给定命令
* save保存一个镜像为 tar 包文件
* search Docker index 中搜索一个镜像
* service管理 Docker 所启动的应用服务包括创建更新删除等
* start启动一个容器
* stats输出一个或多个容器的资源使用统计信息
* stop终止一个运行中的容器
* swarm管理 Docker swarm 集群包括创建加入退出更新等
* tag为一个镜像打标签
* top查看一个容器中的正在运行的进程信息
* unpause将一个容器内所有的进程从暂停状态中恢复
* update更新指定的若干容器的配置信息
* version输出 Docker 的版本信息
* volume管理 Docker volume包括查看创建删除等
* wait阻塞直到一个容器终止然后输出它的退出符
## 一张图总结 Docker 的命令
![Docker 命令总结](../_images/cmd_logic.png)
接下来的小节对这两个命令进行介绍

View File

@@ -0,0 +1,70 @@
# 客户端命令(docker)
## 客户端命令选项
* `--config=""`指定客户端配置文件默认为 `~/.docker`
* `-D=true|false`是否使用 debug 模式默认不开启
* `-H, --host=[]`指定命令对应 Docker 守护进程的监听接口可以为 unix 套接字 `unix:///path/to/socket`文件句柄 `fd://socketfd` tcp 套接字 `tcp://[host[:port]]`默认为 `unix:///var/run/docker.sock`
* `-l, --log-level="debug|info|warn|error|fatal"`指定日志输出级别
* `--tls=true|false`是否对 Docker 守护进程启用 TLS 安全机制默认为否
* `--tlscacert=/.docker/ca.pem`TLS CA 签名的可信证书文件路径
* `--tlscert=/.docker/cert.pem`TLS 可信证书文件路径
* `--tlscert=/.docker/key.pem`TLS 密钥文件路径
* `--tlsverify=true|false`启用 TLS 校验默认为否
## 客户端命令
可以通过 `docker COMMAND --help` 来查看这些命令的具体用法
* `attach`依附到一个正在运行的容器中
* `build`从一个 Dockerfile 创建一个镜像
* `commit`从一个容器的修改中创建一个新的镜像
* `cp`在容器和本地宿主系统之间复制文件中
* `create`创建一个新容器但并不运行它
* `diff`检查一个容器内文件系统的修改包括修改和增加
* `events`从服务端获取实时的事件
* `exec`在运行的容器内执行命令
* `export`导出容器内容为一个 `tar`
* `history`显示一个镜像的历史信息
* `images`列出存在的镜像
* `import`导入一个文件典型为 `tar` 路径或目录来创建一个本地镜像
* `info`显示一些相关的系统信息
* `inspect`显示一个容器的具体配置信息
* `kill`关闭一个运行中的容器 (包括进程和所有相关资源)
* `load`从一个 tar 包中加载一个镜像
* `login`注册或登录到一个 Docker 的仓库服务器
* `logout` Docker 的仓库服务器登出
* `logs`获取容器的 log 信息
* `network`管理 Docker 的网络包括查看创建删除挂载卸载等
* `node`管理 swarm 集群中的节点包括查看更新删除提升/取消管理节点等
* `pause`暂停一个容器中的所有进程
* `port`查找一个 nat 到一个私有网口的公共口
* `ps`列出主机上的容器
* `pull`从一个Docker的仓库服务器下拉一个镜像或仓库
* `push`将一个镜像或者仓库推送到一个 Docker 的注册服务器
* `rename`重命名一个容器
* `restart`重启一个运行中的容器
* `rm`删除给定的若干个容器
* `rmi`删除给定的若干个镜像
* `run`创建一个新容器并在其中运行给定命令
* `save`保存一个镜像为 tar 包文件
* `search` Docker index 中搜索一个镜像
* `service`管理 Docker 所启动的应用服务包括创建更新删除等
* `start`启动一个容器
* `stats`输出一个或多个容器的资源使用统计信息
* `stop`终止一个运行中的容器
* `swarm`管理 Docker swarm 集群包括创建加入退出更新等
* `tag`为一个镜像打标签
* `top`查看一个容器中的正在运行的进程信息
* `unpause`将一个容器内所有的进程从暂停状态中恢复
* `update`更新指定的若干容器的配置信息
* `version`输出 Docker 的版本信息
* `volume`管理 Docker volume包括查看创建删除等
* `wait`阻塞直到一个容器终止然后输出它的退出符
## 一张图总结 Docker 的命令
![Docker 命令总结](../_images/cmd_logic.png)
## 参考
* [官方文档](https://docs.docker.com/engine/reference/commandline/cli/)

View File

@@ -0,0 +1,58 @@
# 服务端命令(dockerd)
## dockerd 命令选项
* `--api-cors-header=""`CORS 头部域默认不允许 CORS要允许任意的跨域访问可以指定为 "*"
* `--authorization-plugin=""`载入认证的插件
* `-b=""`将容器挂载到一个已存在的网桥上指定为 `none` 时则禁用容器的网络 `--bip` 选项互斥
* `--bip=""`让动态创建的 `docker0` 网桥采用给定的 CIDR 地址; `-b` 选项互斥
* `--cgroup-parent=""`指定 cgroup 的父组默认 fs cgroup 驱动为 `/docker`systemd cgroup 驱动为 `system.slice`
* `--cluster-store=""`构成集群 `Swarm`集群键值数据库服务地址
* `--cluster-advertise=""`构成集群时自身的被访问地址可以为 `host:port` `interface:port`
* `--cluster-store-opt=""`构成集群时键值数据库的配置选项
* `--config-file="/etc/docker/daemon.json"`daemon 配置文件路径
* `--containerd=""`containerd 文件的路径
* `-D, --debug=true|false`是否使用 Debug 模式缺省为 false
* `--default-gateway=""`容器的 IPv4 网关地址必须在网桥的子网段内
* `--default-gateway-v6=""`容器的 IPv6 网关地址
* `--default-ulimit=[]`默认的 ulimit
* `--disable-legacy-registry=true|false`是否允许访问旧版本的镜像仓库服务器
* `--dns=""`指定容器使用的 DNS 服务器地址
* `--dns-opt=""`DNS 选项
* `--dns-search=[]`DNS 搜索域
* `--exec-opt=[]`运行时的执行选项
* `--exec-root=""`容器执行状态文件的根路径默认为 `/var/run/docker`
* `--fixed-cidr=""`限定分配 IPv4 地址范围
* `--fixed-cidr-v6=""`限定分配 IPv6 地址范围
* `-G, --group=""`分配给 unix 套接字的组默认为 `docker`
* `-g, --graph=""`Docker 运行时的根路径默认为 `/var/lib/docker`
* `-H, --host=[]`指定命令对应 Docker daemon 的监听接口可以为 unix 套接字 `unix:///path/to/socket`文件句柄 `fd://socketfd` tcp 套接字 `tcp://[host[:port]]`默认为 `unix:///var/run/docker.sock`
* `--icc=true|false`是否启用容器间以及跟 daemon 所在主机的通信默认为 true
* `--insecure-registry=[]`允许访问给定的非安全仓库服务
* `--ip=""`绑定容器端口时候的默认 IP 地址缺省为 `0.0.0.0`
* `--ip-forward=true|false`是否检查启动在 Docker 主机上的启用 IP 转发服务默认开启注意关闭该选项将不对系统转发能力进行任何检查修改
* `--ip-masq=true|false`是否进行地址伪装用于容器访问外部网络默认开启
* `--iptables=true|false`是否允许 Docker 添加 iptables 规则缺省为 true
* `--ipv6=true|false`是否启用 IPv6 支持默认关闭
* `-l, --log-level="debug|info|warn|error|fatal"`指定日志输出级别
* `--label="[]"`添加指定的键值对标注
* `--log-driver="json-file|syslog|journald|gelf|fluentd|awslogs|splunk|etwlogs|gcplogs|none"`指定日志后端驱动默认为 `json-file`
* `--log-opt=[]`日志后端的选项
* `--mtu=VALUE`指定容器网络的 `mtu`
* `-p=""`指定 daemon PID 文件路径缺省为 `/var/run/docker.pid`
* `--raw-logs`输出原始未加色彩的日志信息
* `--registry-mirror=<scheme>://<host>`指定 `docker pull` 时使用的注册服务器镜像地址
* `-s, --storage-driver=""`指定使用给定的存储后端
* `--selinux-enabled=true|false`是否启用 SELinux 支持缺省值为 falseSELinux 目前尚不支持 overlay 存储驱动
* `--storage-opt=[]`驱动后端选项
* `--tls=true|false`是否对 Docker daemon 启用 TLS 安全机制默认为否
* `--tlscacert=/.docker/ca.pem`TLS CA 签名的可信证书文件路径
* `--tlscert=/.docker/cert.pem`TLS 可信证书文件路径
* `--tlscert=/.docker/key.pem`TLS 密钥文件路径
* `--tlsverify=true|false`启用 TLS 校验默认为否
* `--userland-proxy=true|false`是否使用用户态代理来实现容器间和出容器的回环通信默认为 true
* `--userns-remap=default|uid:gid|user:group|user|uid`指定容器的用户命名空间默认是创建新的 UID GID 映射到容器内进程
## 参考
* [官方文档](https://docs.docker.com/engine/reference/commandline/dockerd/)

42
appendix/debug.md Normal file
View File

@@ -0,0 +1,42 @@
# 如何调试 Docker
## 开启 Debug 模式
dockerd 配置文件 daemon.json默认位于 /etc/docker/中添加
```json
{
"debug": true
}
```
重启守护进程
```bash
$ sudo kill -SIGHUP $(pidof dockerd)
```
此时 dockerd 会在日志中输入更多信息供分析
## 检查内核日志
```bash
$ sudo dmesag |grep dockerd
$ sudo dmesag |grep runc
```
## Docker 不响应时处理
可以杀死 dockerd 进程查看其堆栈调用情况
```bash
$ sudo kill -SIGUSR1 $(pidof dockerd)
```
## 重置 Docker 本地数据
*注意本操作会移除所有的 Docker 本地数据包括镜像和容器等*
```bash
$ sudo rm -rf /var/lib/docker
```

View File

@@ -1,99 +1,118 @@
# 常见问题总结
## 镜像相关
### 如何批量清理临时镜像文件
可以使用 `docker rmi $(docker images -q -f dangling=true)` 命令
### 如何批量清理临时镜像文件
可以使用 `docker image prune` 命令
### 如何查看镜像支持的环境变量
可以使用 `docker run IMAGE env` 命令
### 本地的镜像文件都存放在哪里
Docker 相关的本地资源都存放在 `/var/lib/docker/` 目录下 aufs 文件系统为例其中 container 目录存放容器信息graph 目录存放镜像信息aufs 目录下存放具体的镜像层文件
Docker 相关的本地资源默认存放在 `/var/lib/docker/` 目录下 `overlay2` 文件系统为例其中 `containers` 目录存放容器信息`image` 目录存放镜像信息`overlay2` 目录下存放具体的镜像层文件
### 构建 Docker 镜像应该遵循哪些原则
整体原则上尽量保持镜像功能的明确和内容的精简要点包括
* 尽量选取满足需求但较小的基础系统镜像例如大部分时候可以选择 debian:wheezy debian:jessie 镜像仅有不足兆大小;
* 尽量选取满足需求但较小的基础系统镜像例如大部分时候可以选择 `alpine` 镜像仅有不足兆大小
* 清理编译生成文件安装包的缓存等临时文件
* 安装各个软件时候要指定准确的版本号并避免引入不需要的依赖
* 从安全角度考虑应用要尽量使用系统的库和依赖
* 如果安装应用时候需要配置一些特殊的环境变量在安装后要还原不需要保持的变量值
* 使用 Dockerfile 创建镜像时候要添加 .dockerignore 文件或使用干净的工作目录
更多内容请查看 [Dockerfile 最佳实践](../best_practices.md)
### 碰到网络问题无法 pull 镜像命令行指定 http_proxy 无效
Docker 配置文件中添加 `export http_proxy="http://<PROXY_HOST>:<PROXY_PORT>"`之后重启 Docker 服务即可
## 容器相关
### 容器退出后通过 docker ps 命令查看不到数据会丢失么
容器退出后会处于终止exited状态此时可以通过 `docker ps -a` 查看其中的数据也不会丢失还可以通过 `docker start` 命令来启动它只有删除掉容器才会清除所有数据
### 如何停止所有正在运行的容器
可以使用 `docker kill $(docker ps -q)` 命令
### 容器退出后通过 docker container ls 命令查看不到数据会丢失么
### 如何清理批量后台停止的容器
可以使用 `docker rm -f $(docker ps -qa)` 命令
容器退出后会处于终止exited状态此时可以通过 `docker container ls -a` 查看其中的数据也不会丢失还可以通过 `docker start` 命令来启动它只有删除掉容器才会清除所有数据
### 如何停止所有正在运行的容器
可以使用 `docker stop $(docker container ls -q)` 命令
### 如何批量清理已经停止的容器
可以使用 `docker container prune` 命令
### 如何获取某个容器的 PID 信息
可以使用 `docker inspect --format '{{ .State.Pid }}' <CONTAINER ID or NAME>` 命令
可以使用
```bash
docker inspect --format '{{ .State.Pid }}' <CONTAINER ID or NAME>
```
### 如何获取某个容器的 IP 地址
可以使用 `docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID or NAME>` 命令
可以使用
```bash
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID or NAME>
```
### 如何给容器指定一个固定 IP 地址而不是每次重启容器 IP 地址都会变
目前 Docker 并没有提供直接的对容器 IP 地址的管理支持用户可以考虑参考第三部分中高级网络配置章节中介绍的创建点对点连接例子来手动配置容器的静态 IP或者在启动容器后再手动进行修改可参考其它类的问题 *如何进入 Docker 容器的网络命名空间*
使用以下命令启动容器可以使容器 IP 固定不变
```bash
$ docker network create -d bridge --subnet 172.25.0.0/16 my-net
$ docker run --network=my-net --ip=172.25.3.3 -itd --name=my-container busybox
```
### 如何临时退出一个正在交互的容器的终端而不终止它
`Ctrl-p Ctrl-q`如果按 `Ctrl-c` 往往会让容器内应用进程终止进而会终止容器
### 使用 `docker port` 命令映射容器的端口时系统报错Error: No public port '80' published for xxx
* 创建镜像时 Dockerfile 要通过 EXPOSE 指定正确的开放端口
* 创建镜像时 `Dockerfile` 要通过 `EXPOSE` 指定正确的开放端口
* 容器启动时指定 `PublishAllPort = true`
### 可以在一个容器中同时运行多个应用进程么
一般并不推荐在同一个容器内运行多个应用进程如果有类似需求可以通过一些额外的进程管理机制比如 supervisord 来管理所运行的进程可以参考 https://docs.docker.com/articles/using_supervisord/。
一般并不推荐在同一个容器内运行多个应用进程如果有类似需求可以通过一些额外的进程管理机制比如 `supervisord` 来管理所运行的进程可以参考 https://docs.docker.com/config/containers/multi-service_container/ 。
### 如何控制容器占用系统资源CPU内存的份额
在使用 `docker create` 命令创建容器或使用 `docker run` 创建并启动容器的时候可以使用 -c|--cpu-shares[=0] 参数来调整容器使用 CPU 的权重使用 -m|--memory[=MEMORY] 参数来调整容器使用内存的大小
## 仓库相关
### 仓库Repository注册服务器Registry注册索引Index 有何关系
首先仓库是存放一组关联镜像的集合比如同一个应用的不同版本的镜像
注册服务器是存放实际的镜像文件的地方注册索引则负责维护用户的账号权限搜索标签等的管理因此注册服务器利用注册索引来实现认证等管理
### 从非官方仓库例如 non-official-repo.com下载镜像时候有时候会提示Error: Invalid registry endpoint https://non-official-repo.com/v1/……”?
Docker 1.3.0 版本往后加强了对镜像安全性的验证需要添加私有仓库证书或者手动添加对非官方仓库的信任
编辑 Docker 配置文件在其中添加
```sh
DOCKER_OPTS="--insecure-registry non-official-repo"
```
之后重启 Docker 服务即可
## 配置相关
### Docker 的配置文件放在哪里如何修改配置
使用 upstart 的系统如Ubuntu 14.04的配置文件在 `/etc/default/docker`使用systemd 的系统 Ubuntu 16.04Centos 的配置文件在 `/etc/systemd/system/docker.service.d/docker.conf`
Ubuntu 下面的配置文件内容如下读者可以参考配如果出现该文件不存在的情况重启或者自己新建一个文件都可以解决
使用 `systemd` 的系统 Ubuntu 16.04Centos 的配置文件在 `/etc/docker/daemon.json`
```sh
# Customize location of Docker binary (especially for development testing).
#DOCKERD="/usr/local/bin/dockerd"
# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"
# This is also a handy place to tweak where Docker's temporary files go.
#export TMPDIR="/mnt/bigdrive/docker-tmp"
```
### 如何更改 Docker 的默认存储位置
Docker 的默认存储位置是 `/var/lib/docker`如果希望将 Docker 的本地文件存储到其他分区可以使用 Linux 软连接的方式来完成或者在启动 daemon 时通过 `-g` 参数指定
Docker 的默认存储位置是 `/var/lib/docker`如果希望将 Docker 的本地文件存储到其他分区可以使用 Linux 软连接的方式来完成或者在启动 daemon 时通过 `-g` 参数指定或者修改配置文件 `/etc/docker/daemon.json` "data-root" 可以使用 `docker system info | grep "Root Dir"` 查看当前使用的存储位置
例如如下操作将默认存储位置迁移到 /storage/docker
@@ -114,24 +133,29 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
[root@s26 lib]# service docker start
```
### 使用内存和 swap 限制启动容器时候报警告WARNING: Your kernel does not support cgroup swap limit. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
### 使用内存和 swap 限制启动容器时候报警告"WARNING: Your kernel does not support cgroup swap limit. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded."
这是因为系统默认没有开启对内存和 swap 使用的统计功能引入该功能会带来性能的下降要开启该功能可以采取如下操作
* 编辑 `/etc/default/grub` 文件Ubuntu 系统为例配置 `GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"`
* 更新 grub`$ sudo update-grub`
* 编辑 `/etc/default/grub` 文件Ubuntu 系统为例配置 `GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"`
* 更新 grub`$ sudo update-grub`
* 重启系统即可
## Docker 与虚拟化
### Docker LXCLinux Container有何不同
LXC 利用 Linux 上相关技术实现了容器Docker 则在如下的几个方面进行了改进
* 移植性通过抽象容器配置容器可以实现从一个平台移植到另一个平台
* 镜像系统基于 AUFS 的镜像系统为容器的分发带来了很多的便利同时共同的镜像层只需要存储一份实现高效率的存储
* 镜像系统基于 OverlayFS 的镜像系统为容器的分发带来了很多的便利同时共同的镜像层只需要存储一份实现高效率的存储
* 版本管理类似于Git的版本管理理念用户可以更方便的创建管理镜像文件
* 仓库系统仓库系统大大降低了镜像的分发和管理的成本
* 周边工具各种现有工具配置管理云平台 Docker 的支持以及基于 Docker的 PaaSCI 等系统 Docker 的应用更加方便和多样化
### Docker Vagrant 有何不同
两者的定位完全不同
* Vagrant 类似 Boot2Docker一款运行 Docker 的最小内核是一套虚拟机的管理环境Vagrant 可以在多种系统上和虚拟机软件中运行可以在 WindowsMac 等非 Linux 平台上为 Docker 提供支持自身具有较好的包装性和移植性
@@ -141,52 +165,57 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
简单说Vagrant 适合用来管理虚拟机 Docker 适合用来管理应用环境
### 开发环境中 Docker Vagrant 该如何选择
Docker 不是虚拟机而是进程隔离对于资源的消耗很少但是目前需要 Linux 环境支持Vagrant 是虚拟机上做的封装虚拟机本身会消耗资源
Docker 不是虚拟机而是进程隔离对于资源的消耗很少但是目前需要 Linux 环境支持Vagrant 是虚拟机上做的封装虚拟机本身会消耗资源
如果本地使用的 Linux 环境推荐都使用 Docker
如果本地使用的是 OSX 或者 Windows 环境那就需要开虚拟机单一开发环境下 Vagrant 更简单多环境开发下推荐在 Vagrant 里面再使用 Docker 进行环境隔离
如果本地使用的是 macOS 或者 Windows 环境那就需要开虚拟机单一开发环境下 Vagrant 更简单多环境开发下推荐在 Vagrant 里面再使用 Docker 进行环境隔离
## 其它
### Docker 能在非 Linux 平台比如 Windows MacOS上运行么
可以目前需要使用 docker for macboot2docker 等软件创建一个轻量级的 Linux 虚拟机层
### Docker 能在非 Linux 平台比如 Windows macOS 上运行么
完全可以安装方法请查看 [安装 Docker](../../install/) 一节
### 如何将一台宿主主机的 Docker 环境迁移到另外一台宿主主机
### 如何将一台宿主主机的 docker 环境迁移到另外一台宿主主机
停止 Docker 服务将整个 Docker 存储文件夹复制到另外一台宿主主机然后调整另外一台宿主主机的配置即可
### 如何进入 Docker 容器的网络命名空间
Docker 在创建容器后删除了宿主主机上 `/var/run/netns` 目录中的相关的网络命名空间文件因此在宿主主机上是无法看到或访问容器的网络命名空间的
用户可以通过如下方法来手动恢复它
首先使用下面的命令查看容器进程信息比如这里的1234
首先使用下面的命令查看容器进程信息比如这里的 1234
```sh
```bash
$ docker inspect --format='{{. State.Pid}} ' $container_id
1234
```
接下来 /proc 目录下把对应的网络命名空间文件链接到 /var/run/netns 目录
```sh
接下来 `/proc` 目录下把对应的网络命名空间文件链接到 `/var/run/netns` 目录
```bash
$ sudo ln -s /proc/1234/ns/net /var/run/netns/
```
然后在宿主主机上就可以看到容器的网络命名空间信息例如
```sh
```bash
$ sudo ip netns show
1234
```
此时用户可以通过正常的系统命令来查看或操作容器的命名空间了例如修改容器的 IP 地址信息为 `172.17.0.100/16`
```sh
```bash
$ sudo ip netns exec 1234 ifconfig eth0 172.17.0.100/16
```
### 如何获取容器绑定到本地那个 veth 接口上
Docker 容器启动后会通过 veth 接口对连接到本地网桥veth 接口命名跟容器命名毫无关系十分难以找到对应关系
最简单的一种方式是通过查看接口的索引号在容器中执行 `ip a` 命令查看到本地接口最前面的接口索引号 `205`将此值加上 1 `206`然后在本地主机执行 `ip a` 命令查找接口索引号为 `206` 的接口两者即为连接的 veth 接口对

View File

@@ -1,2 +1,3 @@
# 热门镜像介绍
本章将介绍一些热门镜像的功能使用方法和生成它们的 Dockerfile 包括 UbuntuCentOSMySQLMongoDBRedisNginxWordpressNode.js
本章将介绍一些热门镜像的功能使用方法等包括 UbuntuCentOSMySQLMongoDBRedisNginxWordpressNode.js

View File

@@ -1,60 +1,20 @@
## [CentOS](https://hub.docker.com/_/centos/)
# [CentOS](https://hub.docker.com/_/centos)
## 基本信息
### 基本信息
[CentOS](https://en.wikipedia.org/wiki/CentOS) 是流行的 Linux 发行版,其软件包大多跟 RedHat 系列保持一致。
该仓库位于 https://hub.docker.com/_/centos/ ,提供了 CentOS 从 5 ~ 7 各个版本的镜像。
该仓库位于 `https://hub.docker.com/_/centos` 提供了 CentOS 5 ~ 8 各个版本的镜像
## 使用方法
### 使用方法
默认会启动一个最小化的 CentOS 环境
```sh
$ docker run --name some-centos -i -t centos bash
```bash
$ docker run --name centos -it centos bash
bash-4.2#
```
### Dockerfile
#### CentOS 5 版本
```
FROM scratch
MAINTAINER The CentOS Project <cloud-ops@centos.org>
ADD c5-docker.tar.xz /
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="2016-03-31"
# Default command
CMD ["/bin/bash"]
```
#### CentOS 6 版本
```
FROM scratch
MAINTAINER https://github.com/CentOS/sig-cloud-instance-images
ADD centos-6-docker.tar.xz /
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="20160729"
CMD ["/bin/bash"]
```
#### CentOS 7 版本
```
FROM scratch
MAINTAINER https://github.com/CentOS/sig-cloud-instance-images
ADD centos-7-docker.tar.xz /
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="20160729"
CMD ["/bin/bash"]
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/centos 查看。

62
appendix/repo/minio.md Normal file
View File

@@ -0,0 +1,62 @@
# minio
[TOC]
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务它兼容亚马逊S3云存储服务接口非常适合于存储大容量非结构化的数据例如图片视频日志文件备份数据和容器/虚拟机镜像等而一个对象文件可以是任意大小从几kb到最大5T不等
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合类似 NodeJS, Redis 或者 MySQL
[官方文档](https://docs.min.io/)
## 简单使用
测试开发环境下不考虑数据存储的情况下可以使用下面的命令快速开启服务
```bash
docker pull minio/minio
docker run -p 9000:9000 minio/minio server /data
```
## 离线部署
许多生产环境是一般是没有公网资源的这就需要从有公网资源的服务器上把镜像导出然后导入到需要运行镜像的内网服务器
### 导出镜像
在有公网资源的服务器上下载好`minio/minio`镜像
```bash
docker save -o minio.tar minio/minio:latest
```
<!--使用docker save 的时候也可以使用image id 来导出但是那样导出的时候就会丢失原来的镜像名称推荐还是使用镜像名字+tag来导出镜像-->
### 导入镜像
把压缩文件复制到内网服务器上使用下面的命令导入镜像
```bash
docker load minio.tar
```
### 运行 minio
- /mnt/data 改成要替换的数据目录
- 替换 MINIO_ACCESS_KEY
- 替换 MINIO_SECRET_KEY
- 替换 name,minio1(可选)
- 如果9000端口冲突,替换端口前面的如:9009:9000
```bash
sudo docker run -d -p 9000:9000 --name minio1 \
-e "MINIO_ACCESS_KEY=改成自己需要的" \
-e "MINIO_SECRET_KEY=改成自己需要的" \
-v /mnt/data:/data \
--restart=always \
minio/minio server /data
```
### 访问 web 管理页面
http://x.x.x.x:9000/minio/

View File

@@ -1,264 +1,34 @@
## [MongoDB](https://hub.docker.com/_/mongo/)
# [MongoDB](https://hub.docker.com/_/mongo/)
## 基本信息
### 基本信息
[MongoDB](https://en.wikipedia.org/wiki/MongoDB) 是开源的 NoSQL 数据库实现。
该仓库位于 https://hub.docker.com/_/mongo/ ,提供了 MongoDB 2.x ~ 3.x 各个版本的镜像。
该仓库位于 `https://hub.docker.com/_/mongo/` 提供了 MongoDB 2.x ~ 4.x 各个版本的镜像
## 使用方法
### 使用方法
默认会在 `27017` 端口启动数据库
```sh
$ docker run --name some-mongo -d mongo
```bash
$ docker run --name mongo -d mongo
```
使用其他应用连接到容器可以用
```sh
```bash
$ docker run --name some-app --link some-mongo:mongo -d application-that-uses-mongo
```
或者通过 `mongo`
```sh
$ docker run -it --link some-mongo:mongo --rm mongo sh -c 'exec mongo "$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/test"'
```bash
$ docker run -it --rm \
--link some-mongo:mongo \
mongo \
sh -c 'exec mongo "$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/test"'
```
### Dockerfile
#### 2.6 版本
```
FROM debian:wheezy
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mongodb && useradd -r -g mongodb mongodb
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates wget \
numactl \
&& rm -rf /var/lib/apt/lists/*
# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true
ENV MONGO_VERSION 2.6.12
RUN set -x \
&& wget -O mongo.tgz "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-$MONGO_VERSION.tgz" \
&& wget -O mongo.tgz.sig "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-$MONGO_VERSION.tgz.sig" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys DFFA3DCF326E302C4787673A01C4E7FAAAB2461C \
&& gpg --batch --verify mongo.tgz.sig mongo.tgz \
&& rm -r "$GNUPGHOME" mongo.tgz.sig \
&& tar -xvf mongo.tgz -C /usr/local --strip-components=1 \
&& rm mongo.tgz
RUN mkdir -p /data/db /data/configdb \
&& chown -R mongodb:mongodb /data/db /data/configdb
VOLUME /data/db /data/configdb
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]
```
#### 3.0 版本
```
FROM debian:wheezy
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mongodb && useradd -r -g mongodb mongodb
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
numactl \
&& rm -rf /var/lib/apt/lists/*
# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true \
&& apt-get purge -y --auto-remove ca-certificates wget
# gpg: key 7F0CEB10: public key "Richard Kreuter <richard@10gen.com>" imported
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 492EAFE8CD016A07919F1D2B9ECBEC467F0CEB10
ENV MONGO_MAJOR 3.0
ENV MONGO_VERSION 3.0.12
RUN echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list
RUN set -x \
&& apt-get update \
&& apt-get install -y \
mongodb-org=$MONGO_VERSION \
mongodb-org-server=$MONGO_VERSION \
mongodb-org-shell=$MONGO_VERSION \
mongodb-org-mongos=$MONGO_VERSION \
mongodb-org-tools=$MONGO_VERSION \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /var/lib/mongodb \
&& mv /etc/mongod.conf /etc/mongod.conf.orig
RUN mkdir -p /data/db /data/configdb \
&& chown -R mongodb:mongodb /data/db /data/configdb
VOLUME /data/db /data/configdb
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]
```
#### 3.2 版本
```
FROM debian:wheezy
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mongodb && useradd -r -g mongodb mongodb
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
numactl \
&& rm -rf /var/lib/apt/lists/*
# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true \
&& apt-get purge -y --auto-remove ca-certificates wget
# pub 4096R/AAB2461C 2014-02-25 [expires: 2016-02-25]
# Key fingerprint = DFFA 3DCF 326E 302C 4787 673A 01C4 E7FA AAB2 461C
# uid MongoDB 2.6 Release Signing Key <packaging@mongodb.com>
#
# pub 4096R/EA312927 2015-10-09 [expires: 2017-10-08]
# Key fingerprint = 42F3 E95A 2C4F 0827 9C49 60AD D68F A50F EA31 2927
# uid MongoDB 3.2 Release Signing Key <packaging@mongodb.com>
#
ENV GPG_KEYS \
DFFA3DCF326E302C4787673A01C4E7FAAAB2461C \
42F3E95A2C4F08279C4960ADD68FA50FEA312927
RUN set -ex \
&& for key in $GPG_KEYS; do \
apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done
ENV MONGO_MAJOR 3.2
ENV MONGO_VERSION 3.2.8
RUN echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list
RUN set -x \
&& apt-get update \
&& apt-get install -y \
mongodb-org=$MONGO_VERSION \
mongodb-org-server=$MONGO_VERSION \
mongodb-org-shell=$MONGO_VERSION \
mongodb-org-mongos=$MONGO_VERSION \
mongodb-org-tools=$MONGO_VERSION \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /var/lib/mongodb \
&& mv /etc/mongod.conf /etc/mongod.conf.orig
RUN mkdir -p /data/db /data/configdb \
&& chown -R mongodb:mongodb /data/db /data/configdb
VOLUME /data/db /data/configdb
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]
```
#### 3.3 版本
```
FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mongodb && useradd -r -g mongodb mongodb
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
numactl \
&& rm -rf /var/lib/apt/lists/*
# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true \
&& apt-get purge -y --auto-remove ca-certificates wget
# pub 4096R/A15703C6 2016-01-11 [expires: 2018-01-10]
# Key fingerprint = 0C49 F373 0359 A145 1858 5931 BC71 1F9B A157 03C6
# uid MongoDB 3.4 Release Signing Key <packaging@mongodb.com>
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6
ENV MONGO_MAJOR 3.3
ENV MONGO_VERSION 3.3.10
RUN echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list
RUN set -x \
&& apt-get update \
&& apt-get install -y \
mongodb-org-unstable=$MONGO_VERSION \
mongodb-org-unstable-server=$MONGO_VERSION \
mongodb-org-unstable-shell=$MONGO_VERSION \
mongodb-org-unstable-mongos=$MONGO_VERSION \
mongodb-org-unstable-tools=$MONGO_VERSION \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /var/lib/mongodb \
&& mv /etc/mongod.conf /etc/mongod.conf.orig
RUN mkdir -p /data/db /data/configdb \
&& chown -R mongodb:mongodb /data/db /data/configdb
VOLUME /data/db /data/configdb
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/mongo 查看。

View File

@@ -1,126 +1,34 @@
## [MySQL](https://hub.docker.com/_/mysql/)
# [MySQL](https://hub.docker.com/_/mysql/)
## 基本信息
### 基本信息
[MySQL](https://en.wikipedia.org/wiki/MySQL) 是开源的关系数据库实现。
该仓库位于 https://hub.docker.com/_/mysql/ ,提供了 MySQL 各个版本的镜像,包括 5.6 系列、5.7 系列等
该仓库位于 `https://hub.docker.com/_/mysql/` 提供了 MySQL 5.5 ~ 8.x 各个版本的镜像
## 使用方法
### 使用方法
默认会在 `3306` 端口启动数据库
```
```bash
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql
```
之后就可以使用其它应用来连接到该容器
```
```bash
$ docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql
```
或者通过 `mysql`
```
$ docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
```
### Dockerfile
#### 5.6 版本
```
FROM debian:wheezy
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mysql && useradd -r -g mysql mysql
# FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
# File::Basename
# File::Copy
# Sys::Hostname
# Data::Dumper
RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/*
# mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
RUN apt-get update && apt-get install -y libaio1 && rm -rf /var/lib/apt/lists/*
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
RUN gpg --keyserver pgp.mit.edu --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
ENV MYSQL_MAJOR 5.6
ENV MYSQL_VERSION 5.6.20
# note: we're pulling the *.asc file from mysql.he.net instead of dev.mysql.com because the official mirror 404s that file for whatever reason - maybe it's at a different path?
RUN apt-get update && apt-get install -y curl --no-install-recommends && rm -rf /var/lib/apt/lists/* \
&& curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz" -o mysql.tar.gz \
&& curl -SL "http://mysql.he.net/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz.asc" -o mysql.tar.gz.asc \
&& apt-get purge -y --auto-remove curl \
&& gpg --verify mysql.tar.gz.asc \
&& mkdir /usr/local/mysql \
&& tar -xzf mysql.tar.gz -C /usr/local/mysql --strip-components=1 \
&& rm mysql.tar.gz* \
&& rm -rf /usr/local/mysql/mysql-test /usr/local/mysql/sql-bench \
&& rm -rf /usr/local/mysql/bin/*-debug /usr/local/mysql/bin/*_embedded \
&& find /usr/local/mysql -type f -name "*.a" -delete \
&& apt-get update && apt-get install -y binutils && rm -rf /var/lib/apt/lists/* \
&& { find /usr/local/mysql -type f -executable -exec strip --strip-all '{}' + || true; } \
&& apt-get purge -y --auto-remove binutils
ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts
WORKDIR /usr/local/mysql
VOLUME /var/lib/mysql
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 3306
CMD ["mysqld", "--datadir=/var/lib/mysql", "--user=mysql"]
```
#### 5.7 版本
```
FROM debian:wheezy
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mysql && useradd -r -g mysql mysql
# FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
# File::Basename
# File::Copy
# Sys::Hostname
# Data::Dumper
RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/*
# mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
RUN apt-get update && apt-get install -y libaio1 && rm -rf /var/lib/apt/lists/*
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
RUN gpg --keyserver pgp.mit.edu --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
ENV MYSQL_MAJOR 5.7
ENV MYSQL_VERSION 5.7.4-m14
# note: we're pulling the *.asc file from mysql.he.net instead of dev.mysql.com because the official mirror 404s that file for whatever reason - maybe it's at a different path?
RUN apt-get update && apt-get install -y curl --no-install-recommends && rm -rf /var/lib/apt/lists/* \
&& curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz" -o mysql.tar.gz \
&& curl -SL "http://mysql.he.net/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz.asc" -o mysql.tar.gz.asc \
&& apt-get purge -y --auto-remove curl \
&& gpg --verify mysql.tar.gz.asc \
&& mkdir /usr/local/mysql \
&& tar -xzf mysql.tar.gz -C /usr/local/mysql --strip-components=1 \
&& rm mysql.tar.gz* \
&& rm -rf /usr/local/mysql/mysql-test /usr/local/mysql/sql-bench \
&& rm -rf /usr/local/mysql/bin/*-debug /usr/local/mysql/bin/*_embedded \
&& find /usr/local/mysql -type f -name "*.a" -delete \
&& apt-get update && apt-get install -y binutils && rm -rf /var/lib/apt/lists/* \
&& { find /usr/local/mysql -type f -executable -exec strip --strip-all '{}' + || true; } \
&& apt-get purge -y --auto-remove binutils
ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts
WORKDIR /usr/local/mysql
VOLUME /var/lib/mysql
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 3306
CMD ["mysqld", "--datadir=/var/lib/mysql", "--user=mysql"]
或者通过 `mysql` 命令行连接
```bash
$ docker run -it --rm \
--link some-mysql:mysql \
mysql \
sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/mysql 查看

View File

@@ -1,103 +1,48 @@
## [Nginx](https://hub.docker.com/_/nginx/)
# [Nginx](https://hub.docker.com/_/nginx/)
## 基本信息
### 基本信息
[Nginx](https://en.wikipedia.org/wiki/Nginx) 是开源的高效的 Web 服务器实现,支持 HTTP、HTTPS、SMTP、POP3、IMAP 等协议。
该仓库位于 https://hub.docker.com/_/nginx/ ,提供了 Nginx 1.0 ~ 1.11.x 各个版本的镜像。
该仓库位于 `https://hub.docker.com/_/nginx/` 提供了 Nginx 1.0 ~ 1.19.x 各个版本的镜像
## 使用方法
### 使用方法
下面的命令将作为一个静态页面服务器启动
```
```bash
$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
```
用户也可以不使用这种映射方式通过利用 Dockerfile 来直接将静态页面内容放到镜像中内容为
```
```bash
FROM nginx
COPY static-html-directory /usr/share/nginx/html
```
之后生成新的镜像并启动一个容器
```
```bash
$ docker build -t some-content-nginx .
$ docker run --name some-nginx -d some-content-nginx
```
开放端口并映射到本地的 `8080` 端口
```
docker run --name some-nginx -d -p 8080:80 some-content-nginx
```bash
$ docker run --name some-nginx -d -p 8080:80 some-content-nginx
```
Nginx的默认配置文件路径为 `/etc/nginx/nginx.conf`可以通过映射它来使用本地的配置文件例如
```
docker run --name some-nginx -v /some/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
```
使用配置文件时为了在容器中正常运行需要保持 `daemon off;`
### Dockerfile
#### stable 版本
```
FROM debian:jessie
MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com"
ENV NGINX_VERSION 1.10.1-1~jessie
RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
&& echo "deb http://nginx.org/packages/debian/ jessie nginx" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
ca-certificates \
nginx=${NGINX_VERSION} \
nginx-module-xslt \
nginx-module-geoip \
nginx-module-image-filter \
nginx-module-perl \
nginx-module-njs \
gettext-base \
&& rm -rf /var/lib/apt/lists/*
# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
```
#### 1.11.x 版本
```
FROM debian:jessie
MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com"
ENV NGINX_VERSION 1.11.1-1~jessie
RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
&& echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
ca-certificates \
nginx=${NGINX_VERSION} \
nginx-module-xslt \
nginx-module-geoip \
nginx-module-image-filter \
nginx-module-perl \
nginx-module-njs \
gettext-base \
&& rm -rf /var/lib/apt/lists/*
# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
```bash
$ docker run -d \
--name some-nginx \
-v /some/nginx.conf:/etc/nginx/nginx.conf:ro \
nginx
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/nginx 查看。

View File

@@ -1,151 +1,40 @@
## [Node.js](https://hub.docker.com/_/node/)
# [Node.js](https://hub.docker.com/_/node/)
### 基本信息
[Node.js](https://en.wikipedia.org/wiki/Node.js)是基于 JavaScript 的可扩展服务端和网络软件开发平台。
## 基本信息
该仓库位于 https://hub.docker.com/_/node/ ,提供了 Node.js 0.10 ~ 6.3.x 各个版本的镜像
[Node.js](https://en.wikipedia.org/wiki/Node.js) 是基于 JavaScript 的可扩展服务端和网络软件开发平台
该仓库位于 `https://hub.docker.com/_/node/` 提供了 Node.js 0.10 ~ 14.x 各个版本的镜像
## 使用方法
### 使用方法
在项目中创建一个 Dockerfile
```
FROM node:0.10-onbuild
```bash
FROM node:12
# replace this with your application's default port
EXPOSE 8888
```
然后创建镜像并启动容器
```
```bash
$ docker build -t my-nodejs-app
$ docker run -it --rm --name my-running-app my-nodejs-app
```
也可以直接运行一个简单容器
```
$ docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp node:0.10 node your-daemon-or-script.js
```bash
$ docker run -it --rm \
--name my-running-script \
# -v "$(pwd)":/usr/src/myapp \
--mount type=bind,src=`$(pwd)`,target=/usr/src/myapp \
-w /usr/src/myapp \
node:12-alpine \
node your-daemon-or-script.js
```
### Dockerfile
#### 0.10 版本
```
FROM buildpack-deps
RUN apt-get update && apt-get install -y \
ca-certificates \
curl
# verify gpg and sha256: http://nodejs.org/dist/v0.10.31/SHASUMS256.txt.asc
# gpg: aka "Timothy J Fontaine (Work) <tj.fontaine@joyent.com>"
RUN gpg --keyserver pgp.mit.edu --recv-keys 7937DFD2AB06298B2293C3187D33FF9D0246406D
ENV NODE_VERSION 0.10.32
RUN curl -SLO "http://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" \
&& curl -SLO "http://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& gpg --verify SHASUMS256.txt.asc \
&& grep " node-v$NODE_VERSION-linux-x64.tar.gz\$" SHASUMS256.txt.asc | sha256sum -c - \
&& tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 \
&& rm "node-v$NODE_VERSION-linux-x64.tar.gz" SHASUMS256.txt.asc
CMD [ "node" ]
```
#### 4.x 版本
```
FROM buildpack-deps:jessie
# gpg keys listed at https://github.com/nodejs/node
RUN set -ex \
&& for key in \
9554F04D7259F04124DE6B476D5A82AC7E37093B \
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \
FD3A5288F042B6850C66B31F09FE44734EB7990E \
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done
ENV NPM_CONFIG_LOGLEVEL info
ENV NODE_VERSION 4.4.7
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
&& grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
&& tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
&& rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt
CMD [ "node" ]
```
#### 5.x 版本
```
FROM buildpack-deps:jessie
# gpg keys listed at https://github.com/nodejs/node
RUN set -ex \
&& for key in \
9554F04D7259F04124DE6B476D5A82AC7E37093B \
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \
FD3A5288F042B6850C66B31F09FE44734EB7990E \
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done
ENV NPM_CONFIG_LOGLEVEL info
ENV NODE_VERSION 5.12.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
&& grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
&& tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
&& rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt
CMD [ "node" ]
```
#### 6.x 版本
```
FROM buildpack-deps:jessie
# gpg keys listed at https://github.com/nodejs/node
RUN set -ex \
&& for key in \
9554F04D7259F04124DE6B476D5A82AC7E37093B \
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \
FD3A5288F042B6850C66B31F09FE44734EB7990E \
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done
ENV NPM_CONFIG_LOGLEVEL info
ENV NODE_VERSION 6.3.1
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
&& grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
&& tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
&& rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt
CMD [ "node" ]
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/node 查看。

19
appendix/repo/php.md Normal file
View File

@@ -0,0 +1,19 @@
# [PHP](https://hub.docker.com/_/php/)
## 基本信息
[PHP](https://en.wikipedia.org/wiki/Php)Hypertext Preprocessor 超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。
该仓库位于 `https://hub.docker.com/_/php/` 提供了 PHP 5.x ~ 8.x 各个版本的镜像
## 使用方法
下面的命令将运行一个已有的 PHP 脚本
```bash
$ docker run -it --rm -v "$PWD":/app -w /app php:alpine php your-script.php
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/php 查看。

View File

@@ -1,143 +1,42 @@
## [Redis](https://hub.docker.com/_/redis/)
# [Redis](https://hub.docker.com/_/redis/)
## 基本信息
### 基本信息
[Redis](https://en.wikipedia.org/wiki/Redis) 是开源的内存 Key-Value 数据库实现。
该仓库位于 https://hub.docker.com/_/redis/ ,提供了 Redis 3.x 各个版本的镜像。
该仓库位于 `https://hub.docker.com/_/redis/` 提供了 Redis 3.x ~ 6.x 各个版本的镜像
## 使用方法
### 使用方法
默认会在 `6379` 端口启动数据库
```bash
$ docker run --name some-redis -d -p 6379:6379 redis
```
$ docker run --name some-redis -d redis
```
另外还可以启用 [持久存储](http://redis.io/topics/persistence)。
```
$ docker run --name some-redis -d redis redis-server --appendonly yes
另外还可以启用 [持久存储](https://redis.io/topics/persistence)。
```bash
$ docker run --name some-redis -d -p 6379:6379 redis redis-server --appendonly yes
```
默认数据存储位置在 `VOLUME/data`可以使用 `--volumes-from some-volume-container` `-v /docker/host/dir:/data` 将数据存放到本地
使用其他应用连接到容器可以用
```
```bash
$ docker run --name some-app --link some-redis:redis -d application-that-uses-redis
```
或者通过 `redis-cli`
```
$ docker run -it --link some-redis:redis --rm redis sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"'
```
### Dockerfile
#### 3.0 版本
```
FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r redis && useradd -r -g redis redis
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
wget \
&& rm -rf /var/lib/apt/lists/*
# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true
ENV REDIS_VERSION 3.0.7
ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-3.0.7.tar.gz
ENV REDIS_DOWNLOAD_SHA1 e56b4b7e033ae8dbf311f9191cf6fdf3ae974d1c
# for redis-sentinel see: http://redis.io/topics/sentinel
RUN buildDeps='gcc libc6-dev make' \
&& set -x \
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL" \
&& echo "$REDIS_DOWNLOAD_SHA1 *redis.tar.gz" | sha1sum -c - \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& rm redis.tar.gz \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data
COPY docker-entrypoint.sh /usr/local/bin/
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 6379
CMD [ "redis-server" ]
```
#### 3.2 版本
```
FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r redis && useradd -r -g redis redis
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
wget \
&& rm -rf /var/lib/apt/lists/*
# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true
ENV REDIS_VERSION 3.2.3
ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-3.2.3.tar.gz
ENV REDIS_DOWNLOAD_SHA1 92d6d93ef2efc91e595c8bf578bf72baff397507
# for redis-sentinel see: http://redis.io/topics/sentinel
RUN buildDeps='gcc libc6-dev make' \
&& set -x \
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL" \
&& echo "$REDIS_DOWNLOAD_SHA1 *redis.tar.gz" | sha1sum -c - \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& rm redis.tar.gz \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 6379
CMD [ "redis-server" ]
```bash
$ docker run -it --rm \
--link some-redis:redis \
redis \
sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"'
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/redis 查看。

View File

@@ -1,144 +1,20 @@
## [Ubuntu](https://hub.docker.com/_/ubuntu/)
# [Ubuntu](https://hub.docker.com/_/ubuntu/)
## 基本信息
### 基本信息
[Ubuntu](https://en.wikipedia.org/wiki/Ubuntu) 是流行的 Linux 发行版,其自带软件版本往往较新一些。
该仓库位于 https://hub.docker.com/_/ubuntu/ ,提供了 Ubuntu 从 12.04 ~ 16.10 各个版本的镜像。
该仓库位于 `https://hub.docker.com/_/ubuntu/` 提供了 Ubuntu 12.04 ~ 20.04 各个版本的镜像
## 使用方法
### 使用方法
默认会启动一个最小化的 Ubuntu 环境
```
$ docker run --name some-ubuntu -i -t ubuntu
```bash
$ docker run --name some-ubuntu -it ubuntu:20.04
root@523c70904d54:/#
```
### Dockerfile
#### 12.04 版本
```
FROM scratch
ADD precise-core-amd64.tar.gz /
# a few minor docker-specific tweaks
# see https://github.com/dotcloud/docker/blob/master/contrib/mkimage/debootstrap
RUN echo '#!/bin/sh' > /usr/sbin/policy-rc.d \
&& echo 'exit 101' >> /usr/sbin/policy-rc.d \
&& chmod +x /usr/sbin/policy-rc.d \
\
&& dpkg-divert --local --rename --add /sbin/initctl \
&& cp -a /usr/sbin/policy-rc.d /sbin/initctl \
&& sed -i 's/^exit.*/exit 0/' /sbin/initctl \
\
&& echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \
\
&& echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \
&& echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \
&& echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \
\
&& echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \
\
&& echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes
# delete all the apt list files since they're big and get stale quickly
RUN rm -rf /var/lib/apt/lists/*
# this forces "apt-get update" in dependent images, which is also good
# enable the universe
RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list
# upgrade packages for now, since the tarballs aren't updated frequently enough
RUN apt-get update && apt-get dist-upgrade -y && rm -rf /var/lib/apt/lists/*
# overwrite this with 'CMD []' in a dependent Dockerfile
CMD ["/bin/bash"]
```
#### 14.04 版本
```
FROM scratch
ADD trusty-core-amd64.tar.gz /
# a few minor docker-specific tweaks
# see https://github.com/dotcloud/docker/blob/master/contrib/mkimage/debootstrap
RUN echo '#!/bin/sh' > /usr/sbin/policy-rc.d \
&& echo 'exit 101' >> /usr/sbin/policy-rc.d \
&& chmod +x /usr/sbin/policy-rc.d \
\
&& dpkg-divert --local --rename --add /sbin/initctl \
&& cp -a /usr/sbin/policy-rc.d /sbin/initctl \
&& sed -i 's/^exit.*/exit 0/' /sbin/initctl \
\
&& echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \
\
&& echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \
&& echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \
&& echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \
\
&& echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \
\
&& echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes
# delete all the apt list files since they're big and get stale quickly
RUN rm -rf /var/lib/apt/lists/*
# this forces "apt-get update" in dependent images, which is also good
# enable the universe
RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list
# upgrade packages for now, since the tarballs aren't updated frequently enough
RUN apt-get update && apt-get dist-upgrade -y && rm -rf /var/lib/apt/lists/*
# overwrite this with 'CMD []' in a dependent Dockerfile
CMD ["/bin/bash"]
```
#### 16.04 版本
```
FROM scratch
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
# a few minor docker-specific tweaks
# see https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap
RUN set -xe \
\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L40-L48
&& echo '#!/bin/sh' > /usr/sbin/policy-rc.d \
&& echo 'exit 101' >> /usr/sbin/policy-rc.d \
&& chmod +x /usr/sbin/policy-rc.d \
\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L54-L56
&& dpkg-divert --local --rename --add /sbin/initctl \
&& cp -a /usr/sbin/policy-rc.d /sbin/initctl \
&& sed -i 's/^exit.*/exit 0/' /sbin/initctl \
\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L71-L78
&& echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \
\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L85-L105
&& echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \
&& echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \
&& echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \
\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L109-L115
&& echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \
\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L118-L130
&& echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes \
\
# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L134-L151
&& echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests
# delete all the apt list files since they're big and get stale quickly
RUN rm -rf /var/lib/apt/lists/*
# this forces "apt-get update" in dependent images, which is also good
# enable the universe
RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list
# overwrite this with 'CMD []' in a dependent Dockerfile
CMD ["/bin/bash"]
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/ubuntu 查看。

View File

@@ -1,118 +1,25 @@
## [WordPress](https://hub.docker.com/_/wordpress/)
# [WordPress](https://hub.docker.com/_/wordpress/)
### 基本信息
[WordPress](https://en.wikipedia.org/wiki/WordPress) 是开源的 Blog 和内容管理系统框架,它基于 PhP 和 MySQL。
## 基本信息
该仓库位于 https://hub.docker.com/_/wordpress/ ,提供了 WordPress 4.x 版本的镜像
[WordPress](https://en.wikipedia.org/wiki/WordPress) 是开源的 Blog 和内容管理系统框架,它基于 PHP 和 MySQL
该仓库位于 `https://hub.docker.com/_/wordpress/` 提供了 WordPress 4.x ~ 5.x 版本的镜像
## 使用方法
### 使用方法
启动容器需要 MySQL 的支持默认端口为 `80`
```
```bash
$ docker run --name some-wordpress --link some-mysql:mysql -d wordpress
```
启动 WordPress 容器时可以指定的一些环境参数包括
* `-e WORDPRESS_DB_USER=...` 缺省为 root
* `-e WORDPRESS_DB_PASSWORD=...` 缺省为连接 mysql 容器的环境变量 `MYSQL_ROOT_PASSWORD` 的值
* `-e WORDPRESS_DB_NAME=...` 缺省为 wordpress
* `-e WORDPRESS_AUTH_KEY=...`, `-e WORDPRESS_SECURE_AUTH_KEY=...`, `-e WORDPRESS_LOGGED_IN_KEY=...`, `-e WORDPRESS_NONCE_KEY=...`, `-e WORDPRESS_AUTH_SALT=...`, `-e WORDPRESS_SECURE_AUTH_SALT=...`, `-e WORDPRESS_LOGGED_IN_SALT=...`, `-e WORDPRESS_NONCE_SALT=...` 缺省为随机 sha1
启动 WordPress 容器时可以指定的一些环境变量包括
### Dockerfile
#### 4.0 版本
```
FROM debian:wheezy
* `WORDPRESS_DB_USER` 缺省为 `root`
* `WORDPRESS_DB_PASSWORD` 缺省为连接 mysql 容器的环境变量 `MYSQL_ROOT_PASSWORD` 的值
* `WORDPRESS_DB_NAME` 缺省为 `wordpress`
RUN apt-get update && apt-get install -y \
apache2 \
curl \
libapache2-mod-php5 \
php5-curl \
php5-gd \
php5-mysql \
rsync \
wget \
&& rm -rf /var/lib/apt/lists/*
RUN a2enmod rewrite
# copy a few things from apache's init script that it requires to be setup
ENV APACHE_CONFDIR /etc/apache2
ENV APACHE_ENVVARS $APACHE_CONFDIR/envvars
# and then a few more from $APACHE_CONFDIR/envvars itself
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pid
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV LANG C
RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR
# make CustomLog (access log) go to stdout instead of files
# and ErrorLog to stderr
RUN find "$APACHE_CONFDIR" -type f -exec sed -ri ' \
s!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g; \
s!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g; \
' '{}' ';'
RUN rm -rf /var/www/html && mkdir /var/www/html
VOLUME /var/www/html
WORKDIR /var/www/html
ENV WORDPRESS_VERSION 4.0.0
ENV WORDPRESS_UPSTREAM_VERSION 4.0
# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpress
RUN curl -SL http://wordpress.org/wordpress-${WORDPRESS_UPSTREAM_VERSION}.tar.gz | tar -xzC /usr/src/
COPY docker-apache.conf /etc/apache2/sites-available/wordpress
RUN a2dissite 000-default && a2ensite wordpress
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 80
CMD ["apache2", "-DFOREGROUND"]
```
#### 4.5 版本
```
FROM php:5.6-apache
RUN a2enmod rewrite expires
# install the PHP extensions we need
RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev && rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
&& docker-php-ext-install gd mysqli opcache
# set recommended PHP.ini settings
# see https://secure.php.net/manual/en/opcache.installation.php
RUN { \
echo 'opcache.memory_consumption=128'; \
echo 'opcache.interned_strings_buffer=8'; \
echo 'opcache.max_accelerated_files=4000'; \
echo 'opcache.revalidate_freq=60'; \
echo 'opcache.fast_shutdown=1'; \
echo 'opcache.enable_cli=1'; \
} > /usr/local/etc/php/conf.d/opcache-recommended.ini
VOLUME /var/www/html
ENV WORDPRESS_VERSION 4.5.3
ENV WORDPRESS_SHA1 835b68748dae5a9d31c059313cd0150f03a49269
# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpress
RUN curl -o wordpress.tar.gz -SL https://wordpress.org/wordpress-${WORDPRESS_VERSION}.tar.gz \
&& echo "$WORDPRESS_SHA1 *wordpress.tar.gz" | sha1sum -c - \
&& tar -xzf wordpress.tar.gz -C /usr/src/ \
&& rm wordpress.tar.gz \
&& chown -R www-data:www-data /usr/src/wordpress
COPY docker-entrypoint.sh /entrypoint.sh
# grr, ENTRYPOINT resets CMD now
ENTRYPOINT ["/entrypoint.sh"]
CMD ["apache2-foreground"]
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/wordpress 查看。

28
appendix/resources.md Normal file
View File

@@ -0,0 +1,28 @@
# 资源链接
## 官方网站
* Docker 官方主页https://www.docker.com
* Docker 官方博客https://www.docker.com/blog/
* Docker 官方文档https://docs.docker.com/
* Docker Hubhttps://hub.docker.com
* Docker 的源代码仓库https://github.com/moby/moby
* Docker 路线图 https://github.com/docker/roadmap/projects
* Docker 发布版本历史https://docs.docker.com/release-notes/
* Docker 常见问题https://docs.docker.com/engine/faq/
* Docker 远端应用 APIhttps://docs.docker.com/develop/sdk/
## 实践参考
* Dockerfile 参考https://docs.docker.com/engine/reference/builder/
* Dockerfile 最佳实践https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
## 技术交流
* Docker 邮件列表 https://groups.google.com/forum/#!forum/docker-user
* Docker IRC 频道https://chat.freenode.net#docker
* Docker Twitter 主页https://twitter.com/docker
## 其它
* Docker StackOverflow 问答主页https://stackoverflow.com/search?q=docker

View File

@@ -1,23 +0,0 @@
# 资源链接
## 官方网站
* Docker 官方主页: https://www.docker.com
* Docker 官方博客: https://blog.docker.com/
* Docker 官方文档: https://docs.docker.com/
* Docker Hub: https://hub.docker.com
* Docker 的源代码仓库: https://github.com/docker/docker
* Docker 发布版本历史https://docs.docker.com/release-notes/
* Docker 常见问题https://docs.docker.com/engine/faq/
* Docker 远端应用 API: https://docs.docker.com/reference/api/docker_remote_api/
## 实践参考
* Dockerfile 参考https://docs.docker.com/reference/builder/
* Dockerfile 最佳实践https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
## 技术交流
* Docker 邮件列表: https://groups.google.com/forum/#!forum/docker-user
* Docker IRC 频道: https://chat.freenode.net#docker
* Docker Twitter 主页: https://twitter.com/docker
## 其它
* Docker StackOverflow 问答主页: https://stackoverflow.com/search?q=docker

View File

@@ -1,126 +0,0 @@
# Docker命令查询
## 基本语法
Docker 命令有两大类客户端命令和服务端命令前者是主要的操作接口后者用来启动 Docker daemon
* 客户端命令基本命令格式为 `docker [OPTIONS] COMMAND [arg...]`
* 服务端命令基本命令格式为 `docker daemon [OPTIONS]`
可以通过 `man docker` `docker help` 来查看这些命令
## 客户端命令选项
* --config=""指定客户端配置文件默认为 `/.docker`
* -D=true|false是否使用 debug 模式默认不开启
* -H, --host=[]指定命令对应 Docker daemon 的监听接口可以为 unix 套接字unix:///path/to/socket文件句柄fd://socketfd或 tcp 套接字tcp://[host[:port]]),默认为 unix:///var/run/docker.sock
* -l, --log-level="debug|info|warn|error|fatal"指定日志输出级别
* --tls=true|false是否对 Docker daemon 启用 TLS 安全机制默认为否
* --tlscacert= /.docker/ca.pemTLS CA 签名的可信证书文件路径
* --tlscert= /.docker/cert.pemTLS 可信证书文件路径
* --tlscert= /.docker/key.pemTLS 密钥文件路径
* --tlsverify=true|false启用 TLS 校验默认为否
## daemon 命令选项
* --api-cors-header=""CORS 头部域默认不允许 CORS要允许任意的跨域访问可以指定为 *
* --authorization-plugin=""载入认证的插件
* -b=""将容器挂载到一个已存在的网桥上指定为 'none' 时则禁用容器的网络 --bip 选项互斥
* --bip=""让动态创建的 docker0 网桥采用给定的 CIDR 地址; -b 选项互斥
* --cgroup-parent=""指定 cgroup 的父组默认 fs cgroup 驱动为 `/docker`systemd cgroup 驱动为 `system.slice`
* --cluster-store=""构成集群 Swarm集群键值数据库服务地址
* --cluster-advertise=""构成集群时自身的被访问地址可以为 `host:port` `interface:port`
* --cluster-store-opt=""构成集群时键值数据库的配置选项
* --config-file="/etc/docker/daemon.json"daemon 配置文件路径
* --containerd=""containerd 文件的路径
* -D, --debug=true|false是否使用 Debug 模式缺省为 false
* --default-gateway=""容器的 IPv4 网关地址必须在网桥的子网段内
* --default-gateway-v6=""容器的 IPv6 网关地址
* --default-ulimit=[]默认的 ulimit
* --disable-legacy-registry=true|false是否允许访问旧版本的镜像仓库服务器
* --dns=""指定容器使用的 DNS 服务器地址
* --dns-opt=""DNS 选项
* --dns-search=[]DNS 搜索域
* --exec-opt=[]运行时的执行选项
* --exec-root=""容器执行状态文件的根路径默认为 `/var/run/docker`
* --fixed-cidr=""限定分配 IPv4 地址范围
* --fixed-cidr-v6=""限定分配 IPv6 地址范围
* -G, --group=""分配给 unix 套接字的组默认为 `docker`
* -g, --graph=""Docker 运行时的根路径默认为 `/var/lib/docker`
* -H, --host=[]指定命令对应 Docker daemon 的监听接口可以为 unix 套接字unix:///path/to/socket文件句柄fd://socketfd或 tcp 套接字tcp://[host[:port]]),默认为 unix:///var/run/docker.sock
* --icc=true|false是否启用容器间以及跟 daemon 所在主机的通信默认为 true
* --insecure-registry=[]允许访问给定的非安全仓库服务
* --ip=""绑定容器端口时候的默认 IP 地址缺省为 0.0.0.0
* --ip-forward=true|false是否检查启动在 Docker 主机上的启用 IP 转发服务默认开启注意关闭该选项将不对系统转发能力进行任何检查修改
* --ip-masq=true|false是否进行地址伪装用于容器访问外部网络默认开启
* --iptables=true|false是否允许 Docker 添加 iptables 规则缺省为 true
* --ipv6=true|false是否启用 IPv6 支持默认关闭
* -l, --log-level="debug|info|warn|error|fatal"指定日志输出级别
* --label="[]"添加指定的键值对标注
* --log-driver="json-file|syslog|journald|gelf|fluentd|awslogs|splunk|etwlogs|gcplogs|none"指定日志后端驱动默认为 json-file
* --log-opt=[]日志后端的选项
* --mtu=VALUE指定容器网络的 mtu
* -p=""指定 daemon PID 文件路径缺省为 `/var/run/docker.pid`
* --raw-logs输出原始未加色彩的日志信息
* --registry-mirror=<scheme>://<host>:指定 `docker pull` 时使用的注册服务器镜像地址;
* -s, --storage-driver=""指定使用给定的存储后端
* --selinux-enabled=true|false是否启用 SELinux 支持缺省值为 falseSELinux 目前尚不支持 overlay 存储驱动
* --storage-opt=[]驱动后端选项
* --tls=true|false是否对 Docker daemon 启用 TLS 安全机制默认为否
* --tlscacert= /.docker/ca.pemTLS CA 签名的可信证书文件路径
* --tlscert= /.docker/cert.pemTLS 可信证书文件路径
* --tlscert= /.docker/key.pemTLS 密钥文件路径
* --tlsverify=true|false启用 TLS 校验默认为否
* --userland-proxy=true|false是否使用用户态代理来实现容器间和出容器的回环通信默认为 true
* --userns-remap=default|uid:gid|user:group|user|uid指定容器的用户命名空间默认是创建新的 UID GID 映射到容器内进程
## 子命令
可以通过 `man docker-COMMAND` 来查看这些命令的具体用法
* attach依附到一个正在运行的容器中
* build从一个 Dockerfile 创建一个镜像
* commit从一个容器的修改中创建一个新的镜像
* cp在容器和本地宿主系统之间复制文件中
* create创建一个新容器但并不运行它
* diff检查一个容器文件系统的修改
* events从服务端获取实时的事件
* exec在运行的容器内执行命令
* export导出容器内容为一个 tar
* history显示一个镜像的历史信息
* images列出存在的镜像
* import导入一个文件典型为 tar 路径或目录来创建一个本地镜像
* info显示一些相关的系统信息
* inspect显示一个容器的具体配置信息
* kill关闭一个运行中的容器 (包括进程和所有相关资源)
* load从一个 tar 包中加载一个镜像
* login注册或登录到一个 Docker 的仓库服务器
* logout Docker 的仓库服务器登出
* logs获取容器的 log 信息
* network管理 Docker 的网络包括查看创建删除挂载卸载等
* node管理 swarm 集群中的节点包括查看更新删除提升/取消管理节点等
* pause暂停一个容器中的所有进程
* port查找一个 nat 到一个私有网口的公共口
* ps列出主机上的容器
* pull从一个Docker的仓库服务器下拉一个镜像或仓库
* push将一个镜像或者仓库推送到一个 Docker 的注册服务器
* rename重命名一个容器
* restart重启一个运行中的容器
* rm删除给定的若干个容器
* rmi删除给定的若干个镜像
* run创建一个新容器并在其中运行给定命令
* save保存一个镜像为 tar 包文件
* search Docker index 中搜索一个镜像
* service管理 Docker 所启动的应用服务包括创建更新删除等
* start启动一个容器
* stats输出一个或多个容器的资源使用统计信息
* stop终止一个运行中的容器
* swarm管理 Docker swarm 集群包括创建加入退出更新等
* tag为一个镜像打标签
* top查看一个容器中的正在运行的进程信息
* unpause将一个容器内所有的进程从暂停状态中恢复
* update更新指定的若干容器的配置信息
* version输出 Docker 的版本信息
* volume管理 Docker volume包括查看创建删除等
* wait阻塞直到一个容器终止然后输出它的退出符
## 一张图总结 Docker 的命令
![命令周期](../_images/cmd_logic.png)

7
archive/README.md Normal file
View File

@@ -0,0 +1,7 @@
# 归档项目
以下项目不被官方支持或内容陈旧将在下一版本中删除
* Docker Machine
* Mesos
* Docker Swarm

View File

@@ -1,8 +1,7 @@
# 基本概念
Docker 包括三个基本概念
* 镜像Image
* 容器Container
* 仓库Repository
* 镜像`Image`
* 容器`Container`
* 仓库`Repository`
理解了这三个概念就理解了 Docker 的整个生命周期

View File

@@ -1,13 +1,13 @@
## Docker 容器
# Docker 容器
镜像Image和容器Container的关系就像是面向对象程序设计中的```实例`一样镜像是静态的定义容器是镜像运行时的实体容器可以被创建启动停止删除暂停等
镜像`Image`和容器`Container`的关系就像是面向对象程序设计中的 `` `实例` 一样镜像是静态的定义容器是镜像运行时的实体容器可以被创建启动停止删除暂停等
容器的实质是进程但与直接在宿主执行的进程不同容器进程运行于属于自己的独立的 [命名空间](https://en.wikipedia.org/wiki/Linux_namespaces)。因此容器可以拥有自己的 `root` 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会容器和虚拟机搞混
容器的实质是进程但与直接在宿主执行的进程不同容器进程运行于属于自己的独立的 [命名空间](https://en.wikipedia.org/wiki/Linux_namespaces)。因此容器可以拥有自己的 `root` 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。
前面讲过镜像使用的是分层存储容器也是如此每一个容器运行时是以镜像为基础层在其上创建一个当前容器的存储层我们可以称这个为容器运行时读写而准备的存储层为**容器存储层**
前面讲过镜像使用的是分层存储容器也是如此每一个容器运行时是以镜像为基础层在其上创建一个当前容器的存储层我们可以称这个为容器运行时读写而准备的存储层为 **容器存储层**
容器存储层的生存周期和容器一样容器消亡时容器存储层也随之消亡因此任何保存于容器存储层的信息都会随容器删除而丢失
按照 Docker 最佳实践的要求容器不应该向其存储层内写入任何数据容器存储层要保持无状态化所有的文件写入操作都应该使用 [数据卷Volume](https://docs.docker.com/engine/tutorials/dockervolumes/)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
按照 Docker 最佳实践的要求容器不应该向其存储层内写入任何数据容器存储层要保持无状态化所有的文件写入操作都应该使用 [数据卷Volume](../data_management/volume.md)或者 [绑定宿主目录](../data_management/bind-mounts.md)在这些位置的读写会跳过容器存储层直接对宿主或网络存储发生读写其性能和稳定性更高
数据卷的生存周期独立于容器容器消亡数据卷不会消亡因此使用数据卷后容器可以随意删除重新 `run`数据却不会丢失
数据卷的生存周期独立于容器容器消亡数据卷不会消亡因此使用数据卷后容器删除或者重新运行之后数据却不会丢失

View File

@@ -1,10 +1,10 @@
## Docker 镜像
# Docker 镜像
我们都知道操作系统分为内核和用户空间对于 Linux 而言内核启动后会挂载 `root` 文件系统为其提供用户空间支持 Docker 镜像Image就相当于是一个 `root` 文件系统比如官方镜像 `ubuntu:14.04` 就包含了完整的一套 Ubuntu 14.04 最小系统的 `root` 文件系统
我们都知道操作系统分为内核和用户空间对于 Linux 而言内核启动后会挂载 `root` 文件系统为其提供用户空间支持 Docker 镜像Image就相当于是一个 `root` 文件系统比如官方镜像 `ubuntu:18.04` 就包含了完整的一套 Ubuntu 18.04 最小系统的 `root` 文件系统
Docker 镜像是一个特殊的文件系统除了提供容器运行时所需的程序资源配置等文件外还包含了一些为运行时准备的一些配置参数如匿名卷环境变量用户等镜像不包含任何动态数据其内容在构建之后也不会被改变
### 分层存储
## 分层存储
因为镜像包含操作系统完整的 `root` 文件系统其体积往往是庞大的因此在 Docker 设计时就充分利用 [Union FS](https://en.wikipedia.org/wiki/Union_mount) 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

View File

@@ -1,29 +1,29 @@
## Docker Registry
# Docker Registry
镜像构建完成后可以很容易的在当前宿主上运行但是如果需要在其它服务器上使用这个镜像我们就需要一个集中的存储分发镜像的服务[Docker Registry](https://docs.docker.com/registry/) 就是这样的服务。
镜像构建完成后可以很容易的在当前宿主上运行但是如果需要在其它服务器上使用这个镜像我们就需要一个集中的存储分发镜像的服务[Docker Registry](../repository/registry.md) 就是这样的服务
一个 **Docker Registry** 中可以包含多个**仓库**Repository每个仓库可以包含多个**标签**Tag每个标签对应一个镜像
一个 **Docker Registry** 中可以包含多个 **仓库**`Repository`每个仓库可以包含多个 **标签**`Tag`每个标签对应一个镜像
通常一个仓库会包含同一个软件不同版本的镜像而标签就常用于对应该软件的各个版本我们可以通过 `<仓库名>:<标签>` 的格式来指定具体是这个软件哪个版本的镜像如果不给出标签将以 `latest` 作为默认标签
[Ubuntu 镜像](https://hub.docker.com/_/ubuntu/) 为例,`ubuntu` 是仓库的名字,其内包含有不同的版本标签,如,`14.04`, `16.04`。我们可以通过 `ubuntu:14.04`,或者 `ubuntu:16.04` 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 `ubuntu`,那将视为 `ubuntu:latest`。
[Ubuntu 镜像](https://hub.docker.com/_/ubuntu) 为例,`ubuntu` 是仓库的名字,其内包含有不同的版本标签,如,`16.04`, `18.04`。我们可以通过 `ubuntu:16.04`,或者 `ubuntu:18.04` 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 `ubuntu`,那将视为 `ubuntu:latest`。
仓库名经常以 *两段式路径* 形式出现比如 `jwilder/nginx-proxy`前者往往意味着 Docker Registry 多用户环境下的用户名后者则往往是对应的软件名但这并非绝对取决于所使用的具体 Docker Registry 的软件或服务
### Docker Registry 公开服务
## Docker Registry 公开服务
Docker Registry 公开服务是开放给用户使用允许用户管理镜像的 Registry 服务一般这类公开服务允许用户免费上传下载公开的镜像并可能提供收费服务供用户管理私有镜像
最常使用的 Registry 公开服务是官方的 [Docker Hub](https://hub.docker.com/),这也是默认的 Registry并拥有大量的高质量的官方镜像。除此以外还有 [CoreOS](https://coreos.com/) 的 [Quay.io](https://quay.io/repository/)CoreOS 相关的镜像存储在这里Google 的 [Google Container Registry](https://cloud.google.com/container-registry/)[Kubernetes](http://kubernetes.io/) 的镜像使用的就是这个服务。
最常使用的 Registry 公开服务是官方的 [Docker Hub](https://hub.docker.com/),这也是默认的 Registry并拥有大量的高质量的官方镜像。除此以外还有 Red Hat 的 [Quay.io](https://quay.io/repository/)Google 的 [Google Container Registry](https://cloud.google.com/container-registry/)[Kubernetes](https://kubernetes.io/) 的镜像使用的就是这个服务。
由于某些原因在国内访问这些服务可能会比较慢国内的一些云服务商提供了针对 Docker Hub 的镜像服务Registry Mirror这些镜像服务被称为**加速器**常见的有 [阿里云加速器](https://cr.console.aliyun.com/#/accelerator)、[DaoCloud 加速器](https://www.daocloud.io/mirror#accelerator-doc)、[灵雀云加速器](http://docs.alauda.cn/feature/accelerator.html)等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提高很多。在后面的章节中会有进一步如何配置加速器的讲解
由于某些原因在国内访问这些服务可能会比较慢国内的一些云服务商提供了针对 Docker Hub 的镜像服务`Registry Mirror`这些镜像服务被称为 **加速器**常见的有 [阿里云加速器](https://cr.console.aliyun.com/#/accelerator)、[DaoCloud 加速器](https://www.daocloud.io/mirror#accelerator-doc) 等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从 Docker Hub 下载速度会提高很多。在 [安装 Docker](../install/mirror.md) 一节中有详细的配置方法
国内也有一些云服务商提供类似于 Docker Hub 的公开服务比如 [时速云镜像仓库](https://hub.tenxcloud.com/)、[网易云镜像服务](https://c.163.com/hub#/m/library/)、[DaoCloud 镜像市场](https://hub.daocloud.io/)、[阿里云镜像库](https://cr.console.aliyun.com)等。
国内也有一些云服务商提供类似于 Docker Hub 的公开服务比如 [网易云镜像服务](https://c.163.com/hub#/m/library/)、[DaoCloud 镜像市场](https://hub.daocloud.io/)、[阿里云镜像库](https://cr.console.aliyun.com) 等。
### 私有 Docker Registry
## 私有 Docker Registry
除了使用公开服务外用户还可以在本地搭建私有 Docker RegistryDocker 官方提供了 [Docker Registry 镜像](https://hub.docker.com/_/registry/),可以直接使用做为私有 Registry 服务。在后续的相关章节中,会有进一步的搭建私有 Registry 服务的讲解。
除了使用公开服务外用户还可以在本地搭建私有 Docker RegistryDocker 官方提供了 [Docker Registry](https://hub.docker.com/_/registry/) 镜像,可以直接使用做为私有 Registry 服务。在 [私有仓库](../repository/registry.md) 一节中,会有进一步的搭建私有 Registry 服务的讲解。
开源的 Docker Registry 镜像只提供了 [Docker Registry API](https://docs.docker.com/registry/spec/api/) 的服务端实现,足以支持 `docker` 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。在官方的商业化版本 [Docker Trusted Registry](https://docs.docker.com/datacenter/dtr/2.0/) 中,提供了这些高级功能。
除了官方的 Docker Registry 还有第三方软件实现了 Docker Registry API甚至提供了用户界面以及一些高级功能比如[VMWare Harbor](http://vmware.github.io/harbor/index_cn.html) 和 [Sonatype Nexus](https://www.sonatype.com/docker)。
除了官方的 Docker Registry 还有第三方软件实现了 Docker Registry API甚至提供了用户界面以及一些高级功能比如[Harbor](https://github.com/goharbor/harbor) 和 [Sonatype Nexus](../repository/nexus3_registry.md)。

View File

@@ -1,10 +1,18 @@
{
"title": "Docker -- 从入门到实践",
"author": "yeasy",
"language": "zh-hans",
"links": {
"sidebar": {
"GitHub": "https://github.com/yeasy/docker_practice"
}
},
"plugins": [
"-livereload",
"image-captions",
"github-buttons",
"page-treeview"
"github",
"page-treeview@2.9.8",
"editlink"
],
"pluginsConfig": {
"image-captions": {
@@ -13,18 +21,17 @@
},
"caption": "图 _PAGE_LEVEL_._PAGE_IMAGE_NUMBER_ - _CAPTION_"
},
"github-buttons": {
"repo": "yeasy/docker_practice",
"types": [
"star",
"watch"
],
"size": "small"
"github": {
"url": "https://github.com/yeasy/docker_practice"
},
"editlink": {
"base": "https://github.com/yeasy/docker_practice/blob/master/",
"label": "编辑本页"
},
"page-treeview": {
"copyright": "Copyright &#169; yeasy",
"minHeaderCount": "2",
"minHeaderDeep": "2"
}
}
}
}

5
buildx/README.md Normal file
View File

@@ -0,0 +1,5 @@
# Docker Buildx
Docker Buildx 是一个 docker CLI 插件其扩展了 docker 命令支持 [Moby BuildKit](buildkit.md) 提供的功能提供了与 docker build 相同的用户体验并增加了许多新功能
> 该功能仅适用于 Docker v19.03+ 版本

154
buildx/buildkit.md Normal file
View File

@@ -0,0 +1,154 @@
# 使用 `BuildKit` 构建镜像
**BuildKit** 是下一代的镜像构建组件 https://github.com/moby/buildkit 开源。
**注意如果您的镜像构建使用的是云服务商提供的镜像构建服务腾讯云容器服务阿里云容器服务等由于上述服务提供商的 Docker 版本低于 18.09BuildKit 无法使用将造成镜像构建失败建议使用 BuildKit 构建镜像时使用一个新的 Dockerfile 文件例如 Dockerfile.buildkit**
目前Docker Hub 自动构建已经支持 buildkit具体请参考 https://github.com/docker-practice/docker-hub-buildx
## `Dockerfile` 新增指令详解
启用 `BuildKit` 之后我们可以使用下面几个新的 `Dockerfile` 指令来加快镜像构建
### `RUN --mount=type=cache`
目前几乎所有的程序都会使用依赖管理工具例如 `Go` 中的 `go mod``Node.js` 中的 `npm` 等等当我们构建一个镜像时往往会重复的从互联网中获取依赖包难以缓存大大降低了镜像的构建效率
例如一个前端工程需要用到 `npm`
```docker
FROM node:alpine as builder
WORKDIR /app
COPY package.json /app/
RUN npm i --registry=https://registry.npm.taobao.org \
&& rm -rf ~/.npm
COPY src /app/src
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /app/dist
```
使用多阶段构建构建的镜像中只包含了目标文件夹 `dist`但仍然存在一些问题 `package.json` 文件变动时`RUN npm i && rm -rf ~/.npm` 这一层会重新执行变更多次后生成了大量的中间层镜像
为解决这个问题进一步的我们可以设想一个类似 **数据卷** 的功能在镜像构建时把 `node_modules` 文件夹挂载上去在构建完成后这个 `node_modules` 文件夹会自动卸载实际的镜像中并不包含 `node_modules` 这个文件夹这样我们就省去了每次获取依赖的时间大大增加了镜像构建效率同时也避免了生成了大量的中间层镜像
`BuildKit` 提供了 `RUN --mount=type=cache` 指令可以实现上边的设想
```docker
# syntax = docker/dockerfile:experimental
FROM node:alpine as builder
WORKDIR /app
COPY package.json /app/
RUN --mount=type=cache,target=/app/node_modules,id=my_app_npm_module,sharing=locked \
--mount=type=cache,target=/root/.npm,id=npm_cache \
npm i --registry=https://registry.npm.taobao.org
COPY src /app/src
RUN --mount=type=cache,target=/app/node_modules,id=my_app_npm_module,sharing=locked \
# --mount=type=cache,target=/app/dist,id=my_app_dist,sharing=locked \
npm run build
FROM nginx:alpine
# COPY --from=builder /app/dist /app/dist
# 为了更直观的说明 from 和 source 指令,这里使用 RUN 指令
RUN --mount=type=cache,target=/tmp/dist,from=builder,source=/app/dist \
# --mount=type=cache,target/tmp/dist,from=my_app_dist,sharing=locked \
mkdir -p /app/dist && cp -r /tmp/dist/* /app/dist
```
**由于 `BuildKit` 为实验特性每个 `Dockerfile` 文件开头都必须加上如下指令**
```docker
# syntax = docker/dockerfile:experimental
```
第一个 `RUN` 指令执行后`id` `my_app_npm_module` 的缓存文件夹挂载到了 `/app/node_modules` 文件夹中多次执行也不会产生多个中间层镜像
第二个 `RUN` 指令执行时需要用到 `node_modules` 文件夹`node_modules` 已经挂载命令也可以正确执行
第三个 `RUN` 指令将上一阶段产生的文件复制到指定位置`from` 指明缓存的来源这里 `builder` 表示缓存来源于构建的第一阶段`source` 指明缓存来源的文件夹
上面的 `Dockerfile` `--mount=type=cache,...` 中指令作用如下
|Option |Description|
|---------------------|-----------|
|`id` | `id` 设置一个标志以便区分缓存|
|`target` (必填项) | 缓存的挂载目标文件夹|
|`ro`,`readonly` | 只读缓存文件夹不能被写入 |
|`sharing` | `shared` `private` `locked` 值可供选择`sharing` 设置当一个缓存被多次使用时的表现由于 `BuildKit` 支持并行构建当多个步骤使用同一缓存时同一 `id`会发生冲突`shared` 表示多个步骤可以同时读写`private` 表示当多个步骤使用同一缓存时每个步骤使用不同的缓存`locked` 表示当一个步骤完成释放缓存后后一个步骤才能继续使用该缓存|
|`from` | 缓存来源构建阶段不填写时为空文件夹|
|`source` | 来源的文件夹路径|
### `RUN --mount=type=bind`
该指令可以将一个镜像或上一构建阶段的文件挂载到指定位置
```docker
# syntax = docker/dockerfile:experimental
RUN --mount=type=bind,from=php:alpine,source=/usr/local/bin/docker-php-entrypoint,target=/docker-php-entrypoint \
cat /docker-php-entrypoint
```
### `RUN --mount=type=tmpfs`
该指令可以将一个 `tmpfs` 文件系统挂载到指定位置
```docker
# syntax = docker/dockerfile:experimental
RUN --mount=type=tmpfs,target=/temp \
mount | grep /temp
```
### `RUN --mount=type=secret`
该指令可以将一个文件(例如密钥)挂载到指定位置
```docker
# syntax = docker/dockerfile:experimental
RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \
cat /root/.aws/credentials
```
```bash
$ docker build -t test --secret id=aws,src=$HOME/.aws/credentials .
```
### `RUN --mount=type=ssh`
该指令可以挂载 `ssh` 密钥
```docker
# syntax = docker/dockerfile:experimental
FROM alpine
RUN apk add --no-cache openssh-client
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
RUN --mount=type=ssh ssh git@gitlab.com | tee /hello
```
```bash
$ eval $(ssh-agent)
$ ssh-add ~/.ssh/id_rsa
(Input your passphrase here)
$ docker build -t test --ssh default=$SSH_AUTH_SOCK .
```
## docker-compose build 使用 Buildkit
设置 `COMPOSE_DOCKER_CLI_BUILD=1` 环境变量即可使用
## 官方文档
* https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md

21
buildx/buildx.md Normal file
View File

@@ -0,0 +1,21 @@
# 使用 Buildx 构建镜像
## 启用 Buildx
`buildx` 命令属于实验特性请参考 [开启实验特性](../install/experimental.md) 一节开启 Docker CLI 实验特性
## 使用
你可以直接使用 `docker buildx build` 命令构建镜像
```bash
$ docker buildx build .
[+] Building 8.4s (23/32)
=> ...
```
Buildx 使用 [BuildKit 引擎](buildkit.md) 进行构建支持许多新的功能具体参考 [Buildkit](buildkit.md) 一节
## 官方文档
* https://docs.docker.com/engine/reference/commandline/buildx/

126
buildx/multi-arch-images.md Normal file
View File

@@ -0,0 +1,126 @@
# 使用 buildx 构建多种系统架构支持的 Docker 镜像
在之前的版本中构建多种系统架构支持的 Docker 镜像要想使用统一的名字必须使用 [`$ docker manifest`](../image/manifest.md) 命令
Docker 19.03+ 版本中可以使用 `$ docker buildx build` 命令使用 `BuildKit` 构建镜像该命令支持 `--platform` 参数可以同时构建支持多种系统架构的 Docker 镜像大大简化了构建步骤
## 新建 `builder` 实例
Docker for Linux 不支持构建 `arm` 架构镜像我们可以运行一个新的容器让其支持该特性Docker 桌面版无需进行此项设置
```bash
$ docker run --rm --privileged tonistiigi/binfmt:latest --install all
```
由于 Docker 默认的 `builder` 实例不支持同时指定多个 `--platform`我们必须首先创建一个新的 `builder` 实例同时由于国内拉取镜像较缓慢我们可以使用配置了 [镜像加速地址](https://github.com/moby/buildkit/blob/master/docs/buildkitd.toml.md) 的 [`dockerpracticesig/buildkit:master`](https://github.com/docker-practice/buildx) 镜像替换官方镜像。
> 如果你有私有的镜像加速器可以基于 https://github.com/docker-practice/buildx 构建自己的 buildkit 镜像并使用它。
```bash
# 适用于国内环境
$ docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master
# 适用于腾讯云环境(腾讯云主机、coding.net 持续集成)
$ docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master-tencent
# $ docker buildx create --name mybuilder --driver docker-container
$ docker buildx use mybuilder
```
## 构建镜像
新建 Dockerfile 文件
```docker
FROM --platform=$TARGETPLATFORM alpine
RUN uname -a > /os.txt
CMD cat /os.txt
```
使用 `$ docker buildx build` 命令构建镜像注意将 `myusername` 替换为自己的 Docker Hub 用户名
`--push` 参数表示将构建好的镜像推送到 Docker 仓库
```bash
$ docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t myusername/hello . --push
# 查看镜像信息
$ docker buildx imagetools inspect myusername/hello
```
在不同架构运行该镜像可以得到该架构的信息
```bash
# arm
$ docker run -it --rm myusername/hello
Linux buildkitsandbox 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 armv7l Linux
# arm64
$ docker run -it --rm myusername/hello
Linux buildkitsandbox 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 aarch64 Linux
# amd64
$ docker run -it --rm myusername/hello
Linux buildkitsandbox 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 Linux
```
## 架构相关变量
`Dockerfile` 支持如下架构相关的变量
**TARGETPLATFORM**
构建镜像的目标平台例如 `linux/amd64`, `linux/arm/v7`, `windows/amd64`
**TARGETOS**
`TARGETPLATFORM` OS 类型例如 `linux`, `windows`
**TARGETARCH**
`TARGETPLATFORM` 的架构类型例如 `amd64`, `arm`
**TARGETVARIANT**
`TARGETPLATFORM` 的变种该变量可能为空例如 `v7`
**BUILDPLATFORM**
构建镜像主机平台例如 `linux/amd64`
**BUILDOS**
`BUILDPLATFORM` OS 类型例如 `linux`
**BUILDARCH**
`BUILDPLATFORM` 的架构类型例如 `amd64`
**BUILDVARIANT**
`BUILDPLATFORM` 的变种该变量可能为空例如 `v7`
### 使用举例
例如我们要构建支持 `linux/arm/v7` `linux/amd64` 两种架构的镜像假设已经生成了两个平台对应的二进制文件
* `bin/dist-linux-arm`
* `bin/dist-linux-amd64`
那么 `Dockerfile` 可以这样书写
```docker
FROM scratch
# 使用变量必须申明
ARG TARGETOS
ARG TARGETARCH
COPY bin/dist-${TARGETOS}-${TARGETARCH} /dist
ENTRYPOINT ["dist"]
```

7
cases/ci/README.md Normal file
View File

@@ -0,0 +1,7 @@
# CI/CD
**持续集成(Continuous integration)** 是一种软件开发实践每次集成都通过自动化的构建包括编译发布自动化测试来验证从而尽早地发现集成错误
**持续部署(continuous deployment)** 是通过自动化的构建测试和部署循环来快速交付高质量的产品
`Jenkins` 不同的是基于 Docker CI/CD 每一步都运行在 Docker 容器中所以理论上支持所有的编程语言

View File

@@ -0,0 +1,28 @@
# GitHub Actions
GitHub [Actions](https://github.com/features/actions) 是 GitHub 推出的一款 CI/CD 工具。
我们可以在每个 `job` `step` 中使用 Docker 执行构建步骤
```yaml
on: push
name: CI
jobs:
my-job:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
with:
fetch-depth: 2
- name: run docker container
uses: docker://golang:alpine
with:
args: go version
```
## 参考资料
* [Actions Docs](https://docs.github.com/en/free-pro-team@latest/actions)

View File

@@ -0,0 +1,6 @@
DRONE_SERVER_HOST=
DRONE_SERVER_PROTO=
DRONE_RPC_SECRET=
HOSTNAME=
DRONE_GITHUB_CLIENT_ID=
DRONE_GITHUB_CLIENT_SECRET=

2
cases/ci/drone/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
.env
ssl/*

99
cases/ci/drone/README.md Normal file
View File

@@ -0,0 +1,99 @@
# Drone
基于 `Docker` `CI/CD` 工具 `Drone` 所有编译测试的流程都在 `Docker` 容器中进行
开发者只需在项目中包含 `.drone.yml` 文件将代码推送到 git 仓库`Drone` 就能够自动化的进行编译测试发布
本小节以 `GitHub` + `Drone` 来演示 `Drone` 的工作流程当然在实际开发过程中你的代码也许不在 GitHub 托管那么你可以尝试使用 `Gogs` + `Drone` 来进行 `CI/CD`
## Drone 关联项目
Github 新建一个名为 `drone-demo` 的仓库
打开我们已经 [部署好的 Drone 网站](install.md) 或者 [Drone Cloud](https://cloud.drone.io),使用 GitHub 账号登录,在界面中关联刚刚新建的 `drone-demo` 仓库。
## 编写项目源代码
初始化一个 git 仓库
```bash
$ mkdir drone-demo
$ cd drone-demo
$ git init
$ git remote add origin git@github.com:username/drone-demo.git
```
这里以一个简单的 `Go` 程序为例该程序输出 `Hello World!`
编写 `app.go` 文件
```go
package main
import "fmt"
func main(){
fmt.Printf("Hello World!\n");
}
```
编写 `.drone.yml` 文件
```yaml
kind: pipeline
type: docker
name: build
steps:
- name: build
image: golang:alpine
pull: if-not-exists # always never
environment:
KEY: VALUE
commands:
- echo $KEY
- pwd
- ls
- CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
- ./app
trigger:
branch:
- master
```
现在目录结构如下
```bash
.
├── .drone.yml
└── app.go
```
## 推送项目源代码到 GitHub
```bash
$ git add .
$ git commit -m "test drone ci"
$ git push origin master
```
## 查看项目构建过程及结果
打开我们部署好的 `Drone` 网站或者 Drone Cloud即可看到构建结果
![](_images/drone-build.png)
当然我们也可以把构建结果上传到 GitHubDocker Registry云服务商提供的对象存储或者生产环境中
本书 GitBook 也使用 Drone 进行 CI/CD具体配置信息请查看本书根目录 [`.drone.yml`](https://github.com/yeasy/docker_practice/blob/master/.drone.yml) 文件。
## 参考链接
* [Drone Github](https://github.com/drone/drone)
* [Drone 文档](https://docs.drone.io/)
* [Drone 示例](https://github.com/docker-practice/drone-demo)

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View File

@@ -0,0 +1,19 @@
kind: pipeline
type: docker
name: build
steps:
- name: build
image: golang:alpine
pull: if-not-exists # always never
environment:
KEY: VALUE
commands:
- echo $KEY
- pwd
- ls
- CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
- ./app
trigger:
branch:
- master

View File

@@ -0,0 +1 @@
# Drone Demo

View File

@@ -0,0 +1,7 @@
package main
import "fmt"
func main(){
fmt.Printf("Hello World!\n");
}

View File

@@ -0,0 +1,39 @@
version: '3'
services:
drone-server:
image: drone/drone:1
ports:
- 443:443
- 80:80
volumes:
- drone-data:/data:rw
- ./ssl:/etc/certs
restart: always
environment:
- DRONE_AGENTS_ENABLED=true
- DRONE_SERVER_HOST=${DRONE_SERVER_HOST:-drone.domain.com}
- DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO:-https}
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET:-secret}
- DRONE_GITHUB_SERVER=https://github.com
- DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID}
- DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}
drone-agent:
image: drone/drone-runner-docker:1
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=drone-server
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET:-secret}
- DRONE_RUNNER_NAME=${HOSTNAME:-demo}
- DRONE_RUNNER_CAPACITY=2
dns: 114.114.114.114
volumes:
drone-data:

87
cases/ci/drone/install.md Normal file
View File

@@ -0,0 +1,87 @@
# 部署 Drone
## 要求
* 拥有公网 IP域名 (如果你不满足要求可以尝试在本地使用 Gogs + Drone)
* 域名 SSL 证书 (目前国内有很多云服务商提供免费证书)
* 熟悉 `Docker` 以及 `Docker Compose`
* 熟悉 `Git` 基本命令
* `CI/CD` 有一定了解
## 新建 GitHub 应用
登录 GitHub https://github.com/settings/applications/new 新建一个应用。
![](https://docs.drone.io/screenshots/github_application_create.png)
接下来查看这个应用的详情记录 `Client ID` `Client Secret`之后配置 Drone 会用到
## 配置 Drone
我们通过使用 `Docker Compose` 来启动 `Drone`编写 `docker-compose.yml` 文件
```yaml
version: '3'
services:
drone-server:
image: drone/drone:1
ports:
- 443:443
- 80:80
volumes:
- drone-data:/data:rw
- ./ssl:/etc/certs
restart: always
environment:
- DRONE_AGENTS_ENABLED=true
- DRONE_SERVER_HOST=${DRONE_SERVER_HOST:-https://drone.yeasy.com}
- DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO:-https}
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET:-secret}
- DRONE_GITHUB_SERVER=https://github.com
- DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID}
- DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}
drone-agent:
image: drone/drone-runner-docker:1
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=drone-server
- DRONE_RPC_SECRET=${DRONE_RPC_SECRET:-secret}
- DRONE_RUNNER_NAME=${HOSTNAME:-demo}
- DRONE_RUNNER_CAPACITY=2
dns: 114.114.114.114
volumes:
drone-data:
```
新建 `.env` 文件输入变量及其值
```bash
# 必填 服务器地址,例如 drone.domain.com
DRONE_SERVER_HOST=
DRONE_SERVER_PROTO=https
DRONE_RPC_SECRET=secret
HOSTNAME=demo
# 必填 在 GitHub 应用页面查看
DRONE_GITHUB_CLIENT_ID=
# 必填 在 GitHub 应用页面查看
DRONE_GITHUB_CLIENT_SECRET=
```
### 启动 Drone
```bash
$ docker-compose up -d
```

47
cases/ci/travis/README.md Normal file
View File

@@ -0,0 +1,47 @@
# Travis CI 中使用 Docker
当代码提交到 GitHub [Travis CI](https://travis-ci.com/) 会根据项目根目录 `.travis.yml` 文件设置的指令,执行一系列操作。
本小节介绍如何在 Travis CI 中使用 Docker 进行持续集成/持续部署CI/CD这里以当代码提交到 GitHub 时自动构建 Docker 镜像并推送到 Docker Hub 为例进行介绍
## 准备
首先登录 https://travis-ci.com/account/repositories 选择 GitHub 仓库,按照指引安装 GitHub App 来启用 GitHub 仓库构建。
在项目根目录新建一个 `Dockerfile` 文件
```docker
FROM alpine
RUN echo "Hello World"
```
新建 Travis CI 配置文件 `.travis.yml` 文件
```yml
language: bash
dist: xenial
services:
- docker
before_script:
# 登录到 docker hub
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
script:
# 这里编写测试代码的命令
- echo "test code"
after_success:
# 当代码测试通过后执行的命令
- docker build -t username/alpine .
- docker push username/alpine
```
> 请提前在 Travis CI 仓库设置页面配置 `DOCKER_PASSWORD` `DOCKER_USERNAME` 变量
## 查看结果
将项目推送到 GitHub登录 [Travis CI](https://travis-ci.com/) 查看构建详情。

View File

@@ -0,0 +1,16 @@
language: bash
dist: xenial
services:
- docker
before_script:
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
script:
- echo "test code"
after_success:
- docker build -t username/alpine .
- docker push username/alpine

View File

@@ -0,0 +1,3 @@
FROM alpine
RUN echo "Hello World"

View File

@@ -1,9 +1,9 @@
# 操作系统
目前常用的 Linux 发行版主要包括 Debian/Ubuntu 系列和 CentOS/Fedora 系列
目前常用的 Linux 发行版主要包括 `Debian/Ubuntu` 系列和 `CentOS/Fedora` 系列
前者以自带软件包版本较新而出名后者则宣称运行更稳定一些选择哪个操作系统取决于读者的具体需求同时社区还推出了完全基于 Docker Linux 发行版 CoreOS
前者以自带软件包版本较新而出名后者则宣称运行更稳定一些选择哪个操作系统取决于读者的具体需求
使用 Docker读者只需要一个命令就能快速获取一个 linux 发行版镜像这是以往包括各种虚拟化技术都难以实现的这些镜像一般都很精简但是可以支持完整 linux 系统的大部分功能
使用 Docker读者只需要一个命令就能快速获取一个 Linux 发行版镜像这是以往包括各种虚拟化技术都难以实现的这些镜像一般都很精简但是可以支持完整 Linux 系统的大部分功能
本章将介绍如何使用 Docker 安装和使用 BusyboxAlphineDebian/UbuntuCentOS/FedoraCoreOS 等操作系统
本章将介绍如何使用 Docker 安装和使用 `Busybox``Alphine``Debian/Ubuntu``CentOS/Fedora` 等操作系统

View File

@@ -1,20 +1,20 @@
## Alpine
# Alpine
### 简介
## 简介
![Apline Linux 操作系统](_images/alpinelinux-logo.png)
![Alpine Linux 操作系统](_images/alpinelinux-logo.png)
`Alpine` 操作系统是一个面向安全的轻型 `Linux` 发行版它不同于通常 `Linux` 发行版`Alpine` 采用了 `musl libc` `busybox` 以减小系统的体积和运行时资源消耗但功能上比 `busybox` 又完善的多因此得到开源社区越来越多的青睐在保持瘦身的同时`Alpine` 还提供了自己的包管理工具 `apk`可以通过 `https://pkgs.alpinelinux.org/packages` 网站上查询包信息也可以直接通过 `apk` 命令直接查询和安装各种软件
`Alpine` 由非商业组织维护的支持广泛场景的 `Linux`发行版它特别为资深/重度`Linux`用户而优化关注安全性能和资源效能`Alpine` 镜像可以适用于更多常用场景并且是一个优秀的可以适用于生产的基础系统/环境
`Alpine` Docker 镜像也继承了 Alpine Linux 发行版的这些优势相比于其他 `Docker` 镜像它的容量非常小仅仅只有 5 MB 左右对比 Ubuntu 系列镜像接近 200 MB且拥有非常友好的包管理机制官方镜像来自 `docker-alpine` 项目
`Alpine` Docker 镜像也继承了 `Alpine Linux` 发行版的这些优势相比于其他 `Docker` 镜像它的容量非常小仅仅只有 **5 MB** 左右对比 `Ubuntu` 系列镜像接近 `200 MB`且拥有非常友好的包管理机制官方镜像来自 `docker-alpine` 项目
目前 Docker 官方已开始推荐使用 `Alpine` 替代之前的 `Ubuntu` 做为基础镜像环境这样会带来多个好处包括镜像下载速度加快镜像安全性提高主机之间的切换更方便占用更少磁盘空间等
下表是官方镜像的大小比较
```sh
```bash
REPOSITORY TAG IMAGE ID VIRTUAL SIZE
alpine latest 4e38e38c8ce0 4.799 MB
debian latest 4d6ce913b130 84.98 MB
@@ -22,52 +22,48 @@ ubuntu latest b39b81afc8ca 188.3 MB
centos latest 8efe422e6104 210 MB
```
### 获取并使用官方镜像
## 获取并使用官方镜像
由于镜像很小下载时间往往很短读者可以直接使用 `docker run` 指令直接运行一个 `Alpine` 容器并指定运行的 Linux 指令例如
```sh
```bash
$ docker run alpine echo '123'
123
```
笔者使用 time 工具来测试下在本地没有提前 pull 镜像情况下执行 echo 命令的时间仅需要 3 秒左右
## 迁移至 `Alpine` 基础镜像
```sh
$ time docker run alpine echo '123'Unable to find image 'alpine:latest' locallylatest: Pulling from library/alpine
e110a4a17941: Pull completeDigest: sha256:3dcdb92d7432d56604d4545cbd324b14e647b313626d99b889d0626de158f73aStatus: Downloaded newer image for alpine:latest123
real 0m3.367s user 0m0.040s sys 0m0.007s
```
### 迁移至 `Alpine` 基础镜像
目前大部分 Docker 官方镜像都已经支持 Alpine 作为基础镜像可以很容易进行迁移
目前大部分 Docker 官方镜像都已经支持 `Alpine` 作为基础镜像可以很容易进行迁移
例如
* ubuntu/debian -> alpine
* python:2.7 -> python:2.7-alpine
* ruby:2.3 -> ruby:2.3-alpine
* `ubuntu/debian` -> `alpine`
* `python:3` -> `python:3-alpine`
* `ruby:2.6` -> `ruby:2.6-alpine`
另外如果使用 `Alpine` 镜像替换 `Ubuntu` 基础镜像安装软件包时需要用 apk 包管理器替换 apt 工具
另外如果使用 `Alpine` 镜像替换 `Ubuntu` 基础镜像安装软件包时需要用 `apk` 包管理器替换 `apt` 工具
```sh
```bash
$ apk add --no-cache <package>
```
`Alpine` 中软件安装包的名字可能会与其他发行版有所不同可以在 `https://pkgs.alpinelinux.org/packages` 网站搜索并确定安装包名称如果需要的安装包不在主索引内但是在测试或社区索引中那么可以按照以下方法使用这些安装包
```sh
$ echo "http://dl-4.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
```bash
$ echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
$ apk --update add --no-cache <package>
```
### 相关资源
由于在国内访问 `apk` 仓库较缓慢建议在使用 `apk` 之前先替换仓库地址为国内镜像
* `Apline` 官网`http://alpinelinux.org/`
* `Apline` 官方仓库`https://github.com/alpinelinux`
* `Apline` 官方镜像`https://hub.docker.com/_/alpine/`
* `Apline` 官方镜像仓库`https://github.com/gliderlabs/docker-alpine`
```docker
RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories \
&& apk add --no-cache <package>
```
## 相关资源
* `Alpine` 官网https://www.alpinelinux.org/
* `Alpine` 官方仓库https://github.com/alpinelinux
* `Alpine` 官方镜像https://hub.docker.com/_/alpine/
* `Alpine` 官方镜像仓库https://github.com/gliderlabs/docker-alpine

View File

@@ -1,18 +1,18 @@
## Busybox
# Busybox
### 简介
## 简介
![Busybox - Linux 瑞士军刀](_images/busybox-logo.png)
BusyBox 是一个集成了一百多个最常用 Linux 命令和工具 catechogrepmounttelnet 的精简工具箱它只需要几 MB 的大小很方便进行各种快速验证被誉为Linux 系统的瑞士军刀
`BusyBox` 是一个集成了一百多个最常用 Linux 命令和工具 `cat``echo``grep``mount``telnet` 的精简工具箱它只需要几 MB 的大小很方便进行各种快速验证被誉为Linux 系统的瑞士军刀
BusyBox 可运行于多款 POSIX 环境的操作系统中 Linux包括 AndroidHurdFreeBSD
`BusyBox` 可运行于多款 `POSIX` 环境的操作系统中 `Linux`包括 `Android``Hurd``FreeBSD`
### 获取官方镜像
## 获取官方镜像
Docker Hub 中搜索 busybox 相关的镜像
`Docker Hub` 中搜索 `busybox` 相关的镜像
```sh
```bash
$ docker search busybox
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
busybox Busybox base image. 755 [OK]
@@ -24,9 +24,9 @@ azukiapp/busybox This image is meant to be used as the base...
...
```
读者可以看到最受欢迎的镜像同时带有 OFFICIAL 标记说明它是官方镜像用户使用 docker pull 指令下载镜像 `busybox:latest`
读者可以看到最受欢迎的镜像同时带有 `OFFICIAL` 标记说明它是官方镜像用户使用 `docker pull` 指令下载 `busybox:latest` 镜像
```sh
```bash
$ docker pull busybox:latest
busybox:latest: The image you are pulling has been verified
e433a6c5b276: Pull complete
@@ -36,19 +36,19 @@ df7546f9f060: Pull complete
Status: Downloaded newer image for busybox:latest
```
下载后可以看到 busybox 镜像只有2.433 MB
下载后可以看到 `busybox` 镜像只有 **2.433 MB**
```sh
$ docker images
```bash
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
busybox latest e72ac664f4f0 6 weeks ago 2.433 MB
```
### 运行 busybox
## 运行 busybox
启动一个 busybox 容器并在容器中执行 grep 命令
启动一个 `busybox` 容器并在容器中执行 `grep` 命令
```sh
```bash
$ docker run -it busybox
/ # grep
BusyBox v1.22.1 (2014-05-22 23:22:11 UTC) multi-call binary.
@@ -83,32 +83,48 @@ Search for PATTERN in FILEs (or stdin)
查看容器内的挂载信息
```sh
```bash
/ # mount
rootfs on / type rootfs (rw)
none on / type aufs (rw,relatime,si=b455817946f8505c)
overlay on / type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/BOTCI5RF24AMC4A2UWF4N6ZWFP:/var/lib/docker/overlay2/l/TWVP5T5DMKJGXZOROR7CAPWGFP,upperdir=/var/lib/docker/overlay2/801ef0bf6cce35288dbb8fe00a4f9cc47760444693bfdf339ed0bdcf926e12a3/diff,workdir=/var/lib/docker/overlay2/801ef0bf6cce35288dbb8fe00a4f9cc47760444693bfdf339ed0bdcf926e12a3/work)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,mode=755)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
tmpfs on /dev type tmpfs (rw,nosuid,size=65536k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
/dev/disk/by-uuid/b1f2dba7-d91b-4165-a377-bf1a8bed3f61 on /etc/resolv.conf type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/disk/by-uuid/b1f2dba7-d91b-4165-a377-bf1a8bed3f61 on /etc/hostname type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/disk/by-uuid/b1f2dba7-d91b-4165-a377-bf1a8bed3f61 on /etc/hosts type ext4 (rw,relatime,errors=remount-ro,data=ordered)
devpts on /dev/console type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/irq type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/bus type proc (ro,nosuid,nodev,noexec,relatime)
tmpfs on /proc/kcore type tmpfs (rw,nosuid,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
/dev/vda1 on /etc/resolv.conf type ext3 (rw,noatime,data=ordered)
/dev/vda1 on /etc/hostname type ext3 (rw,noatime,data=ordered)
/dev/vda1 on /etc/hosts type ext3 (rw,noatime,data=ordered)
devpts on /dev/console type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
proc on /proc/bus type proc (ro,relatime)
proc on /proc/fs type proc (ro,relatime)
proc on /proc/irq type proc (ro,relatime)
proc on /proc/sys type proc (ro,relatime)
proc on /proc/sysrq-trigger type proc (ro,relatime)
tmpfs on /proc/acpi type tmpfs (ro,relatime)
tmpfs on /proc/kcore type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /proc/timer_list type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /proc/sched_debug type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /sys/firmware type tmpfs (ro,relatime)
```
busybox 镜像虽然小巧但包括了大量常见的 Linux 命令读者可以用它快速熟悉 Linux 命令
`busybox` 镜像虽然小巧但包括了大量常见的 `Linux` 命令读者可以用它快速熟悉 `Linux` 命令
### 相关资源
* `Busybox` 官网`https://busybox.net/`
* `Busybox` 官方仓库`https://git.busybox.net/busybox/`
* `Busybox` 官方镜像`https://hub.docker.com/_/busybox/`
* `Busybox` 官方仓库`https://github.com/docker-library/busybox`
## 相关资源
* `Busybox` 官网https://busybox.net/
* `Busybox` 官方仓库https://git.busybox.net/busybox/
* `Busybox` 官方镜像https://hub.docker.com/_/busybox/
* `Busybox` 官方仓库https://github.com/docker-library/busybox

View File

@@ -1,27 +1,27 @@
## CentOS/Fedora
# CentOS/Fedora
### CentOS 系统简介
## CentOS 系统简介
CentOS Fedora 都是基于 Redhat 的常见 Linux 分支CentOS 是目前企业级服务器的常用操作系统Fedora 则主要面向个人桌面用户
`CentOS` `Fedora` 都是基于 `Redhat` 的常见 Linux 分支`CentOS` 是目前企业级服务器的常用操作系统`Fedora` 则主要面向个人桌面用户
![CentOS 操作系统](_images/centos-logo.png)
CentOSCommunity Enterprise Operating System中文意思是社区企业操作系统它是基于 Red Hat Enterprise Linux 源代码编译而成由于 CentOS Redhat Linux 源于相同的代码基础所以很多成本敏感且需要高稳定性的公司就使用 CentOS 来替代商业版 Red Hat Enterprise LinuxCentOS 自身不包含闭源软件
CentOSCommunity Enterprise Operating System中文意思是社区企业操作系统它是基于 `Red Hat Enterprise Linux` 源代码编译而成由于 `CentOS` `Redhat Linux` 源于相同的代码基础所以很多成本敏感且需要高稳定性的公司就使用 `CentOS` 来替代商业版 `Red Hat Enterprise Linux``CentOS` 自身不包含闭源软件
#### 使用 CentOS 官方镜像
### 使用 CentOS 官方镜像
首先使用 `docker search` 命令来搜索标星至少为 25 CentOS 相关镜像
首先使用 `docker search` 命令来搜索标星至少为 `25` `CentOS` 相关镜像
```sh
```bash
$ docker search -f stars=25 centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official... 2543 [OK]
jdeathe/centos-ssh 27 [OK]
```
使用 docker run 直接运行最新的 CentOS 镜像并登录 bash
使用 `docker run` 直接运行最新的 `CentOS` 镜像并登录 `bash`
```sh
```bash
$ docker run -it centos bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
@@ -32,17 +32,17 @@ Status: Downloaded newer image for centos:latest
CentOS Linux release 7.2.1511 (Core)
```
### Fedora 系统简介
## Fedora 系统简介
![Fedora 操作系统](_images/fedora-logo.png)
Fedora Fedora Project 社区开发红帽公司赞助的 Linux 发行版它的目标是创建一套新颖多功能并且自由和开源的操作系统Fedora 的功能对于用户而言它是一套功能完备的可以更新的免费操作系统而对赞助商 Red Hat 而言它是许多新技术的测试平台被认为可用的技术最终会加入到 Red Hat Enterprise Linux
`Fedora` `Fedora Project` 社区开发红帽公司赞助的 `Linux` 发行版它的目标是创建一套新颖多功能并且自由和开源的操作系统`Fedora` 的功能对于用户而言它是一套功能完备的可以更新的免费操作系统而对赞助商 `Red Hat` 而言它是许多新技术的测试平台被认为可用的技术最终会加入到 `Red Hat Enterprise Linux`
#### 使用 Fedora 官方镜像
### 使用 Fedora 官方镜像
首先使用 `docker search` 命令来搜索标星至少为 2 Fedora 相关镜像结果如下
首先使用 `docker search` 命令来搜索标星至少为 `2` `Fedora` 相关镜像结果如下
```sh
```bash
$ docker search -f stars=2 fedora
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
fedora Official Docker builds of Fedora 433 [OK]
@@ -51,9 +51,9 @@ gluster/gluster-fedora Official GlusterFS image [ Fedora 21 + Glu... 3
startx/fedora Simple container used for all startx based... 2 [OK]
```
使用 docker run 命令直接运行 Fedora 官方镜像并登录 bash
使用 `docker run` 命令直接运行 `Fedora` 官方镜像并登录 `bash`
```sh
```bash
$ docker run -it fedora bash
Unable to find image 'fedora:latest' locally
latest: Pulling from library/fedora
@@ -64,13 +64,13 @@ Status: Downloaded newer image for fedora:latest
Fedora release 24 (Twenty Four)
```
### 相关资源
## 相关资源
* `Fedora` 官网`https://getfedora.org/`
* `Fedora` 官方仓库`https://github.com/fedora-infra`
* `Fedora` 官方镜像`https://hub.docker.com/_/fedora/`
* `Fedora` 官方镜像仓库`https://github.com/fedora-cloud/docker-brew-fedora`
* `CentOS` 官网`https://getfedora.org/`
* `CentOS` 官方仓库`https://github.com/CentOS`
* `CentOS` 官方镜像`https://hub.docker.com/_/centos/`
* `CentOS` 官方镜像仓库`https://github.com/CentOS/CentOS-Dockerfiles`
* `Fedora` 官网https://getfedora.org/
* `Fedora` 官方仓库https://github.com/fedora-infra
* `Fedora` 官方镜像https://hub.docker.com/_/fedora/
* `Fedora` 官方镜像仓库https://github.com/fedora-cloud/docker-brew-fedora
* `CentOS` 官网https://www.centos.org
* `CentOS` 官方仓库https://github.com/CentOS
* `CentOS` 官方镜像https://hub.docker.com/_/centos/
* `CentOS` 官方镜像仓库https://github.com/CentOS/CentOS-Dockerfiles

View File

@@ -1,116 +0,0 @@
## CoreOS
### 简介
![CoreOS - 容器化操作系统](_images/coreos-logo.jpg)
CoreOS 是一个轻量级容器化 Linux 发行版专为数据中心场景而设计旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度CoreOS 作为 Docker 生态圈中的重要一员日益得到各大云服务商的重视CoreOS 2014 7 月首次发布了稳定版本
与其他历史悠久使用广泛的 Linux 操作系统相比CoreOS 拥有下面几个优点
* CoreOS 通过容器化Containerized的运算环境向应用程序提供运算资源
传统类 Unix 系统往往提供包管理工具随着系统安装更多的程序而程序的依赖要求各不相同这就容易出现依赖地狱Dependency Hell系统的更新和安装会非常痛苦
CoreOS 的应用程序通过 Docker 运行在容器中彼此之间共享系统内核和资源同时互不可见这种方式使得操作系统应用程序及运行环境之间的耦合度大大降低相对于传统的部署方式而言运维可以更加灵活便捷的在 CoreOS 集群中部署应用程序同时各运行环境之间的干扰更少操作系统自身的维护也更加容易
* CoreOS 采用双系统分区Dual Root Partition设计
CoreOs 的两个分区在系统运行期间各司其职它们分别被设置成主动模式和被动模式主动分区负责系统运行被动分区负责系统升级一旦 CoreOS 发布了新版系统运维只需下载一个完整的系统安装文件至被动分区然后设置系统下一次重启时从新版本分区启动将主被动分区的职能进行调换即可 CoreOS 系统运行期间系统分区被设置成只读状态这样也确保了 CoreOS 的安全性CoreOS 的升级过程在默认条件下将自动完成并且通过 cgroup 对升级过程中使用到的网络和磁盘资源进行限制这将系统升级所带来的影响降至最低
* CoreOS 使用 Systemd 取代 SysV 作为系统和服务的管理工具
SysV 相比Systemd 不仅可以更好的追踪系统进程还具备优秀的并行化处理能力Systemd 将自己的按需启动的特性与 Docker 的快速启动能力相结合 CoreOS 集群中大规模部署 Docker Containers 的业务中优势明显Systemd 引入了target的概念每个 target 应用于一个特定的服务并且可以通过继承一个已有的 target 来扩展额外的功能即操作系统对系统上运行的服务拥有更好的控制力
CoreOS 团队还推出了很多有益的工具包括 etcd, fleet, flannel
安装 CoreOS 有几种方法笔者推荐初学者使用 VMware Workstation 虚拟机方式来运行 CoreOSVMware Workstation 工具则可以前往其官网`http://www.vmware.com/products/workstation/` 下载获取
### 使用官方镜像
#### 获取虚拟机镜像
从官方网站下载 CoreOS 镜像地址为 [https:\/\/coreos.com\/releases\/](http://alpha.release.core-os.net/amd64-usr/current/coreos_production_vmware_insecure.zip)。
如果读者已经安装 VMware Workstation则解压镜像包后双击`vmx` 文件
![虚拟机镜像文件](_images/coreos_list.png)
双击`vmx` 文件后即可启动 CoreOS 虚拟机如下图所示
![启动 CoreOS 虚拟机](_images/vmware_coreos.png)
*注意使用免费版 VMware Player 运行 CoreOS 官方镜像时可能出现无法通过 DHCP 自动获取 IP 地址的问题读者可配置静态地址或使用 VMware Workstation 来运行 `vmx` 文件*
#### 获取地址信息
此时CoreOS 系统已经在 VMware Station 中启动显示登录提示
![登录 CoreOS](_images/coreos-login.png)
直接按回车键获取当前系统的 IP 地址如下图所示
![获取 IP 地址](_images/coreos_run_ip.png)
如上图所示查看此时 CoreOS IP地址是`192.168.66.128`
#### 使用 SSH 客户端访问镜像
笔者以 Windows 环境为例使用 SecureCRT 工具进行连接此处读者需要确定
* CoreOS 虚拟机的 IP地址
* CoreOS 虚拟机的文件目录下含有 `insecure_ssh_key` 公钥文件
打开 SecureCRT建立新的 SSH 连接如下图示
![使用 SecureCRT 访问 CoreOS](_images/coreos_crt.png)
点击 ` 属性` 按钮添加 `insecure_ssh_key` 公钥文件后即可点击 `连接`
如果连接成功则读者可以看到命令行页面读者在命令行中查看 Docker 的版本信息
```sh
$ docker version
```
结果如下图示
![查看 Docker 版本信息](_images/docker_version.png)
此时CoreOS 虚拟机已经成功运行并且读者可以使用 SSH 客户端方便的操作 CoreOS 虚拟机 Docker 已经内置于 CoreOS 读者可以进行各种 Docker 操作如下图示
![使用 Docker 命令](_images/php_pulling.png)
如果读者的本机环境是 Linux 系统读者可以使用 SSH 公钥在解压后的根目录下直接使用 `ssh` 命令连接 CoreOS 虚拟机并使用 `ip a` 命令查看 IP 地址信息
如下所示
```sh
$ ssh -i ~/insecure_ssh_key core@192.168.6.153
CoreOS (alpha)
core@localhost ~ $ ls
core@localhost ~ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
core@localhost ~ $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:ff:73:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.6.153/20 brd 192.168.15.255 scope global dynamic enp0s17
valid_lft 604500sec preferred_lft 604500sec
inet6 fe80::20c:29ff:feff:7346/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
valid_lft forever preferred_lft forever
core@localhost ~ $
```
### 相关资源
* `CoreOS` 官网`https://coreos.com/`
* `CoreOS` 官方仓库`https://github.com/coreos/`

View File

@@ -1,21 +1,21 @@
## Debian/Ubuntu
Debian Ubuntu 都是目前较为流行的 Debian 系的服务器操作系统十分适合研发场景Docker Hub 上提供了官方镜像国内各大容器云服务也基本都提供了相应的支持
# Debian/Ubuntu
`Debian` `Ubuntu` 都是目前较为流行的 **Debian ** 的服务器操作系统十分适合研发场景`Docker Hub` 上提供了官方镜像国内各大容器云服务也基本都提供了相应的支持
### Debian 系统简介
## Debian 系统简介
![Debian 操作系统](_images/debian-logo.png)
Debian 是由 GPL 和其他自由软件许可协议授权的自由软件组成的操作系统由Debian 计划Debian Project组织维护Debian 计划是一个独立的分散的组织 3000 人志愿者组成接受世界多个非盈利组织的资金支持Software in the Public Interest 提供支持并持有商标作为保护机构Debian 以其坚守 Unix 和自由软件的精神以及其给予用户的众多选择而闻名现时 Debian 包括了超过 25,000 个软件包并支持 12 个计算机系统结构
`Debian` 是由 `GPL` 和其他自由软件许可协议授权的自由软件组成的操作系统 **Debian 计划Debian Project** 组织维护**Debian 计划** 是一个独立的分散的组织 `3000` 人志愿者组成接受世界多个非盈利组织的资金支持`Software in the Public Interest` 提供支持并持有商标作为保护机构`Debian` 以其坚守 `Unix` 和自由软件的精神以及其给予用户的众多选择而闻名现时 `Debian` 包括了超过 `25,000` 个软件包并支持 `12` 个计算机系统结构
Debian 作为一个大的系统组织框架其下有多种不同操作系统核心的分支计划主要为采用 Linux 核心的 Debian GNU/Linux 系统其他还有采用 GNU Hurd 核心的 Debian GNU/Hurd 系统采用 FreeBSD 核心的 Debian GNU/kFreeBSD 系统以及采用 NetBSD 核心的 Debian GNU/NetBSD 系统甚至还有利用 Debian 的系统架构和工具采用 OpenSolaris 核心构建而成的 Nexenta OS 系统在这些 Debian 系统中以采用 Linux 核心的 Debian GNU/Linux 最为著名
`Debian` 作为一个大的系统组织框架其下有多种不同操作系统核心的分支计划主要为采用 `Linux` 核心的 `Debian GNU/Linux` 系统其他还有采用 `GNU Hurd` 核心的 `Debian GNU/Hurd` 系统采用 `FreeBSD` 核心的 `Debian GNU/kFreeBSD` 系统以及采用 `NetBSD` 核心的 `Debian GNU/NetBSD` 系统甚至还有利用 `Debian` 的系统架构和工具采用 `OpenSolaris` 核心构建而成的 `Nexenta OS` 系统在这些 `Debian` 系统中以采用 `Linux` 核心的 `Debian GNU/Linux` 最为著名
众多的 Linux 发行版例如 UbuntuKnoppix Linspire Xandros 都基于 Debian GNU/Linux
众多的 `Linux` 发行版例如 `Ubuntu``Knoppix` `Linspire` `Xandros` 都基于 `Debian GNU/Linux`
#### 使用 Debian 官方镜像
### 使用 Debian 官方镜像
读者可以使用 docker search 搜索 Docker Hub查找 Debian 镜像
读者可以使用 `docker search` 查找 `Debian` 镜像
```sh
```bash
$ docker search debian
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
debian Debian is... 1565 [OK]
@@ -24,64 +24,75 @@ armbuild/debian port of debian 8 [OK]
...
```
官方提供了大家熟知的 debian 镜像以及面向科研领域的 neurodebian 镜像
官方提供了大家熟知的 `debian` 镜像以及面向科研领域的 `neurodebian` 镜像
可以使用 docker run 直接运行 Debian 镜像
可以使用 `docker run` 直接运行 `Debian` 镜像
```sh
```bash
$ docker run -it debian bash
root@668e178d8d69:/# cat /etc/issue
Debian GNU/Linux 8
```
Debian 镜像很适合作为基础镜像构建自定义镜像
`Debian` 镜像很适合作为基础镜像构建自定义镜像
### Ubuntu 系统简介
## Ubuntu 系统简介
![Ubuntu 操作系统](_images/ubuntu-logo.jpg)
Ubuntu 是一个以桌面应用为主的GNU/Linux操作系统其名称来自非洲南部祖鲁语或豪萨语的ubuntu一词官方译名友帮拓另有吾帮托乌班图有奔头乌斑兔等译名Ubuntu 意思是人性以及我的存在是因为大家的存在是非洲传统的一种价值观类似华人社会的仁爱思想 Ubuntu 基于 Debian 发行版和 GNOME/Unity 桌面环境 Debian 的不同在于它每 6 个月会发布一个新版本 2 年推出一个长期支持Long Term SupportLTS版本一般支持 3 年时间
`Ubuntu` 是一个以桌面应用为主的 `GNU/Linux` 操作系统其名称来自非洲南部祖鲁语或豪萨语的ubuntu一词官方译名友帮拓另有吾帮托乌班图有奔头乌斑兔等译名`Ubuntu` 意思是人性以及我的存在是因为大家的存在是非洲传统的一种价值观类似华人社会的仁爱思想 `Ubuntu` 基于 `Debian` 发行版和 `GNOME/Unity` 桌面环境 `Debian` 的不同在于它每 6 个月会发布一个新版本 2 年推出一个长期支持 **Long Term SupportLTS** 版本一般支持 3 年时间
#### 使用 Ubuntu 官方镜像
### 使用 Ubuntu 官方镜像
Ubuntu 相关的镜像有很多这里使用 `-s 10` 参数只搜索那些被收藏 10 次以上的镜像
`Ubuntu` 相关的镜像有很多这里使用 `--filter=stars=10` 参数只搜索那些被收藏 `10` 次以上的镜像
```sh
$ docker search -s 10 ubuntu
```bash
$ docker search --filter=stars=10 ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Official Ubuntu base image 840 [OK]
dockerfile/ubuntu Trusted automated Ubuntu (http://www.ubunt... 30 [OK]
crashsystems/gitlab-docker A trusted, regularly updated build of GitL... 20 [OK]
sylvainlasnier/memcached This is a Memcached 1.4.14 docker images b... 16 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 16 [OK]
mbentley/ubuntu-django-uwsgi-nginx 16 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 15 [OK]
clue/ttrss The Tiny Tiny RSS feed reader allows you t... 14 [OK]
dockerfile/ubuntu-desktop Trusted automated Ubuntu Desktop (LXDE) (h... 14 [OK]
tutum/ubuntu Ubuntu image with SSH access. For the root... 12 [OK]
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 10539 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 395 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 243 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 210 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 105 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 98 [OK]
neurodebian NeuroDebian provides neuroscience research s… 64 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 42 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 24 [OK]
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 19
1and1internet/ubuntu-16-apache-php-5.6 ubuntu-16-apache-php-5.6 14 [OK]
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 13 [OK]
eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 12 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 11 [OK]
```
*注意Docker 1.12 版本中已经不支持 --stars 参数则可以使用 -f stars=N 参数*
根据搜索出来的结果读者可以自行选择下载镜像并使用
下面以 ubuntu 14.04 为例演示如何使用该镜像安装一些常用软件
下面以 `ubuntu:18.04` 为例演示如何使用该镜像安装一些常用软件
首先使用 `-ti` 参数启动容器登录 bash查看 ubuntu 的发行版本号
首先使用 `-ti` 参数启动容器登录 `bash`查看 `ubuntu` 的发行版本号
```sh
$ docker run -ti ubuntu:14.04 /bin/bash
root@7d93de07bf76:/# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
```bash
$ docker run -ti ubuntu:18.04 /bin/bash
root@7d93de07bf76:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
```
当试图直接使用 `apt-get` 安装一个软件的时候会提示 `E: Unable to locate package`
```sh
```bash
root@7d93de07bf76:/# apt-get install curl
Reading package lists... Done
Building dependency tree
@@ -89,53 +100,62 @@ Reading state information... Done
E: Unable to locate package curl
```
这并非系统不支持 `apt-get` 命令Docker 镜像在制作时为了精简清除了 apt 仓库信息因此需要先执行 `apt-get update` 命令来更新仓库信息更新信息后即可成功通过 apt-get 命令来安装软件
这并非系统不支持 `apt-get` 命令Docker 镜像在制作时为了精简清除了 `apt` 仓库信息因此需要先执行 `apt-get update` 命令来更新仓库信息更新信息后即可成功通过 `apt-get` 命令来安装软件
```sh
```bash
root@7d93de07bf76:/# apt-get update
Ign http://archive.ubuntu.com trusty InRelease
Ign http://archive.ubuntu.com trusty-updates InRelease
Ign http://archive.ubuntu.com trusty-security InRelease
Ign http://archive.ubuntu.com trusty-proposed InRelease
Get:1 http://archive.ubuntu.com trusty Release.gpg [933 B]
...
Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [7348 B]
Get:4 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [823 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:6 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:7 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB]
Get:8 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [31.0 kB]
Get:9 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [835 kB]
Get:10 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
Get:11 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
Get:12 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB]
Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [1127 kB]
Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1350 kB]
Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [11.4 kB]
Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [44.7 kB]
Get:17 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [2496 B]
Get:18 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [4252 B]
Fetched 17.6 MB in 1min 25s (207 kB/s)
Reading package lists... Done
```
首先安装 curl 工具
首先安装 `curl` 工具
```sh
```bash
root@7d93de07bf76:/# apt-get install curl
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
ca-certificates krb5-locales libasn1-8-heimdal libcurl3 libgssapi-krb5-2
libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal
libheimntlm0-heimdal libhx509-5-heimdal libidn11 libk5crypto3 libkeyutils1
libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2
libroken18-heimdal librtmp0 libsasl2-2 libsasl2-modules libsasl2-modules-db
libwind0-heimdal openssl
The following additional packages will be installed:
ca-certificates krb5-locales libasn1-8-heimdal libcurl4 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhx509-5-heimdal
libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 libldap-common libnghttp2-14 libpsl5 libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libsqlite3-0 libssl1.1 libwind0-heimdal openssl publicsuffix
...
root@7d93de07bf76:/# curl
curl: try 'curl --help' or 'curl --manual' for more information
```
接下来再安装 apache 服务
接下来再安装 `apache` 服务
```sh
```bash
root@7d93de07bf76:/# apt-get install -y apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
apache2-bin apache2-data libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap libxml2 sgml-base ssl-cert xml-core
The following additional packages will be installed:
apache2-bin apache2-data apache2-utils file libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libexpat1 libgdbm-compat4 libgdbm5 libicu60 liblua5.2-0 libmagic-mgc libmagic1 libperl5.26 libxml2 mime-support netbase perl perl-modules-5.26 ssl-cert xz-utils
...
```
启动这个 apache 服务然后使用 curl 来测试本地访问
启动这个 `apache` 服务然后使用 `curl` 来测试本地访问
```
```bash
root@7d93de07bf76:/# service apache2 start
* Starting web server apache2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
*
@@ -145,7 +165,7 @@ root@7d93de07bf76:/# curl 127.0.0.1
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
Modified from the Debian original for Ubuntu
Last updated: 2014-03-19
Last updated: 2016-11-16
See: https://launchpad.net/bugs/1288690
-->
<head>
@@ -157,14 +177,14 @@ root@7d93de07bf76:/# curl 127.0.0.1
配合使用 `-p` 参数对外映射服务端口可以允许容器外来访问该服务
### 相关资源
## 相关资源
* `Debian` 官网`https://www.debian.org/`
* `Neuro Debian` 官网`http://neuro.debian.net/`
* `Debian` 官方仓库`https://github.com/Debian`
* `Debian` 官方镜像`https://hub.docker.com/_/debian/`
* `Debian` 官方镜像仓库`https://github.com/tianon/docker-brew-debian/`
* `Ubuntu` 官网`http://www.ubuntu.org.cn/global`
* `Ubuntu` 官方仓库`https://github.com/ubuntu`
* `Ubuntu` 官方镜像`https://hub.docker.com/_/ubuntu/`
* `Ubuntu` 官方镜像仓库`https://github.com/tianon/docker-brew-ubuntu-core`
* `Debian` 官网https://www.debian.org/
* `Neuro Debian` 官网http://neuro.debian.net/
* `Debian` 官方仓库https://github.com/Debian
* `Debian` 官方镜像https://hub.docker.com/_/debian/
* `Debian` 官方镜像仓库https://github.com/tianon/docker-brew-debian/
* `Ubuntu` 官网https://ubuntu.com
* `Ubuntu` 官方仓库https://github.com/ubuntu
* `Ubuntu` 官方镜像https://hub.docker.com/_/ubuntu/
* `Ubuntu` 官方镜像仓库https://github.com/tianon/docker-brew-ubuntu-core

View File

@@ -1,3 +0,0 @@
docker_book
===========
Internal usage.

View File

@@ -1,12 +1,11 @@
# 本章小结
本章讲解了典型操作系统镜像的下载和使用
除了官方的镜像外 DockerHub 上还有许多第三方组织或个人上传的 Docker 镜像
除了官方的镜像外 `Docker Hub` 上还有许多第三方组织或个人上传的 Docker 镜像
读者可以根据具体情况来选择一般来说
* 官方镜像体积都比较小只带有一些基本的组件 精简的系统有利于安全稳定和高效的运行也适合进行定制
* 个别第三方 tutum已被 Docker 收购镜像质量也非常高这些镜像通常针对某个具体应用进行配置比如包含 LAMP 组件的 Ubuntu 镜像
* 处于安全考虑几乎所有官方制作的镜像都没有安装 SSH 服务无法使用用户名和密码直接登录
* 官方镜像体积都比较小只带有一些基本的组件 精简的系统有利于安全稳定和高效的运行也适合进行个性化定制
后续章节中笔者将介绍如何创建一个带 SSH 服务的 Docker 镜像
* 出于安全考虑几乎所有官方制作的镜像都没有安装 SSH 服务无法通过用户名和密码直接登录到容器中

View File

@@ -2,4 +2,4 @@
Docker 目前已经得到了众多公有云平台的支持并成为除虚拟机之外的核心云业务
除了 AWSGoogleAzureDocker 官方云服务国内的各大公有云厂商基本上都同时支持了虚拟机服务和容器服甚至还专门推出了容器云业务
除了 AWSGoogleAzure 国内的各大公有云厂商基本上都同时支持了虚拟机服务和基于 Kubernetes 的容器云业有的还推出了其他服务例如 [容器镜像服务](https://cloud.tencent.com/act/cps/redirect?redirect=11588&cps_key=3a5255852d5db99dcd5da4c72f05df61) 让用户在云上享有安全高效的镜像托管、分发等服务。

View File

@@ -1,10 +1,11 @@
## 阿里云
# 阿里云
![阿里云](_images/aliyun-logo.png)
阿里云创立于 2009 是中国较早的云计算平台阿里云致力于提供安全可靠的计算和数据处理能力
[阿里云](https://www.aliyun.com?source=5176.11533457&userCode=8lx5zmtu&type=copy) 创立于 2009 年,是中国较早的云计算平台阿里云致力于提供安全可靠的计算和数据处理能力。
阿里云的客户群体中活跃着微博知乎魅族锤子科技小咖秀等一大批明星互联网公司在天猫双 11 全球狂欢节等极富挑战的应用场景中阿里云保持着良好的运行纪录
[阿里云](https://www.aliyun.com?source=5176.11533457&userCode=8lx5zmtu&type=copy) 的客户群体中,活跃着微博、虎牙、魅族、优酷等一大批明星互联网公司。在天猫双 11 全球狂欢节等极富挑战的应用场景中阿里云保持着良好的运行纪录。
阿里云容器服务提供了高性能可伸缩的容器应用管理服务支持在一组云服务器上通过 Docker 容器来进行应用生命周期管理容器服务极大简化了用户对容器管理集群的搭建工作无缝整合了阿里云虚拟化存储网络和安全能力容器服务提供了多种应用发布方式和流水线般的持续交付能力原生支持微服务架构助力用户无缝上云和跨云管理
[阿里云容器服务 Kubernetes ACK](https://www.aliyun.com/product/kubernetes?source=5176.11533457&userCode=8lx5zmtu&type=copy) 提供了高性能可伸缩的容器应用管理服务支持在一组云服务器上通过 Docker 容器来进行应用生命周期管理容器服务极大简化了用户对容器管理集群的搭建工作无缝整合了阿里云虚拟化、存储、网络和安全能力容器服务提供了多种应用发布方式和流水线般的持续交付能力原生支持微服务架构助力用户无缝上云和跨云管理。
![](https://img.alicdn.com/tps/TB10yjtPpXXXXacXXXXXXXXXXXX-1531-1140.png)

View File

@@ -1,13 +1,11 @@
## 亚马逊云
# 亚马逊云
![AWS](_images/aws-logo.jpg)
AWS Amazon Web Services是亚马逊Amazon公司的 IaaS PaaS 平台服务AWS 提供了一整套基础设施和应用程序服务使用户几乎能够在云中运行一切应用程序从企业应用程序和大数据项目到社交游戏和移动应用程序AWS 面向用户提供包括弹性计算存储数据库应用程序在内的一整套云计算服务能够帮助企业降低 IT 投入成本和维护成本
[AWS](https://www.amazonaws.cn),即 Amazon Web Services是亚马逊Amazon公司的 IaaS 和 PaaS 平台服务。AWS 提供了一整套基础设施和应用程序服务使用户几乎能够在云中运行一切应用程序从企业应用程序和大数据项目到社交游戏和移动应用程序。AWS 面向用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云计算服务能够帮助企业降低 IT 投入成本和维护成本。
2006 年初起亚马逊 AWS 开始在云中为各种规模的公司提供技术服务平台利用亚马逊 AWS软件开发人员可以轻松购买计算存储数据库和其他基于 Internet 的服务来支持其应用程序开发人员能够灵活选择任何开发平台或编程环境以便于其尝试解决问题由于开发人员只需按使用量付费无需前期资本支出亚马逊 AWS 是向最终用户交付计算资源保存的数据和其他应用程序的一种经济划算的方式
2015 AWS 正式发布了 EC2 容器服务(ECS)ECS 的目的是让 Docker 容器变的更加简单它提供了一个集群和编排的层用来控制主机上的容器部署以及部署之后的集群内的容器的生命周期管理ECS 是诸如 Docker SwarmKubernetesMesos 等工具的替代它们工作在同一个层除了作为一个服务来提供这些工具和 ECS 不同的地方在于前者需要用户自己来部署和管理 ECS 作为服务来提供的
![AWS 容器服务](_images/ECS.jpg)

Some files were not shown because too many files have changed in this diff Show More