Docker基础与实战
读者评价
1. 首先不得不说的是技术发展真的太快了,这书刚刚出版我就买了,按照其中的安装介绍开始安装,装好了发现报错,结果一查书中推荐的boot2docker在1年前就被废弃了, 简直是坑, 后来按照docker官网装好才能继续往下。
2. 看到介绍往一台服务器部署应用服务和向多台服务器部署应用服务,这。。 这。。 大量篇幅都是重复的,干嘛还要再介绍一遍啊, 不带这么冗余骗人的, 而且还这么多图;
3. 其次部分内容的阅读性很差,比如说在Amazon Web Services, Google cloud platform中使用docker, 在docker中部署Wordpress, Ruby on Rails, Django这些内容都是用到的时候才会看,等用到的时候很可能书中的内容就过时了,这种东西一定要看官方指导文档啊,官方是给出了很明确的指导的,骗钱的嫌疑有点坐实了啊。
4. 内容编排不够合理, Docker Hub官网介绍没啥技术含量的东西就应该放在一开始讲吗,结果放在了第12章,第18章的Docker应用案例其实就是在介绍使用Docker的几大好处吗,放在前边吸引大家兴趣难道不好吗,结果最后来这么一出。Docker命令与选项列表跟编译docker一起作为附录出现多好,非得整个19章,结果都是docker命令的罗列,我难道不能用dash吗?
5. 书中出现了一些低级错误,比如说233页介绍mysql的连接命令 mysql -u root -p 3600 直接写成了 mysql -uroot -p3600 不懂的是要犯懵的
吐槽了这许多,也必须夸点好的了,从书中学到了密钥,如何生成ssh key跟服务器交互的相关知识,同时了解到了githook应该怎么用,如何让每次提交能够自动得到部署,这是非常爽的,有种想马上推起来的感觉, 这脚本让咱直接写可能还真得费点劲,如何去远程执行ssh命令而忽略ssh告警,网站服务器监控应该如何快速搭建(利用Graphite, Graphite Web, Carbon, Crafana, Elasticsearch, Diamond 这一系列东西), 所以我说这是一本入门Docker的好书,但是你想研究研究docker的原理之类的恐怕要大失所望了,国内有一本《Docker容器与容器云》,还没来得及看,感觉写的挺深的, 这本书就留作查阅书吧, 里边的指令详解啥的还是可以时不时抄起来一用。
内容介绍
\本书围绕已应用于多个项目的Docker技术展开讲解,前半部分以浅显的语言介绍基础概念、不同操作系统下的安装流程、多种命令与镜像创建等理论。主要内容集中于后半部分的实际操作,包括数据库应用、服务器应用、编程语言应用、安全应用、网络配置等,非常适合一线技术人员直接应用于实际业务,便于着手实践。
目录
- 第1章 Docker 1
- 1.1 虚拟机与Docker 3
- 1.1.1 虚拟机 4
- 1.1.2 Docker 5
- 1.1.3 Linux容器 6
- 1.2 Docker镜像与容器 8
- 第2章 安装Docker 11
- 2.1 Linux 11
- 2.1.1 自动安装脚本 11
- 2.1.2 Ubuntu 11
- 2.1.3 RedHat Enterprise Linux、CentOS 12
- 2.1.4 使用最新二进制文件 12
- 2.2 Mac OS X 13
- 2.3 Windows 16
- 第3章 使用Docker 23
- 3.1 使用search命令搜索镜像 23
- 3.2 使用pull命令下载镜像 25
- 3.3 使用images命令列出镜像目录 25
- 3.4 使用run命令创建容器 25
- 3.5 使用ps命令查看容器列表 26
- 3.6 使用start命令启动容器 26
- 3.7 使用restart命令重启容器 27
- 3.8 使用attach命令连接容器 27
- 3.9 使用exec命令从外部运行容器内的命令 27
- 3.10 使用stop命令终止容器 28
- 3.11 使用rm命令删除容器 28
- 3.12 使用rmi命令删除镜像 29
- 第4章 创建Docker镜像 31
- 4.1 熟悉Bash 31
- 4.2 编写Dockerfile 36
- 4.3 使用build命令创建镜像 37
- 第5章 查看Docker 39
- 5.1 使用history命令查看镜像历史 39
- 5.2 使用cp命令复制文件 40
- 5.3 使用commit命令从容器的修改中创建镜像 40
- 5.4 使用diff命令检查容器文件的修改 40
- 5.5 使用inspect命令查看详细信息 41
- 第6章 灵活使用Docker 43
- 6.1 搭建Docker私有仓库 43
- 6.1.1 存储镜像数据到本地 43
- 6.1.2 使用push命令上传镜像 44
- 6.1.3 存储镜像数据到Amazon S3 45
- 6.1.4 使用默认认证 46
- 6.2 连接Docker的容器 52
- 6.3 连接到其他服务器的Docker 容器 53
- 6.4 使用Docker数据卷 56
- 6.5 使用Docker数据卷容器 59
- 6.6 创建Docker基础镜像 60
- 6.6.1 创建Ubuntu基础镜像 60
- 6.6.2 创建CentOS基础镜像 61
- 6.6.3 创建空基础镜像 62
- 6.7 在Docker内运行Docker 64
- 第7章 详细了解Dockerfile 67
- 7.1 .dockerignore 68
- 7.2 FROM 68
- 7.3 MAINTAINER 69
- 7.4 RUN 69
- 7.5 CMD 70
- 7.6 ENTRYPOINT 71
- 7.7 EXPOSE 73
- 7.8 ENV 73
- 7.9 ADD 74
- 7.10 COPY 76
- 7.11 VOLUME 77
- 7.12 USER 77
- 7.13 WORKDIR 78
- 7.14 ONBUILD 79
- 第8章 使用Docker部署应用程序 81
- 8.1 向一台服务器部署应用程序 81
- 8.1.1 在开发者PC安装Git并创建仓库 82
- 8.1.2 在开发者PC中使用Node.js编写Web服务器 83
- 8.1.3 在开发者PC中编写Dockerfile文件 84
- 8.1.4 在开发者PC中生成SSH 密钥 85
- 8.1.5 在服务器端安装Git并创建仓库 86
- 8.1.6 在服务器中安装Docker 87
- 8.1.7 在服务器中安装SSH密钥 88
- 8.1.8 在服务器中安装Git Hook 89
- 8.1.9 在开发者PC中推送源代码 90
- 8.2 向多台服务器部署应用程序 91
- 8.2.1 在开发者PC安装Git并创建仓库 92
- 8.2.2 在开发者PC中使用Node.js编写Web 服务器 93
- 8.2.3 在开发者PC中编写Dockerfile文件 94
- 8.2.4 在开发者PC中生成SSH密钥 95
- 8.2.5 在部署服务器安装Git并创建仓库 96
- 8.2.6 在部署服务器中生成SSH密钥 97
- 8.2.7 在部署服务器中安装Docker 98
- 8.2.8 在部署服务器中安装Docker注册服务器 99
- 8.2.9 在部署服务器中安装SSH密钥 100
- 8.2.10 在部署服务器中安装Git Hook 101
- 8.2.11 在应用程序服务器中安装Docker 103
- 8.2.12 在应用程序服务器中安装SSH 密钥 104
- 8.2.13 在开发者PC中推送源代码 105
- 第9章 Docker监控 107
- 9.1 编写监控服务器Dockerfile 108
- 9.2 编写应用程序服务器Dockerfile 111
- 9.3 在Web 浏览器中查看图表 114
- 第10章 在Amazon Web Services中使用Docker 117
- 10.1 在Amazon EC2中使用Docker 117
- 10.2 在AWS Elastic Beanstalk中使用Docker 119
- 10.2.1 在AWS控制台部署Docker应用程序 119
- 10.2.2 使用Docker Hub公开仓库镜像 129
- 10.2.3 使用Docker Hub私有仓库的镜像 131
- 10.2.4 使用Git部署Elastic Beanstalk Docker应用程序 139
- 第11章 在Google Cloud Platform中使用Docker 145
- 11.1 安装Goolge Cloud SDK 145
- 11.2 在Compute Engine中使用Docker 147
- 11.3 在Container Engine中使用Docker 148
- 第12章 使用Docker Hub 151
- 12.1 加入Docker Hub 151
- 12.2 使用push命令上传镜像 153
- 12.3 创建Docker Hub私有仓库 155
- 12.4 使用Docker Hub Automated Build 157
- 第13章 使用Docker Remote API 167
- 13.1 使用Docker Remote API Python库 169
- 13.1.1 创建并启动容器 169
- 13.1.2 创建镜像 173
- 13.1.3 显示容器列表 175
- 13.1.4 显示镜像列表 176
- 13.1.5 其他示例与函数 176
- 13.2 使用Docker Remote API Python库进行HTTPS通信 187
- 13.2.1 创建证书 187
- 13.2.2 使用Python库 191
- 第14章 使用CoreOS 193
- 14.1 在VirtualBox中安装CoreOS 196
- 使用systemd运行服务 205
- 14.2 使用Vagrant安装CoreOS 206
- 14.3 使用etcd 211
- 14.3.1 创建etcd键与目录 211
- 14.3.2 输出etcd键与目录列表 212
- 14.3.3 设置自动删除etcd键与目录 212
- 14.3.4 监视etcd键 213
- 14.3.5 etcd其他命令 214
- 14.4 使用fleet 214
- 14.4.1 输出fleet机器列表 215
- 14.4.2 使用fleet运行Unit 215
- 14.4.3 输出fleet Unit列表 217
- 14.4.4 查看fleet Unit状态 217
- 14.4.5 测试fleet的自动恢复功能 218
- 14.4.6 使用fleet专用选项 219
- 14.4.7 灵活使用fleet Unit文件模板 222
- 14.4.8 灵活使用fleet sidekick模型 224
- 14.4.9 fleet其他命令 227
- 14.5 在云服务中使用CoreOS 227
- 14.5.1 在Amazon EC2中使用CoreOS 227
- 14.5.2 在Google Compute Engine中使用CoreOS 229
- 第15章 使用Docker搭建WordPress 博客 231
- 15.1 编写WordPress Dockerfile文件 232
- 15.2 编写MySQL数据库Dockerfile文件 233
- 15.3 创建WordPress与数据库容器 236
- 第16章 使用Docker构建Ruby on Rails应用 237
- 16.1 安装Ruby与Rails 238
- 16.2 编写Rails Dockerfile 240
- 16.3 编写PostgreSQL数据库Dockerfile 文件 245
- 16.4 创建Rails与数据库容器 247
- 第17章 使用Docker构建Django应用 249
- 17.1 安装Django 250
- 17.2 编写Django Dockerfile文件 253
- 17.3 编写Oracle数据库Dockerfile文件 258
- 17.4 创建Django与数据库容器 261
- 第18章 Docker应用案例 263
- 18.1 与负载平衡相关的自动伸缩 263
- 18.2 整合开发、测试、运营 264
- 18.3 轻松迁移服务 265
- 18.4 用于测试 267
- 第19章 Docker命令与选项列表 269
- 19.1 attach 270
- 19.2 build 271
- 19.3 Commit 273
- 19.4 cp 273
- 19.5 create 274
- 19.6 diff 277
- 19.7 events 277
- 19.8 exec 278
- 19.9 export 280
- 19.10 history 280
- 19.11 images 281
- 19.12 import 281
- 19.13 info 282
- 19.14 inspect 283
- 19.15 kill 284
- 19.16 load 284
- 19.17 login 285
- 19.18 logout 286
- 19.19 logs 286
- 19.20 port 287
- 19.21 pause 287
- 19.22 ps 287
- 19.23 pull 288
- 19.24 push 289
- 19.25 restart 289
- 19.26 rm 289
- 19.27 rmi 290
- 19.28 run 291
- 19.29 save 296
- 19.30 search 297
- 19.31 start 297
- 19.32 stop 298
- 19.33 tag 298
- 19.34 top 299
- 19.35 unpause 299
- 19.36 version 300
- 19.37 wait 300
- 附录 编译Docker 301
Dockfile编辑可能要注意的几个问题 COPY ADD 使用问题会设计到权限的问题如何解决权限 可以使用 COPY --chown= 或者 ADD --chown= 去解决 在使用过程中 如ADD使用了.tar.gz自动解压的功能,build执行后,包里面的权限是不会变化的。然后COPY 直接使用权限会直接更改为root。 USER的使用,影响哪些使用 影响后面的RUN CMD ENTRYPOINT 命令的执行身份,注意的是 而COPY命令却不服从 WORKDIR的使用 切换目录 一个事例 RUN cd /test RUN echo "test" >test.txt 请问最后镜像有/test/test.txt吗? 答:NO 解释:docker里边有层的概念,每个命令都是生成一个层,每个层都是独立的空间。所以第二个RUN时,工作目录并不会切换到/test下面 。
最近一段时间学习了下Docker,关于Docker的安装,运用什么的在这里我不会过多的说明,我只说我对于Docker的一些理解,附加我用于记录的少量代码。 刚开始学习Docker的时候,找资料在网上看到最多的是Docker的好处。比如: 1、Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多 2、Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。 3、更快速的交付和部署、更轻松的迁移和扩展 等等…… 因为我是做java开发的,我们现有的模式是在一个服务器上安装统一一个jdk,运行多个tomcat,每个tomcat里面一个java应用,大家也知道tomcat不用安装,当我们项目要迁徙的时候也只需要把整个tomcat打包然后在另一台服务器上解压就ok了,也很简单。。。当时我就不懂Docker有什么好处,一度以为对我们现有的模式没用。知道昨天跟其他人交流我才弄明白一个问题,那就是应用隔离与资源独立!!