Docker及Dockerfile学习笔记

什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

docker有什么

镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。

容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

通俗来讲:Iamge为系统镜像,Container为虚拟机。
(仅限于这么理解但实际肯定不对。你要是问,那就是你对。

dockerfile

FROM alpine:3.16 as builder
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
    && apk update && apk add tzdata python3  \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /usr
COPY fxckToday fxckToday
FROM 247533/fxcktoday:latest as builder
WORKDIR /usr/fxckToday
COPY config.yml config.yml
COPY init.sh init.sh
CMD ["sh","./init.sh"]

两个简单的启动python脚本的dockerfile

细心的同学可能发现 我这里又有RUN又有CMD
区别是什么呢

使用dockerfile的启动流程
dockerfile --build --> image --run --> container
(我不知道说没说明白 但我感觉挺明白了

区别就在于 RUN实在build的过程中就执行的 而CMD是RUN阶段执行的

alpine

可能有人发现这个alpine东西 它是什么?

Alpine Linux 是一个社区开发的面向安全应用的轻量级Linux发行版。 Alpine 的意思是“高山的”,它采用了musl
libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk。

(busybox我可太熟了,从初中就开始玩路由器。对 就是那个p2p爆雷的公司的

为啥用它 肯定是短小精悍啊 额~ 呸! 肯定是他占内存、硬盘小啊

说到节省资源 dockerfile有一个叫多层构筑的一个功能
(我现在用到这个也就才30MB 貌似使用多层构筑能达到15MB?
((肯定因为懒啊 30MB 我路由器又不是跑不起来 (得意.jpg
想学习的童鞋请转至如何优雅的写Dockerfile
注:多层构筑即多阶段构筑 毕竟没有中文文档 怎么叫随我们便
呜呜呜,雪姐姐!!!(别尬黑,我是真爱粉

命令简析

docker build ./xxx -t xxx
-t 为tag 可以为xxx:版本号 或者 xxxxx/xxx:版本号 (xxxxx为dockerhub上的用户名 方便push
docker run -itd -v /dev:/dev --name xxx_container --restart always xxx
-itd 菜鸟教程给的解释是

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-d: 后台运行容器,并返回容器ID;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

-v 其实就是做个文件映射 菜鸟给的是卷 使用方法:宿主机:container
–name 为container命名
–restart 当docker重启时container如何启动
docker exec name[/id] -it /bin/sh
启动交互式shell
docker cp 文件[目录] name[/id]:文件[目录]
从宿主机拷贝文件到container 反向则反之

搭配shell特性
docker rm $(docker ps -a -q)
删除所有container
docker rmi $(docker image ls -q)
删除所有image

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值