Docker学习【1-2】
Docker1
1.Docker简介
2.Namespace简介
3.CGroup、容器runtime及image规范
4.编排工具及依赖技术简介
5.Docker安装
6.存储引擎及镜像基本简介
7.Docker镜像操作简介
Docker 2        
1.docker命令使用详解-上
2.docker命令使用详解-下
3.docker镜像制作简介
4.基于Dockerfile制作nginx镜像
5.镜像分层构建-上
6.镜像分层构建-下
7.镜像构建总结
Homework
1、掌握namespace、cgroup在容器中的作用;
namespace是对全局系统资源的一种封装隔离。这样可以让不同namespace的进程拥有独立的全局系统资源。这样改变一个namespace的系统资源只会影响当前namespace中的进程,对其它namespace中的资源没有影响。以前Linux也有一个。之前有一个系统调用chroot和namespace类似。
有以下:提供了UTS(提供主机名隔离)、IPC(提供进程间通信隔离)、MNT(提供磁盘挂载点和文件系统隔离)、PID(提供进程隔离)、NET(提供网络隔离)、USER(提供用户隔离)等隔离机制。
2、编排工具及依赖技术总结;
Linux CGroup(Linux Contral Group),它其实是Linux内核的一个功能,它是Linux下的一种将进程按组进行管理的机制。最开始是由Google工程师Paul Menage和Rohit Seth于2006年发起的,最早起名叫进程容器。在2007之后随着容器得提出,为了避免混乱重命名为cgroup,并且被合并到了内核2.6.24版本中去了。 在用户层看来,cgroup技术就是把系统中的所有进程组织成一颗一颗独立的树,每棵树都包含系统的所有进程,树的每个节点是一个进程组,而每颗树又和一个或者多个subsystem关联。树主要用来将进程进行分组,而subsystem用来对这些组进行操作。
3、基于dockerfile制作一个nginx镜像;
下载nginx-1.16.1.tar.gz 源码包:http://nginx.org/download/nginx-1.16.1.tar.gz
放到和Dockerfile同目录
====Dockerfile====
# FIRST DOCKERFILE
FROM centos:7.8.2003
MAINTAINER "BIRKHOFF 807722920@qq.com"
RUN yum install -y epel-release && yum install -y  make zlib zlib-devel gcc-c++ libtool openssl openssl-devel lrzsz wget tree iproute net-tools iotop
ADD nginx-1.16.1.tar.gz /usr/local/src
RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make install
RUN cd /usr/local/nginx
#ADD nginx.conf /usr/local/nginx/conf/nginx.conf
RUN useradd nginx -s /sbin/nologin
RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx
RUN echo "BIRKHOFF TEST DOCKERFILE NGINX PAGE" > /usr/local/nginx/html/index.html
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]
====

 
**镜像构建过程由于网络比较慢,以为卡住了其实是在下载中 耐心等待一次Dockerfile就搞定
4、镜像构建总结;
1.可以通过容器中打包 commit进行构建。
2.可以通过Docerfile进行编写脚本进行构建,构建内容参数小结如下:
FROM centos:7.6.1810 #在整个dockfile文件中,除了注释之外的第一行,要是from,用于指定父镜像
ADD #用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,会自动解压tar.gz格式的压缩包,不会自动解压zip
MAINTAINER   #(镜像的作者信息)
LABEL #设置镜像的属性标签
COPY #用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,不会解压任何压缩包
ENV #设置容器环境变量
USER nginx #指定运行操作的用户
RUN yum install vim unzip -y && cd /etc/nginx  #执行shell命令,但是一定要以非交互式的方式执行
VOLUME #定义volume
WORKDIR #用于定义工作目录
EXPOSE 80 #生命要把容器的某些端口映射到宿主机
CMD  #镜像启动为一个容器时候的默认命令或脚本, CMD ["/bin/bash"] 
ENTRYPOINT #也可以用于定义容器在启动时候默认执行的命令或者脚本,如果是和CMD命令混合使用的时候,会将CMD的命令当做参数传递给ENTRYPOINT后面的脚本,可以在脚本中对参数做判断并相应的容器初始化操作。
EG:
    1.ENTRYPOINT ["top", "-b"] 
    CMD ["-c"]
		==  ENTRYPOINT ["top", "-b", "-c"]
		2.ENTRYPOINT ["nginx"] 
    CMD ["-g","daemon off;"]
		==  ENTRYPOINT ["nginx", "-g", "daemon off;"]
		3.ENTRYPOINT ["docker-entrypoint.sh"]
		CMD ["mysqld"]
		=ENTRYPOINT ["docker-entrypoint.sh","mysqld"]
		解释:ENTRYPOINT(脚本) + CMD(当做参数传递给ENTRYPOINT)
====补充自己的知识====
【nsenter 进入docker容器】
#!/bin/bash
docker_in(){
NAME_ID=$1
PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID})
nsenter -t ${PID} -m -u -i -n -p
}
docker_in $1
#Use ./docker_in.sh container_names
【Dockerfile 参数解释】
FROM centos:7.6.1810 #在整个dockfile文件中,除了注释之外的第一行,要是from,用于指定父镜像
ADD #用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,会自动解压tar.gz格式的压缩包,不会自动解压zip
MAINTAINER #(镜像的作者信息)
LABEL #设置镜像的属性标签
COPY #用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,不会解压任何压缩包
ENV #设置容器环境变量
USER nginx #指定运行操作的用户
RUN yum install vim unzip -y && cd /etc/nginx #执行shell命令,但是一定要以非交互式的方式执行
VOLUME #定义volume
WORKDIR #用于定义工作目录
EXPOSE 80 #生命要把容器的某些端口映射到宿主机
CMD #镜像启动为一个容器时候的默认命令或脚本, CMD ["/bin/bash"]
ENTRYPOINT #也可以用于定义容器在启动时候默认执行的命令或者脚本,如果是和CMD命令混合使用的时候,会将CMD的命令当做参数传递给ENTRYPOINT后面的脚本,可以在脚本中对参数做判断并相应的容器初始化操作。
ENTRYPOINT ["top", "-b"] == ENTRYPOINT ["top", "-b", "-c"]
CMD ["-c"]
EG:
["docker-entrypoint.sh"]
CMD ["mysqld"]
ENTRYPOINT ["docker-entrypoint.sh","mysqld"]
ENTRYPOINT(脚本) + CMD(当做参数传递给ENTRYPOINT)
                    
                
                
            
        
浙公网安备 33010602011771号