docker学习

docker利用的都是现有的linux技术

 

docker 组成

 

 

 架构图

nameSpace

docker nameSpace隔离 类似于 系统级别的隔离  ;通过nameSpace 实现轻量级的 命名空间隔离,进程间隔离
测试:
一:linux中
1. ps -aux 可以看到很多进程
2. unshare --fork --pid --amount-proc bash  新进入了一个进程空间
再查询 ps-aux 就只能看到两个root进程
docker容器应该和这个类似
二:执行docker 中的命令
使用docker ps 可以查看docker 列表
启动一个busybox容器 docker run -it busybox ; 就是运行一个容器 (-it 可交互的terminal终端)
在这个里面可以使用命令 查看docker的参数: ps -aux 
也是只能看到两个进程

CGroups 资源配额 

能用多少是要管控的
使用的是CGroups controller groups 项目
linux要是2.6.24版本,才集成了这个项目。
能限制cpu、内存、网络。测试:
让一个进程占满CPU   while : ; do : ; done &
通过这个命令,就可以运行 并查看当前命令的进程号;
之后根据top可以看占用情况。
这里有个小知识:cd /sys/fs/cgroup/cpu  这个是linux自带的日志位置 
这里可以建个空的测试文件夹。系统会自动在里面生成文件。这里的文件都是配额。-1就是不限制。
写入cpu限制,是写入cpu.cfs-quota-us文件,是毫秒,意为每1scpu 有多少cpu是给这个用的。 20000 就是20%cpu时间
把想管理的进程写入这个目录的task文件里,意为要管理的进程。
在看top,现在最高只有20%了再看看docker是怎么实现这个功能的
docker run -it --cpu=".5" nginx /bin/sh  运行docker 在可操作终端 给cpu最大50% 运行nginx 
进入 cd /sys/fs/cgroup/cpu  cat一下cpu.cfs-quota-us 就看到了50000。所以docket就是用这个命令的。
小结:k8s的limit memory 调用的docket 的--cpu那个  底层就是用的linux的配额限制。

docket镜像(docket真正的创新)

运行环境的隔离,但是如何快速迁移复制到其他环境运行(水平扩容),一次构建,处处运行。docket镜像应运而生。

docket镜像特性:

具备应用运行需要的所有依赖。一次构建处处运行。基于checkSum去重存储,降低存储空间。

常用命令:

docker pull nginx  拉取镜像 如果本地没做配置 拉取的就是docker官方的配置好的镜像。

docket image |grep nginx 可以看到nginx的版本在容器中有哪些。

 

创建docket在docket官网的自己账号上。

 

 

 

 

看看本地镜像在哪里。 docker info 命令 查看Docket root dir 是本地存储路径

cd /var/lib/docket centos镜像默认都是这个地方。

镜像存储文件在overlay2

进去之后可以看到很多的文件夹存储,叫:layer层

其中的文件夹里有:commit diff link  lower work 这几个

 

diff

差异,操作系统镜像是不变的。

通过diff进行增量存储所有文件,管理镜像。

 

创建项目的docket镜像

打一个项目的包。mvn package 

在项目路径下建Dockfile 

#基于哪个镜像 基础镜像版本
FROM registry.XXX.com/xxx/pepper-java:1.4

# 指定包名
ARG jarName

# 拷贝文件到容器,也可以直接写成ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar /app.jar
# 容器外的目录 添加到容器内
ADD "build/libs/$jarName" /app.jar
COPY start.sh /start.sh

#PORT WEB 暴露端口 这个端口会被转发到docker容器里
EXPOSE xxx

#PORT GRPC 暴露端口
EXPOSE xxx

# 配置容器启动后执行的命令 
ENTRYPOINT ["sh", "/start.sh"]

构建Docker 镜像

 

 1.进入DockerFile所在目录

cd /root/kubeblog/Final

2.构建docker镜像

docker build -t kubeblog .(当前目录)

3.查看docker镜像

docker images 

有了镜像就存到这个机器上了。其他节点拉不到这个镜像,因为是本地的。

共享有两种办法:1.上传公网dockerhub。注册一下上传就行

                        2.安装本地私有docker镜像,公司内部有限共享

4.上传镜像到Dockerhub

docker tag kubeblog:1.0 XXX/kubeblog:1.0

推完之后就可以集群之间共享了,这种软件分享的方式比较好

运行

docker -run --name kubeblog -d -p 5000:5000 --link mysqll57 kubeblog:1.0 run运行-d 后台运行-p 端口映射 宿主机:容器端口--link 对mysql进行端口打通1.0 版本号

docker exec -it kubeblog sh 进入docket之后

printenv 可以查看环境

--link 已经把/etc/host加了一条记录。

docker stop 可以停止服务 

 

posted @ 2023-03-05 12:11  CodingOneTheWay  阅读(42)  评论(0编辑  收藏  举报
回到顶部