docker使用日常总结

1.docker创建容器时,使用privileged

  1. 使container内的root拥有真正的root权限,否则只是外部的一个普通用户权限

  2. 可以看到很多host上的设备,并且可以执行mount 允许你在docker容器中启动docker容器

2.docker可以通过network create --subnet=10.0.0.0/16 mybridge创建网桥

3.docker每一次修改提交镜像时会添加一层镜像层

使用Dockerfile将安装、拷贝、环境变量配置等放在一个文件里创建镜像,可以大大优化空间。
以centos:7为基础镜像,其大小为207M。原来的镜像文件不断迭代,最终使用时有900M,通过Dockerfile优化,将所有安装和执行通过&&当做一条命令处理,可以见效为380M。并且通过Dockerfile进行团队合作更方便,不需要传递整个庞大的镜像。

4.docker如何获取宿主机的ip

可以将宿主机的ip写在dockerfile的ENV key=val里。这样生成的镜像里有包含主机ip或其他信息的环境变量。通过C函数可以获取值。

5.docker与宿主机以C/S模式通信时,容器作为客户端,容器目的ip应该为网桥在宿主机的虚拟网卡接口,而不是127.0.0.1或宿主机物理网卡的ip。

  1. 如果是127.0.0.1,发包是给容器自身的localhost;

  2. 如果是宿主机的物理网卡,那么宿主机接收到的源ip为容器的ip,会根据网段从与容器连接的虚拟网卡接口发回给容器,而容器监听的是宿主机物理网卡的ip,永远不会收到。会报ICMP端口不可达错误。

6.容器数据库可以通过端口映射暴露给宿主机,这样其他主机可以访问宿主机+映射端口访问容器数据库。

7.docker容器内的一个进程对应于宿主机器上的一个进程。

8.可以通过挂载宿主机的目录来实现多个容器共享相同的文件夹。

好处是:

  1. 可以将所有容器的日志文件集中化,方便监控和查询。
  2. 可以方便得共享文件,不需要将相同的数据在每一个容器里存储。在公共文件较大的情况下可以极大节省磁盘空间。

9.docker可以通过–ipc实现容器间共享内存。

docker run -d --ipc=shareable data-server
docker run -d --ipc=container:data-server data-client

默认每个容器有自己的ipc空间,可以在启动时设置一个容器的ipc可共享,其他容器共享该容器的ipc。这样基于system v的共享内存、消息队列和信号量是共享的。

10.docker可以通过挂载/dev/shm的方式来实现POSIX共享内存和信号量。

11.通过POSIX与System V结合使用。

  1. 不共享IPC,使用System V,可以实现多容器间的IPC通信隔离,从而实现进程间共享内存。不同进程互相隔离。
  2. 挂载/dev/shm,实现多容器间共享内存与信号量。
  3. 这样,容器内进程间与容器间均可以通过共享内存通信。 单一的使用System V或POSIX会导致不同容器使用相同的键,冲突。

12.docker容器与虚拟机有根本的区别。

  1. 不模拟完整的操作系统,使用容器封装需要的lib和app,直接运行在宿主机的内核上。
  2. 在宿主机上创建docker引擎,直接调用硬件资源,而不是虚拟化操作系统和硬件资源。
  3. docker守护进程替代了虚拟机的从操作系统,作为后台进程管理docker容器。
  4. 虚拟机用于隔离整个运行环境,docker用于隔离不同的应用。

13.虚拟机有如下缺点

  1. 资源占用多
  2. 冗余步骤多
  3. 启动慢

但是虚拟机的隔离性更好。在某些场景下需要使用虚拟机。
容器的优点:

  • 应用更快速的交付与部署
  • 便捷的升级与扩缩容
  • 容器化后测试环境高度一致
  • 高效的资源利用,内核级别的虚拟化,可以在一个物理机上允许很多容器实例,充分利用服务器资源

13.docker无法删除仍然有容器的镜像,需要将该镜像创建的容器删除后才可以删除该镜像。

14.两种方式修改原有镜像

方式一:创建容器,然后在容器里进行更新,然后提交镜像。 查看大小

# docker history centos:gstn0719 
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
286c6e4ad030        4 weeks ago         /bin/bash                                       12.6MB              
078e35b002ff        2 months ago        /bin/bash                                       162MB               
<missing>           3 months ago        /bin/bash                                       161MB               
<missing>           4 months ago        /bin/bash                                       162MB               
<missing>           4 months ago        /bin/bash                                       111MB               
<missing>           9 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           9 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           9 months ago        /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB 

由于每一次通过/bin/bash进入容器执行安装与拷贝的命令,多次迭代后,占用空间越来越大了。

方式二:通过Dockerfile,将原有镜像作为源,进行更新操作

[Dockerfile]
FROM centos:7
RUN yum install -y glibc.i686 libgcc_s.so.1 ld-liux.so.2 net-tools
[Dockerfile]
FROM centos:xxx
ENV HOSTIP="172.17.0.1"
COPY XXX /root/XXX
# docker build -t='xxx:xxx' .
Sending build context to Docker daemon   56.4MB
Step 1/3 : FROM centos:xxx
 ---> 377b764950aa
Step 2/3 : ENV HOSTIP="172.17.0.1"
 ---> Running in 7fd426e55d7e
Removing intermediate container 7fd426e55d7e
 ---> 6e27350a0a8e
Step 3/3 : COPY XXX /root/XXX
 ---> 286208e0dd8c
Successfully built 286208e0dd8c
Successfully tagged xxx:xxx

查看大小

# docker history xxx:xxx
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
286208e0dd8c        2 minutes ago       /bin/sh -c #(nop) COPY dir:c4736de2a88628a99…   12.4MB              
6e27350a0a8e        2 minutes ago       /bin/sh -c #(nop)  ENV HOSTIP=172.17.0.1        0B                  
377b764950aa        6 hours ago         /bin/sh -c yum install -y glibc.i686 libgcc_…   169MB               
8652b9f0cb4c        9 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           9 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           9 months ago        /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB       
# docker history centos:xxx
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
377b764950aa        6 hours ago         /bin/sh -c yum install -y glibc.i686 libgcc_…   169MB               
8652b9f0cb4c        9 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           9 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           9 months ago        /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB
  • centos:7为207M 使用Dockerfile生成的centos:xxx只添加了一层用于存放安装程序。
  • 考虑到安装耗时较大,因此以生成好的centos:xxx为基础镜像来生成实际使用的镜像。 xxx:xxx
  • 在centos:xxx基础上也只增加了一层,用于保存我们自己的可执行程序。以后更新程序的话只需要以centos:xxx为基础镜像添加新执行程序,不会因为每一次添加修改导致镜像变得越来越大。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值