由于兴致使然,便想学习一点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]
1
我查阅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的三者关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JOxXFYVW-1627107012719)(https://docs.docker.com/engine/images/architecture.svg)]
建议参考git的原理
第五件——和学习Java一样多研究Reference
https://docs.docker.com/reference/
结论
Docker的上手难度低,之前浪费时间看书,现在有点后悔。虽然我已经在开发中使用Docker的Postgres和Memcached作为DB的容器, 但是真正要想玩转Docker,还是需要理解运维服务的一些技术。很多人都认为Docker是微服务,其实不是他只是微服务的载体。如果说Docker是进程,那么微服务就是函数。程序可以由多个函数组成,Docker也可以装入多个微服务。Docker的目的很简单——有效的利用资源和分配资源。但是我认为Docker存在对内存和CPU的依赖性,这会导致我们将来的计算机结构内存会更大,CPU核会更多。
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/3148.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~