马哥-docker 10节课程笔记

摘要:
)使用docker的思想一个docker启动一个进程,他就是一个普通的进程,非常方便,挂再外部目录进行存贮为什么需要容器编排工具:1、我们有很多台服务器,为了使资源不滥用或过度空闲,就需要将需求(业务端)和资源端(服务器)对接起来,将这个需求放到最合适的服务器上并开始构建,人是不知道那台服务器闲置的,编排工具就可以;2、一些服务启动或关闭有依赖关系关系,这些docker本身也无法解决,也需要编排工具来解决。
第一讲
系内核中直接进行虚拟化的资源有以下几种
  • UTS HOSTNAME
  • MOUNT挂载点,首次登陆Linux(
  • IPC 进程间通信
  • PID "chroot"进程树
  • USER将本地的虚拟user-id映射到真实的user-id
  • NET 网络访问,包括接口(之后的文章会讲到)
全部满足以下条件的至少内核为3.8 至少使用centos7以下的系统
Cgroup = Control Group
对系统资源进行管理的程序

第一个容器化产品 LXC Linux Container =管理了 Cgroup+namespace + chroot技术
Docker和 LXC的区别
角度LXCDocker
运行方式使用namespace运行多个进程一个docker只能运行一个进程
安装方式自行现场安装直接从hub下载,无须自行定义





  • 大规模使用docker时必须有编排工具,否则相比虚拟机来说是增加了工作量
  • docker运行方式 “分层构建 联合挂载” 那么意思是不是docker run时可以挂载两个image镜像呢? (不是那样的,意思是一个运行在centos7.2的nginx镜像已经打包了底层依赖环境,不需要运维人员来操作,可直接挂载使用。)
  • 使用docker的思想 一个docker启动一个进程, 他就是一个普通的进程,非常方便,挂再外部目录进行存贮
为什么需要容器编排工具:
1、我们有很多台服务器,为了使资源不滥用或过度空闲 ,就需要将需求(业务端)和资源端(服务器)对接起来,将这个需求放到最合适的服务器上并开始构建,人是不知道那台服务器闲置的(或需要提前查验),编排工具就可以;
2、一些服务启动或关闭有依赖关系(dependent)关系,这些docker本身也无法解决,也需要编排工具来解决。如lnmp搭配的系统 ;
k8s是谷歌出的 后来捐献给了 CNCF
目前容器领域是 k8s +docker两种方式,虽然不论是在编排领域还是容器领域都有替代者,但这两者已经成为事实上的工业标准
第二讲
docker支持restful风格,所有的资源都是一种资源,支持增删改查的操作 ,如下面的对象
  • Image
  • Containers
  • Networks
  • Volumes
  • Plugins And Other Object
默认创建的docker使用的网络为 bridge桥,除非特别指定了网络
docker inspect host_nginx   #检查某一个Container 的参数  情况
[root@vhost-xiaoshancun docker]# docker network   ls    #显示所有的网桥
NETWORK ID          NAME                DRIVER              SCOPE
59ef2c6e4969        bridge              bridge              local
f8bd30438a48        host                host                local
68447dbf6019        none                null                local
1
docker inspect host_nginx   #检查某一个Container 的参数  情况
2
[root@vhost-xiaoshancun docker]# docker network   ls    #显示所有的网桥
3
NETWORK ID          NAME                DRIVER              SCOPE
4
59ef2c6e4969        bridge              bridge              local
5
f8bd30438a48        host                host                local
6
68447dbf6019        none                null                local
docker的状态转换及常用命令
马哥-docker 10节课程笔记第1张


第三讲: docker network
docker之间互联使用的是SDN类型的通信
yum install bridge-util
[root@vhost-xiaoshancun ~]# brctl  show   #显示虚拟交换机上端口的连接情况
1
yum install bridge-util
2
[root@vhost-xiaoshancun ~]# brctl  show   #显示虚拟交换机上端口的连接情况
docker使用的是 overlay network类型 叠加网络
意思是如果两台docker位于两台不同的物理主机上
C1到C2的报文发送顺序为:

1、C1发起tcp请求, 源地址为C1,目标地址为C2
2、C1所在的物理主机上生成的DOCKER逻辑网桥发现c2不在本物理主机上(ip list show能看到本机的的设备)
3、C1所的逻辑网络会将次报文转发给物理主机的网卡(nat地址转换),主机会进行二次三层封装,在原来报文基础上增加物理主机的包头 , 源地址为H1主机,目标为H2主机
4、H2主机收到后会解开报文,发现目标地址为C2的报文,然后会转给C2的逻辑网桥,
5、C2所在的逻辑网桥会转发报文给C2的DOCKER 至此完成报文转发过程

马哥-docker 10节课程笔记第2张


如果需要进一步共享的话 最多再共享 UTS NET IPC三种资源 。
[root@vhost-xiaoshancun ~]# docker  network  ls
NETWORK ID          NAME                DRIVER              SCOPE
0865d189a638        bridge              bridge              local	# 普通的叠加网络效果
f8bd30438a48        host                host                local	# 直接管理宿主机网络,修改会影响宿主机		
68447dbf6019        none                null                local	#指定的docker不启用网络功能
1
[root@vhost-xiaoshancun ~]# docker  network  ls
2
NETWORK ID          NAME                DRIVER              SCOPE
3
0865d189a638        bridge              bridge              local   # 普通的叠加网络效果
4
f8bd30438a48        host                host                local   # 直接管理宿主机网络,修改会影响宿主机        
5
68447dbf6019        none                null                local   #指定的docker不启用网络功能
另外默认的还有 macvlan overlay 网络机制 除此之外还可以自定义网络
第四讲: 容器虚拟化网络概述

docker能使用的网络容器可以分为以下四种
  1. 无网络接口的 Close container none
  2. 桥接的 bridged container
  3. 部分共享名称空间后直联的docker -联盟式容器 (两个容器有独立的MOUNTUSERPID ,但共享netIPCUTS)
  4. 直接使用宿主机的网络 host

马哥-docker 10节课程笔记第3张

常用命令:
 [root@vhost-xiaoshancun ~]#docker inspect host_nginx  #最后会docker container名称  可以显示container的详细配置信息
 [root@vhost-xiaoshancun ~]# ip link  show   #显示虚拟网卡情况
 [root@vhost-xiaoshancun ~]# brctl  show   #显示虚拟交换机上端口的连接情况

1
 [root@vhost-xiaoshancun ~]#docker inspect host_nginx  #最后会docker container名称  可以显示container的详细配置信息
2
 [root@vhost-xiaoshancun ~]# ip link  show   #显示虚拟网卡情况
3
 [root@vhost-xiaoshancun ~]# brctl  show   #显示虚拟交换机上端口的连接情况
4
5
第五讲: docker网络2
docker网络名称空间的测试方法
使用ip命令 可以测试设备在不同名称空间的移动效果 ,能确定不同的设备同一时刻只能从属于某一个名称空间
各种容器的创建方法 如果容器里有多个端口需要暴露的话可多次使用-p即可
[root@vhost-xiaoshancun ~]# docker run  --name t1  --rm  --network bridge  -it  busybox      #bridge桥接方式
[root@vhost-xiaoshancun ~]# docker run  --name t1  --rm  --network host  -it  busybox  # 创建host方式网卡
[root@vhost-xiaoshancun ~]# docker run  --name t1  --rm  --network none   -it  busybox  #创建none无网卡主机 
root@vhost-xiaoshancun ~]# docker run --name host_nginx  -p 81:80  --rm  -d nginx
[root@vhost-xiaoshancun ~]# docker port  host_nginx     #绑定指定端口,所有宿主机IP
80/tcp -> 0.0.0.0:81

