由于兴致使然,便想学习一点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核会更多。

Docker的学习体验的更多相关文章

  1. 在Windows环境中开始Docker的学习和体验

    研究docker有一段时间了,当然我主要的使用环境还是在Linux中,确实很方便. 但也有不少朋友希望使用Windows来工作学习,这里介绍一下在Windows中如何快速开始Docker的学习和体验吧 ...

  2. learning docker steps(4) ----- docker swarm 初次体验

    参考:https://docs.docker.com/get-started/part4/ 了解 swarm 集群 swarm 是一组运行 Docker 并且已加入集群中的机器.执行此操作后,您可以继 ...

  3. docker深入学习

    docker深入学习 一.容器的介绍和容器的发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+D ...

  4. 【Knockout.js 学习体验之旅】(3)模板绑定

    本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  5. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  6. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  7. docker入门-学习笔记

    docker可以类比成window下的VMware或者virtualbox软件.docker有两个基本的概念:容器(container)和镜像(image),分别对应为VMware中的系统镜像和系统镜 ...

  8. 在线学习体验大PK 云智慧发布在线教育网站性能监测报告

    互联网不但改变了我们的生活.娱乐和消费方式,也推动各行各业进行着快速变革,越来越多的职场人士必须通过不断的学习.充电才能跟上行业发展的步伐,获得职业的提升,而这也引发了国内教育市场的爆炸式发展.据统计 ...

  9. Docker容器学习梳理 - 应用程序容器环境部署

    关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...

随机推荐

  1. 开发掉坑(一)tar命令解压文件覆盖源文件

    今天在编译机上编译前端代码,报了找不到依赖的异常.检查后发现是node_modules/.bin下少了一些文件. 一开始疑惑为什么本地能成功生成软链在node_modules/.bin,服务器上面却不 ...

  2. Java8 中使用Stream 让List 转 Map使用总结

    在使用 Java 的新特性 Collectors.toMap() 将 List 转换为 Map 时存在一些不容易发现的问题,这里总结一下备查. 空指针风险 java.lang.NullPointerE ...

  3. 开源FastGithub

    0 前言 github网站访问慢或访问不了,相信很多人都会遇到过,解决方式大概有两种:一种是使用代理访问:另一种是使用ipaddress.com等域名解析网站查询域名的ip,然后在host文件增加ip ...

  4. python operator操作符函数

    本模块主要包括一些Python内部操作符对应的函数.这些函数主要分为几类:对象比较.逻辑比较.算术运算和序列操作.

  5. .NET平台系列30:.NET Core/.NET 学习资源汇总

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core/.NET技术虽然吸取了.NET Framework 中的精华,但是也扩展了一些新功能,尤其是跨平台的 ASP.NET Cor ...

  6. SpringBoot 自动配置原理,翻源码看一下

    ​ 初始化一个Springboot项目,在主启动类会有这么一个注解:@SpringBootApplication,自动装配的秘密全在主启动类这个注解里面了 点进去一层会发现有三个子注解组成,分别是 @ ...

  7. Java synchronized对象级别与类级别的同步锁

    Java synchronized 关键字 可以将一个代码块或一个方法标记为同步代码块.同步代码块是指同一时间只能有一个线程执行的代码,并且执行该代码的线程持有同步锁.synchronized关键字可 ...

  8. xshell远程连接另一台电脑的数据库,启动图形失败

    1.用xshell远程连接数据库10.62.207.152,且用oracle用户直接登陆 2.执行:netca 报错: Oracle Null Service Configuration: Error ...

  9. JavaScript的介绍概括

    1.js是一种轻型的解释性的脚本语言,称为web脚本语言. 2.js的执行原理:当客户端向服务器端请求某个页面时,浏览器端将整个页面中包含JavaScript的脚本代码作为响应内容,发送到客户端的机器 ...

  10. Golang限制函数调用次数

    Golang限制函数调用次数 项目环境 ubuntu+go1.14 需求描述 限制某个函数5秒内只能调用一次,5秒内的其他调用抛弃 工具包使用 这里用到了官方限流器/time/rate 该限流器是基于 ...