由于兴致使然,便想学习一点Docker技术。于是,写了这篇学习Docker的体会。笔拙,见谅。

第一件事——把网线插上

相信很多人都被官网的《Sample application》的 docker build -t getting-started .给欺骗了。

fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
WARNING: Ignoring http://dl-cdn.alpinelinux.org/alpine/v3.11/main: temporary error (try again later)
ERROR: unable to select packages:
g++ (no such package):
required by: world[g++]
make (no such package):
required by: world[make]
python3 (no such package):
required by: world[python3]

我查阅Github的Issue也走入了误区,添加了RUN echo -e "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" > /etc/apk/repositories还是有问题

我于是修改了dockerfile:

 # syntax=docker/dockerfile:1
FROM node:12-alpine
RUN ping dl-cdn.alpinelinux.org
# RUN echo -e "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" > /etc/apk/repositories
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

通过Ping了解到网线没插

于是我注释了ping,直接运行

$sudo docker build --network=host -t getting-started .

等待build结束,执行:

$sudo docker run --network=host -dp 3000:3000 getting-started

第二件——学会使用梯子

根据安装Arch和Gentoo的体验,由于国内外网络速度差异太大,这里我找了一些apline的镜像供各位参考。

第三件——linux是一个很好的老师

dockerfile的内容以bash操作为主。很多Concept都与linux相关。docker的cli多数和bash以及gcc类似,如ps,rm, build, run, stop 等等

  • docker volume就很像简易版的LVM
  • docker compose和cmake的操作近似

第四件——区分Docker Daemon、Images和Container的三者关系

建议参考git的原理

第五件——和学习Java一样多研究Reference

https://docs.docker.com/reference/

结论

Docker的上手难度低,之前浪费时间看书,现在有点后悔。虽然我已经在开发中使用Docker的Postgres和Memcached作为DB的容器, 但是真正要想玩转Docker,还是需要理解运维服务的一些技术。很多人都认为Docker是微服务,其实不是他只是微服务的载体。如果说Docker是进程,那么微服务就是函数。程序可以由多个函数组成,Docker也可以装入多个微服务。Docker的目的很简单——有效的利用资源和分配资源。但是我认为Docker存在对内存和CPU的依赖性,这会导致我们将来的计算机结构内存会更大,CPU核会更多。

最新文章

  1. web前端浮动、清浮动问题
  2. AxureRP8实战手册(基础21-30)
  3. Java InMemoryCache
  4. CentOS yum安装Apache + PHP + Tomcat7 + MySQL
  5. 树状数组+STL FZU 2029 买票问题
  6. HTTP 笔记与总结(2 )HTTP 协议的(请求行的)请求方法 及 (响应行的)状态码
  7. key-value数据库
  8. 自定义延时查询控件---valen
  9. mysql 分页存储过程 一次返回两个记录集(行的条数,以及行记录),DataReader的Read方法和NextResult方法
  10. POJ3613 Cow Relays [矩阵乘法 floyd类似]
  11. 20151225jquery学习笔记---折叠菜单UI
  12. Different Ways to Add Parentheses——Leetcode
  13. 智能卡 APTU命令
  14. php 大流量网站访问
  15. artdialog的图片,标题,以及关闭按钮不显示的问题
  16. MVC3和MVC4中CRUD操作
  17. scrapy发送邮件
  18. linux系统调用之文件系统操作
  19. ocLazyLoad按顺序加载
  20. cf789d 图论计数,自环闭环

热门文章

  1. 转置卷积Transposed Convolution
  2. Etcd中Raft joint consensus的实现
  3. OpenFeign远程调用原理
  4. Redis五种基础与三种高级数据结构解析
  5. 分分钟教你Python Web开发框架Django
  6. Spring事件发布与监听机制
  7. 在vue中下拉框切换事件中改新建表单中的一个值,页面不显示
  8. 在vue项目中使用echarts
  9. Go语言中的有缓冲channel和无缓冲channel区别
  10. 信息熵,交叉熵与KL散度