[root@vhost-xiaoshancun ~]# docker run --name host_nginx  -p 192.168.72.129::80  --rm  -d nginx #    第三种是指定IP的
[root@vhost-xiaoshancun ~]# docker port  host_nginx 
80/tcp -> 192.168.72.129:32768

[root@vhost-xiaoshancun ~]# docker run --name host_nginx  -P  --rm  -d nginx  #大写的p 自动暴露容器中所有服务
 
1
[root@vhost-xiaoshancun ~]# docker run  --name t1  --rm  --network bridge  -it  busybox      #bridge桥接方式
2
[root@vhost-xiaoshancun ~]# docker run  --name t1  --rm  --network host  -it  busybox  # 创建host方式网卡
3
[root@vhost-xiaoshancun ~]# docker run  --name t1  --rm  --network none   -it  busybox  #创建none无网卡主机 
4
root@vhost-xiaoshancun ~]# docker run --name host_nginx  -p 81:80  --rm  -d nginx
5
[root@vhost-xiaoshancun ~]# docker port  host_nginx     #绑定指定端口,所有宿主机IP
6
80/tcp -> 0.0.0.0:81
7
8
[root@vhost-xiaoshancun ~]# docker run --name host_nginx  -p 192.168.72.129::80  --rm  -d nginx #    第三种是指定IP的
9
[root@vhost-xiaoshancun ~]# docker port  host_nginx 
10
80/tcp -> 192.168.72.129:32768
11
12
[root@vhost-xiaoshancun ~]# docker run --name host_nginx  -P  --rm  -d nginx  #大写的p 自动暴露容器中所有服务
13
 
