本篇文章给大家带来了关于docker核心技术之容器操作,以及Dockerfile详解等等相关问题,希望对大家有帮助。
|
本篇文章给大家带来了关于docker核心技术之容器操作,以及Dockerfile详解等等相关问题,希望对大家有帮助。
一. Docker1. 简介
2. Docker优势
3. Docker与虚拟机对比
二. Docker安装参考文章安装: Install Docker Engine on Ubuntu | Docker Documentation
三. 容器操作
docker run: -it 交互 -d 后台运行 -p 端口映射 -v 磁盘挂载
docker start
docker stop
docker ps
docker inspect
docker cp file1 <containerid>:/file_to_path
docker images
Docker hub: https://hub.docker.com 创建私有镜像仓库: docker run -d -p 5000:5000 registry 四. Dockerfile详解Dockerfile一般分为四个部分:基础镜像信息、维护信息、镜像操作指令和容器启动时操作指令
FROM:指定基础镜像, 必须为第一个指令格式: FROM <image> FROM <image>:<tag> FROM <image>@<digest> 示例: FROM ubuntu MAINTAINER: 维护信息格式: MAINTAINER <name> 示例 MAINTAINER ribbon RUN:构建镜像时执行的命令格式: shell执行:RUN <command> exec执行:RUN ["executable", "param1", "param2"] 示例: RUN apk update RUN ["/etc/execfile", "arg1", "arg2"] RUN apt-get update && apt-get install这两条命令永远用&&连接,否则apt-get update构建层被缓存,会导致新package无法安装 ADD: 将本地文件添加到容器中,tar等类型会自动解压,可以访问网络资源,类似于wget格式: ADD <src> ... <dest> 示例: ADD bin/amd64/httpserver /httpserver COPY: 功能类似于ADD,但是不会解压缩文件,不能访问网络资源在Dockerfile中使用multi-stage: Dockerfile 中的 multi-stage(多阶段构建) - sparkdev - 博客园 格式: COPY<src> ... <dest> 示例: COPYbin/amd64/httpserver /httpserver CMD: 构建容器后调用,也就是在容器启动时才进行调用格式: CMD ["executable","param1","param2"] (执行可执行文件,优先) 示例: CMD ["ethtool", "--help"] CMD echo "1111" ENTRTPOINT: 配置容器,使其可执行化。格式: ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先) 范例: ENTRYPOINT /httpserver CMD [-c] LABAL: 用于为镜像添加源数据格式: LABEL <key>=<value> <key>=<value> <key>=<value> ... 范例: LABEL multi.label1="value1" multi.label2="value2" other="value3" ENV: 设置环境变量格式: ENV <key> <value> 范例: ENV MY_SERVICE_PORT=80 UDP_PORT=90 EXPOSE: 指定外界交互的端口格式: EXPOSE <port> [<port>...] 示例: EXPOSE 80 EXPOSE 80/tcp EXPOSE 80 90 VOLUME: 用于指定持久化目录格式: VOLUME [<path>] 范例: VOLUME ["/data", "/usr1/jenkins"] USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。格式: 示例: ARG: 用于指定传递给构建运行时的变量格式:
五. Linux NameSpace详解
Linux NameSpace_Frank_Abagnale的博客-CSDN博客 这篇文章比较详细的介绍,可以参考这篇
lsns -t <type>
ls -la /proc/<pid>/ns/
nsenter -t <pid> -n
六. Linux Cgroups详解
容器核心:cgroups - 简书 可以参考这篇文章来进行了解
通过模拟来更好的熟悉Cgroups控制资源的效果, 首先创建cpudemo文件夹
执行top可以看到busyloop占用两个CPU资源 将进程添加进cgroup进程配置组
设置cpuquota
可以看到成功将占用200%CPU资源的降低成1%
/sys/fs/cgroup/memory目录下创建memorydemo文件夹
运行消耗内存程序, 使用watch查询内存使用情况
将进程配置进cgroups配置组 设置最大内存大小
等待程序被OOM kill, dmesg可以看到杀死信息
备注:删除自主创建的cgroup文件夹, 需要使用cgroup-tools
七. Union FSDocker前面使用的技术都是源于linux的技术并没有创新,而Docker的创新正是文件系统。 1. 概念:
2. 图解Union FSDocker镜像的设计中,引入了层(layer)的概念,也就是说,用户制作镜像的每一步操作,都会生成一个层,也就是一个增量rootfs(一个目录),这样应用A和应用B所在的容器共同引用相同的ubuntu操作系统层、Golang环境层(作为只读层),而各自有各自应用程序层,和可写层。启动容器的时候通过UnionFS把相关的层挂载到一个目录,作为容器的根文件系统。
3. 容器存储驱动
4. 模拟Union FS更好理解效果由于docker当前版本上使用的是overlayFS的存储驱动,所以我们就以overlay挂载方式来进行实验, overlayfs通过三个目录:lower目录、upper目录、以及work目录实现,其中lower目录可以是多个,work目录为工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见,最后联合挂载完成给用户呈现的统一视图称为为merged目录。
执行如下命令: mkdir upper lower merged work
echo "lower" > lower/in_lower.txt
echo "from lower" > lower/in_both.txt
echo "from upper" > upper/in_both.txt
echo "upper" > upper/in_upper.txt
path=$(pwd)
mount -t overlay overlay -o lowerdir=${path}/lower,upperdir=${path}/upper,workdir=${path}/work ${path}/merged
八. Docker网络1. 安装工具Centos系统: $ yum install bridge-utils Ubuntu系统: $ apt-get install bridge-utils 2. Docker网络模式
1)host模式:使用 --net=host 指定。 跟host公用一套net
2)none模式:使用 --net=none 指定。网络配置需要由自己来进行配置
3)bridge模式:使用 --net=bridge 指定,默认设置。
docker网络逻辑图 网桥和NAT
4)container模式:使用 --net=container:NAME_or_ID 指定。使用其他容器的网络配置
网络模式图大概如下图所示 3. 模拟Docker起网桥的操作
生成eth0网络设备在nginx docker中
给eth0配置ip 网关
推荐学习:《docker视频教程》 以上就是最系统的掌握Docker核心技术(总结分享)的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |
