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)

posted @ 2023-02-15 13:53  しみずよしだ  阅读(33)  评论(0)    收藏  举报