14

创建带IP端口映射的容器
[root@vhost-xiaoshancun ~]# docker run --name host_nginx  --rm -p 80  -d nginx  #随机端口映射
[root@vhost-xiaoshancun ~]# docker port host_nginx  #查看某一个容器的具体映涉信息 
80/tcp -> 0.0.0.0:32769
1
[root@vhost-xiaoshancun ~]# docker run --name host_nginx  --rm -p 80  -d nginx  #随机端口映射
2
[root@vhost-xiaoshancun ~]# docker port host_nginx  #查看某一个容器的具体映涉信息 
3
80/tcp -> 0.0.0.0:32769
创建 joiner Container联合容器 第二个容器使用第一个容器的网络
注:网桥host是一种特殊的joiner模式
[root@vhost-xiaoshancun ~]# docker run --name host1 --rm  -itd nginx
[root@vhost-xiaoshancun ~]# docker run --name host2  --network container:host1  --rm  -d nginx
1
[root@vhost-xiaoshancun ~]# docker run --name host1 --rm  -itd nginx
2
[root@vhost-xiaoshancun ~]# docker run --name host2  --network container:host1  --rm  -d nginx
修改docker bridge的IP地址
默认bridge的网段为172.16.0.0 网段,这个可以修改 ,方法为修改/etc/docker/deamon.json文件,添加如下内容
"bip":"10.0.0.1/16"    # 后面的IP和网段可以修改
1
"bip":"10.0.0.1/16"    # 后面的IP和网段可以修改
默认docker命令只能管理运行在本机的docker容器和image ,如果需要将本机的docker分享出来让其他管理器访问并维护管理的话可以修改本机的deamon.json文件 增加以下选项
"hosts":["tcp://192.168.1.2:2375","unix///var/run/docker.sock "]
1
"hosts":["tcp://192.168.1.2:2375","unix///var/run/docker.sock "]
远程服务器调用时使用 docker -H 192.16.1.2:2375 ps命令等

自定义网桥(软交换机)并配置使用
[root@vhost-xiaoshancun ~]# docker network create  -d bridge  --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0
docker run  --name host2  -it  --network mybr0   busybox
1
[root@vhost-xiaoshancun ~]# docker network create  -d bridge  --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0
2
docker run  --name host2  -it  --network mybr0   busybox
按说在同一主机上不同网段的docker是可以通信的,但实际上并没有通信

第六讲 06-Docker存储卷
docker在使用image启动docker时会自动在最上层添加一个读写层 ,叫“写时复制”
马哥-docker 10节课程笔记第4张
通常容器可当做一个进程使用,启动时创建,关闭时自动删除 ,也就是需要加 -rm参数
容器使用存储卷技术实现数据持久化存储 。 -V使用共享存储实现
常见的服务可以分成有状态的服务和无状态的服务两种,
  1. 有状态的服务: mysql、redis、tomcat 需要持久存储。
  2. 无状态的服务: nginx
