进阶:docker

docker

镜像:就是一个叠加的文件系统,基于镜像文件创建的容器和宿主机共享内核,所有容器共用宿主机的相关资源

核心原理

进阶:docker

容器间互联

进阶:docker
每一个容器在创建时都会创建一对虚拟网卡,两个虚拟网卡组成数据的通道,其中一个会放在创建的容器中,会加入到名为 docker0 网桥中

命名空间为新创建的进程隔离了文件系统、网络并与宿主机器之间的进程相互隔离,但是命名空间并不能够为我们提供物理资源上的隔离

CGroups

# 查看当前的 CGroup 中有哪些子系统
lssubsys -m

# 结果
cpuset /sys/fs/cgroup/cpuset
cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
net_cls,net_prio /sys/fs/cgroup/net_cls,net_prio
blkio /sys/fs/cgroup/blkio
perf_event /sys/fs/cgroup/perf_event
hugetlb /sys/fs/cgroup/hugetlb

每一个 CGroup 下面都有一个 tasks 文件,其中存储着属于当前控制组的所有进程的 pid,作为负责 cpu 的子系统,cpu.cfs_quota_us 文件中的内容能够对 CPU 的使用作出限制,如果当前文件的内容为 50000,那么当前控制组中的全部进程的 CPU 占用率不能超过 50%

# demo
docker run -di --name=mycentos --cpu-period=100000 --cpu-quota=20000 centos:7 

制作镜像

docker commit 容器id 镜像名称:版本号

docker save -o 压缩文件名称 镜像名称:版本号

docker load –i 压缩文件名称

dockerfile制作镜像

demo1 自定义centos7镜像

# 指定父镜像
FROM centos:7

# 作者信息
MAINTAINER jojo<jojo@jojo.cn>

# 执行命令
RUN yum install -y vim

# 工作目录
WORKDIR /usr

# 容器启动命令
CMD /bin/bash

docker build –f dockerfile文件路径 –t 镜像名称:版本  

demo2 发布springboot项目

# 指定父镜像
FROM java:8

# 作者信息
MAINTAINER jojo<jojo@jojo.cn>

# 将jar包添加到容器
ADD springboot.jar app.jar

# 定义容器启动执行的命令
CMD java–jar app.jar

docker build –f dockerfile文件路径 –t 镜像名称:版本  

demo3 制作安装了JDK的容器

# 父镜像
FROM centos:7
# 作者
MAINTAINER jojo
# 工作目录
WORKDIR /usr
# 执行命令
RUN mkdir /usr/local/java
# 添加jdk
ADD jdk1.8.0_181 /usr/local/java/
# 环境变量
ENV JAVA_HOME /usr/local/java/
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
# 创建镜像文件,最后的 . 表示Dockerfile文件所在的路径:为当前命令执行时所在的目录
docker build -f Dockerfile -t myjdk1.8:1.0 .

服务编排

上一篇:C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码


下一篇:servlet中获取request中文乱码问题分析