docker volumn默认是使用宿主机的存储资源,但如果能结合共享存储的话会实现随意部署 存在的意义
  1. 实现了运行运行基础 image和 volumn ,实现了volumn重用
  2. 实现了容器和 volumn的分离, 可以让容器部署在任意的主机,不在和某一台主机绑定 为云计算和资源编排打下良好基础;
docker有两种volume
  1. bind container volumn 即需要手工指定宿主机和容器内目录的绑定关系
  2. docker manger volumn 不需要特别指定绑定关系,而由docker管理,一般绑定的目录为 /var/lib/docker/volumes/contanier id目录下
实例操作
docker mangager管理方式 此方式创建的文件会在容器删除后自动删除,不能实现真正的持久化
[root@vhost-xiaoshancun ~]# docker  run  --name  node1  --rm -itd -v /data  busybox
容器内的/data挂载到了宿主机的 /var/lib/docker/volumes/ca6b361b2398ceb7f11eb2ab131d1f58a52040c18f38f478e0d135e7613b81c2/_data
宿主主内外都可以修改  注意 dockerid目录会在docker删除后会自动删除  
[root@vhost-xiaoshancun _data]# docker inspect  node1   #查看node1的配置 mount环节 可以看到mount类型为volume 


        "Mounts": [
            {
                "Type": "volume",
                "Name": "ca6b361b2398ceb7f11eb2ab131d1f58a52040c18f38f478e0d135e7613b81c2",
                "Source": "/var/lib/docker/volumes/ca6b361b2398ceb7f11eb2ab131d1f58a52040c18f38f478e0d135e7613b81c2/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }


            
1
[root@vhost-xiaoshancun ~]# docker  run  --name  node1  --rm -itd -v /data  busybox
2
容器内的/data挂载到了宿主机的 /var/lib/docker/volumes/ca6b361b2398ceb7f11eb2ab131d1f58a52040c18f38f478e0d135e7613b81c2/_data
3
宿主主内外都可以修改  注意 dockerid目录会在docker删除后会自动删除  
4
[root@vhost-xiaoshancun _data]# docker inspect  node1   #查看node1的配置 mount环节 可以看到mount类型为volume 
5
6
7
        "Mounts": [
8
            {
9
                "Type": "volume",
10
                "Name": "ca6b361b2398ceb7f11eb2ab131d1f58a52040c18f38f478e0d135e7613b81c2",
11
                "Source": "/var/lib/docker/volumes/ca6b361b2398ceb7f11eb2ab131d1f58a52040c18f38f478e0d135e7613b81c2/_data",
12
                "Destination": "/data",
13
                "Driver": "local",
14
                "Mode": "",
15
                "RW": true,
16
                "Propagation": ""
17
            }
18
19
20
            
bind方式创建的目录在容器删除后依旧可以实现持久化存储,不会删除或灭失
绑定时指定的宿主机目录不需要事先创建,会在启动container时自动建立
[root@vhost-xiaoshancun ~]# docker  run  --name  node1  --rm -itd -v /dockers/volumen/node1:/data  busybox

在宿主机的/dockers/volumen/node 中修改增加的文件会在容器中体现  ,相反一致 
[root@vhost-xiaoshancun _data]# docker inspect  node1   #查看node1的配置 mount环节 可以看到mount类型为bind 
"Mounts": [
            {
                "Type": "bind",
                "Source": "/dockers/volumen/node1",
                "Destination": "/data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }

[root@vhost-xiaoshancun node1]# docker inspect  -f {{.Mounts}} node1 #只看某一段数据
 [{bind  /dockers/volumen/node1 /data   true rprivate}]
   
1
绑定时指定的宿主机目录不需要事先创建,会在启动container时自动建立
2
[root@vhost-xiaoshancun ~]# docker  run  --name  node1  --rm -itd -v /dockers/volumen/node1:/data  busybox
3
4
在宿主机的/dockers/volumen/node 中修改增加的文件会在容器中体现  ,相反一致 
5
[root@vhost-xiaoshancun _data]# docker inspect  node1   #查看node1的配置 mount环节 可以看到mount类型为bind 
6
"Mounts": [
7
            {
8
                "Type": "bind",
9
                "Source": "/dockers/volumen/node1",
10
                "Destination": "/data",
11
                "Mode": "",
12
                "RW": true,
13
                "Propagation": "rprivate"
14
            }
15
16
[root@vhost-xiaoshancun node1]# docker inspect  -f {{.Mounts}} node1 #只看某一段数据
17
 [{bind  /dockers/volumen/node1 /data   true rprivate}]
18
   
联合容器 共享同一组 net、IPC、mount
在单机中编排容器时,可以使用docker-compare软件(ebey阮一鸣也讲到了这个软件)
创建nginx1容器时,网络使用node1,存储设备也可以此用
[root@vhost-xiaoshancun ~]# docker run --name nginx1 --rm  --network container:node1  --volumes-from node1  nginx
1
[root@vhost-xiaoshancun ~]# docker run --name nginx1 --rm  --network container:node1  --volumes-from node1  nginx
第七讲:dockerfile文件详解

dockerfile文件 是一个基于image文件生成container文件的一个描述文件,加载了能够生成container时需要用到的source code
dockfile文件中应该包含的内容及举例子
  • 样式是LABEL <key>=<value>
  • 使用LABEL标签将元数据添加到image中
  • 一个image可以有多个key-value键值对
  • add宿主机的tar.gz文件到容器中时,相当于执行了 -x -C指令,解压并放到指定的目录中
  • add一个url(非宿主机)的tar.gz文件到容器中时,只是添加了文件,并不会解压
  • ENV指令 用于在编译image和生成容器RUN时使用的环境变量,一次定义,两次都可直接使用。
  • RUN 用于编译新的image时执行的命令 CMD执令是用户基于新的image生成container时使用的命令
  • EXPOSE 暴露出容器对外服务的端口 ,可一次性提供多个端口 在宿主机上绑定时还需要使用-P指令 双向暴露才会真正提供服务
  • WORKDIR 指定容器内的当前工作目录
docker build  -t xiaoshancun/httpd:V0.1-10  .  #编译生成新的image文件
1
docker build  -t xiaoshancun/httpd:V0.1-10  .  #编译生成新的image文件

 docker run --name httpd1  --rm  xiaoshancun/httpd:V0.1-7 /bin/httpd -f -h /usr/local/html/ #启动一个带端口的http服务
[root@vhost-xiaoshancun Docker_dockfile]# docker run --name httpd1  --rm -P  xiaoshancun/httpd:V0.1-7 /bin/httpd -f -h /usr/local/html
[root@vhost-xiaoshancun Docker_dockfile]# docker port httpd1    #可以看出已经暴露了端口
80/tcp -> 0.0.0.0:32769      
1
 docker run --name httpd1  --rm  xiaoshancun/httpd:V0.1-7 /bin/httpd -f -h /usr/local/html/ #启动一个带端口的http服务
2
[root@vhost-xiaoshancun Docker_dockfile]# docker run --name httpd1  --rm -P  xiaoshancun/httpd:V0.1-7 /bin/httpd -f -h /usr/local/html
3
[root@vhost-xiaoshancun Docker_dockfile]# docker port httpd1    #可以看出已经暴露了端口
4
80/tcp -> 0.0.0.0:32769      


以下示例Dockerfile文件中常用的一些参数, 已经测试过可以正常使用 对应上面所说的各种情况,可配合使用
# Dockerfile文件示例
FROM busybox:latest
MAINTAINER "likaifeng<likaifeng@126.com>"
ENV DOC_ROOT="/usr/local/html/" 
                NGINX_VERSION="nginx-1.16.1"
COPY index.html ${DOC_ROOT:-/usr/local/html/}
COPY yum.repos.d /etc/yum.repos.d/
ADD http://nginx.org/download/nginx-1.16.1.tar.gz /usr/local/src/
WORKDIR /usr/local/src/
#ADD nginx-1.16.1.tar.gz ./
RUN cd /usr/local/src/ && 
        tar -xzvf nginx-1.16.1.tar.gz
VOLUME /data/mysql/
EXPOSE 80/tcp
1
# Dockerfile文件示例
2
FROM busybox:latest
3
MAINTAINER "likaifeng<likaifeng@126.com>"
4
ENV DOC_ROOT="/usr/local/html/" 
5
                NGINX_VERSION="nginx-1.16.1"
6
COPY index.html ${DOC_ROOT:-/usr/local/html/}
7
COPY yum.repos.d /etc/yum.repos.d/
8
ADD http://nginx.org/download/nginx-1.16.1.tar.gz /usr/local/src/
9
WORKDIR /usr/local/src/
10
#ADD nginx-1.16.1.tar.gz ./
11
RUN cd /usr/local/src/ && 
12
        tar -xzvf nginx-1.16.1.tar.gz
13
VOLUME /data/mysql/
14
EXPOSE 80/tcp
第八节 : Dockerfile详解2
进程运行的几种方式
#COMMAND    #运行在当前shell之下的一个子进程
#COMMAND  & #放到当前shell之下的一个后台子进程 ,shell中不能这样写
#nohub  command &  #由当前shell生成一个子进程,但不把依赖关系放给init使用  shell关闭后command进程不会终止
1
#COMMAND    #运行在当前shell之下的一个子进程
2
#COMMAND  & #放到当前shell之下的一个后台子进程 ,shell中不能这样写
3
#nohub  command &  #由当前shell生成一个子进程,但不把依赖关系放给init使用  shell关闭后command进程不会终止
docker运行时可以给出多个cmd指令,但只运行最后一个
马哥-docker 10节课程笔记第5张

在使用docker run时使用-e参数可传入ENV参数
dockerfile文件中的指令学习
  • ARGS 在docker build过程中定义变量
  • ENTRYPOINT指令 为系统服务提供参数 ,本身仅提供参数 默认为/bin/bash -c 来运行
  • HEALTHCHECK 容器服务状态监测
  • ONBUILD在dockfile中定义触发器 在这里定义的ONBUILD指令本次不运行,仅在以后别人引用本image时才会触发。 不能嵌套,可以任意指令,但接add,或 copy时需注意是否有源文件
  • USER 容器中使用指定的用户身份来运行
docker启动时及以后需要进行生命检测 HEALTHCHECK
以下为相关参数
  • --interval 默认30S 监测间隔时间
  • --timeout默认30S 超时时间
  • --start-period = 默认0s 从docker启动完成后多长时间开始检测服务是否正常
  • resered 当监测失败后重试次数 默认为3次
状态码 :
0 :监测成功 1:生命值状态异常 2 resered
信号值 stop 指令是 9 kill信号值为 15
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX
1
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
2
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
3
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
4
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
5
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
6
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
7
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
8
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
9
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
10
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
11
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
12
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
13
63) SIGRTMAX-1  64) SIGRTMAX
docker官方有entruypoint.sh示例,可以多阅读。理解docker运行原理
https://github.com/docker-library/docs
第九节 :使用Harbour 构建docker私有仓库
实际使用docker时由于需要广泛部署docker,并不在一台主机上,所以需要使用私有repo
(需要补充查看)

第十节: Docker的系统资源限制及验正
  1. 内存
默认情况下的容器可以无限制使用主机的CPU,MEMORY,BLOCK io资源,为了限制这一切行为,避免容器出现OOME(OUT OF MEMORY EXCEPTION)的情况,就需要对容器使用的 CPU,MEMORY,IO资源进行管理,而这一切是基于linux内核的capabilities功能

马哥-docker 10节课程笔记第6张
关于内存限制资源的使用说明
要想限制swap分区,必须要设置物理memory内存的大小; 设置swap分区和物理分区时应当遵守以上原则
--oom-kill-disable 选项 意思是当系统发行oom时是否将此容器kill掉 ,如果这个容器很重要的话要设置成 True

  1. CPU资源
进程是有优先级的 调度优先级 1-99 20- -12 详细材料

测试
[root@vhost-xiaoshancun ~]# docker run --name stress  --rm  -m 512MB -it lorel/docker-stress-ng stree --vm 3 
限制docker使用512MB内存,使用测试程序进行性能测试,启动vm * 2  单个vm为 256MB 已超过设置,但查看设置时并为超过使用限制
[root@vhost-xiaoshancun ~]# docker stats stress 

ONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
6a527d8cc34b        stress              252.00%             512MiB / 512MiB     100.00%             586B / 0B           1.59GB / 2.15GB     7
1
[root@vhost-xiaoshancun ~]# docker run --name stress  --rm  -m 512MB -it lorel/docker-stress-ng stree --vm 3 
2
限制docker使用512MB内存,使用测试程序进行性能测试,启动vm * 2  单个vm为 256MB 已超过设置,但查看设置时并为超过使用限制
3
[root@vhost-xiaoshancun ~]# docker stats stress 
4
5
ONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
6
6a527d8cc34b        stress              252.00%             512MiB / 512MiB     100.00%             586B / 0B           1.59GB / 2.15GB     7

[root@vhost-xiaoshancun ~]# docker run --name stress  --rm  --cpus 2 -it lorel/docker-stress-ng stree --cpu 3 
1
[root@vhost-xiaoshancun ~]# docker run --name stress  --rm  --cpus 2 -it lorel/docker-stress-ng stree --cpu 3 
2
问题集:
1、既然docker客户机和共享宿主机内核的,那么在linux上能运行windows的的docker吗?或者反过来可以操作吗?
现在好像可以了,以前的版本不行 ,不可以,在linux平台上下载windows的服务,如IIS时,会提示“no matching manifest for linux/amd64 in the manifest list entries”
2、在一台虚拟机上创建两个docker container ,使用不同的网段,如何让他能够互联互通?

3、在dockerfile文件中定义的maintanier项目编译完成后,应该使用那种命令或在那里查看maintainer ?
[root@vhost-xiaoshancun Docker_dockfile]# docker image inspect nginx:latest  
1
[root@vhost-xiaoshancun Docker_dockfile]# docker image inspect nginx:latest  
4、限制docker的CPU,MEMROY消费需要基于linux kernel那么,是不是运行在windows环境的docker就无法限制资源使用情况了?


来自为知笔记(Wiz)

免责声明:文章转载自《马哥-docker 10节课程笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android环境配置和移动自动化(Genymotion)相关配置JAVA实现https单向认证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker Swarm volume 数据持久化

Docker Swarm volume 数据持久化 volume 是将宿主级的目录映射到容器中,以实现数据持久化。 可以用两种方式来实现: volume 默认模式:工作节点宿主机数据同步到容器内。 volume NFS 共享存储模式:管理节点宿主同步到工作节点宿主,工作节点宿主同步到容器。 环境: 系统:Centos 7.4 x64 应用版本:Doc...

Docker 创建 mongo 容器

一、1、直接获取 docker 认证 mongo 镜像: docker pull mongo 2、创建运行 mongo 容器: docker run -d -it -p 127:27017 --name mongo3 -m 512M -v /data/docker-file/mongo3/db3:/data/db docker.io/mongo -p  ...

DOCKER 从入门到放弃(二)

搜索镜像 从docker官方镜像仓库搜索镜像 docker search [OPTIONS] TERM OPTIONS: --automated :只显示自动创建的镜像,默认值为fasle --filter,-f :显示过滤后的搜索结果 --limit :显示的最大搜索结果,默认值为25 --no-trunc : 显示完整的镜像描述,默认值为fasle...

几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果。虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合项目的特点来选择某个合适的微服务架构平台,以此稳妥地实施项目的微服务化改造或开发进程。本文选自《架构解密:从分布式到微服务》一书,了解本书详情请点击阅读原文。...

docker安装启动、配置MySql

1、安装mysql镜像 docker pull mysql/mysql-server 2、docker中启动Mysql容器 docker run --name mysql01 -d -p 3306:3306 mysql/mysql-server 启动后执行: docker ps 通过以下命令查看root的password docker logs...

使用docker搭建nfs实现容器间共享文件

首先介绍下今天的两个主角:nfs和docker nfs 是什么 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。 摘自百度百科 docker...