设为首页 收藏本站
查看: 1588|回复: 0

[经验分享] Linux的企业

[复制链接]
发表于 2018-5-27 07:50:58 | 显示全部楼层 |阅读模式
  一.Docker
docker 是一个应用容器引擎,让开发者可以打包安装他们的应用,以及依赖包到一个可移植容器中去,然后发布到任何Linux容器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间没有任何接口。
基于go语言并遵循Apache2.0开源协议。
Docker面向对象
容器对象
镜像

  docker在本质上是一个附加系统使用文件系统的不同层构建一个应用层是有可能的
Docer实例是无状态的他们不应该承担任何交易数据,所有的数据应该保存在数据库服务器中。
Docker基于LXC的高级容器引擎,其隔离性主要来自于namespace
Docker所提供的功能:
1Images(镜像):Docker可以通过PullPush命令构建对象到服务中心
2Containers(容器):Docker可以通过Start/Stop命令管理容器的生命周期
3Logging(日志):Docker可以通过stdoutstderro捕获输出所有的容器内部信息
4Volumes(存储):Docker可以创建和管理容器的相关文件存储
5Networking(网络):Docker可以创建管理虚拟的接口和内部所有容器之间的网络桥接
5RPCDocker服务器提供允许外部程序去控制所有容器的行为的API
@http://www.docker.org.cn/docker/70.html
  
  首先在系统上安装docker服务,dockerrhel7.2系统上运行良好,在低版本的系统上有些问题。镜像去网上down
  镜像的创建和销毁:
查看本地镜像:docker images
查看本地镜像详情:docker inspect +镜像名称
导入本地镜像:docker load -i +镜像名称
导出本地镜像:docker save rhel >rhel.tar
更新本地镜像:docker commit  适用于对基础镜像做一些公共性的操作,然后重新打包。
删除本地镜像:docker rmi +镜像名称 前提:该镜像没有被占用

  容器的销毁和重建:
docker run -it --name vm1 +镜像名称 bash  交互式方法创建一个容器
rhel系列的容器创建必须要有bash
docker run -d --name vm1+镜像名称  后台运行一个容器。
docker ps -a 查看所有容器状态
docker pa 查看当前正在运行的容器状态
docker attach vm1 连接容器
docker logs vm1 查看容器指令输出 -f 可以实时查看
docker inspect vm1 查看容器详情
docker stats vm1 查看容器资源使用率(实时)
docker diff vm1 查看容器修改
docker run -d --name vm1 rhel7 bash -c "while true; do echo westos; sleep 1; done创建后台运行并执行指令的容器
docker stop vm1 停止容器
docker start vm1 启动容器
docker kill vm1 强制中止容器
docker restart vm1 重起容器
docker pause/unpause 暂停/恢复容器。
docker export vm1 > vm1.tar 导出容器
docker import vm1.tar image  导入容器为镜像image

docker数据卷管理:
docker run 在创建容器时使用 -v 参数可以挂载一个或多个数据卷到当前运行的容器中,-v
的作用是将宿主机上的目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共
享一个目录。
挂载数据卷到新创建的容器上:
# docker run -it --name westos -v /tmp/data1:/data1 -v /tmp/data2:/data2 rhel7 /bin/bash
-v 参数可以重复使用,挂载多个数据卷到容器中,冒号前面的是宿主机的目录(本地目录
不存在 docker 会自动创建),冒号后面的是容器中的挂载目录。
注:docker commit 时卷的数据不会被保存。
默认挂载可以读写数据卷,也可以只读挂载:
# docker run -it --name westos2 -v /tmp/data2:/data2:ro
rhel /bin/bash
挂载宿主机文件:
#
docker
run
-it
--name
westos3
/etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro rhel7 /bin/bash
-v
数据卷容器:
# docker create --name data -v /tmp/sharedata:/sharedata rhel7 /bin/true
# docker run -it --name vm1 --volumes-from data rhel7 /bin/bash
# docker run -it --name vm2 --volumes-from data rhel7 /bin/bash
# docker attach vm1
bash-4.2# cd /sharedata/
bash-4.2# touch vm1file
# docker attach vm2
bash-4.2# cd /sharedata/
bash-4.2# ls
passwd vm1file
bash-4.2# touch vm2file
[root@foundation0 ~]# ls /tmp/sharedata/
passwd vm1file vm2file
备份数据卷:  要预先封装tar 工具进去
# docker run --rm --volumes-from data -v /tmp/backup:/backup rhel7 tar cf
/sharedata    /backup/test.tar

Dockerfile编写:
首先对基础镜像操作:
bash-4.2# cat /etc/yum.repos.d/rhel7.repo
[rhel7.1]
name=rhel7.0
baseurl = http://172.25.254.33/rhel7.2
#baseurl=file:///var/www/html/rhel7.2
gpgcheck=0

   13  yum install -y iputils-20121221-7.el7.x86_64
   14  yum install -y net-tools-2.0-0.17.20131004git.el7.x86_64
   15  yum install -y procps-ng-3.3.10-3.el7.x86_64
   16  ps -ax
   17  yum install -y openssh-server openssh-clients
   18  yum install -y openssh-client
   19  yum install -y openssh-clients

  使用ctrl +p+q 退出。
  提交修改过的容器:并加上tag 后缀。
  [root@foundation33 ~]# docker commit vm1  rhel7:yum
  
  cat Dockerfile
  FROM rhel7:yum
  MAINTAINER gingko@qq.com
  ENV HOSTNAME server1
  EXPOSE  22
  RUN yum install -y openssh-server openssh-clients  && yum clean all
  RUN ssh-keygen -t   rsa -f /etc/ssh/ssh_host_rsa_key -q -N ""
  RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -q -N ""
  RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519 -q -N ""
  RUN echo root:westos|chpasswd
  CMD ["/usr/sbin/sshd","-D"]
  
  此时,在docker images 中可以发现该镜像。可以使用该镜像创建容器。
  

  
  二.安装docker
DSC0000.png

DSC0001.png

  ip:

DSC0002.png

  

  三.docker的使用
  1.加载镜像

DSC0003.png

  

  2.创建容器启动镜像

DSC0004.png

  

  3.保存

DSC0005.png

  

  4.查看容器

DSC0006.png

  

  5.删除容器

DSC0007.png

  

  6.加载一个小游戏

DSC0008.png

  查看地址

DSC0009.png

DSC00010.png

DSC00011.png

  

  网络访问

DSC00012.png

  

  创建8080映射到80端口,后台运行

DSC00013.png

DSC00014.png

DSC00015.png

  

DSC00016.png

DSC00017.png

  

  
  7.容器镜像里的数据与物理机共享
DSC00018.png

  

  

DSC00019.png

DSC00020.png

  

  8.镜像里的数据备份

DSC00021.png

  

  9.用容器部署nginx
DSC00022.png

  

  vim index.html

DSC00023.png

DSC00024.png

DSC00025.png

DSC00026.png

  10.Container 网络模式
  容器的四种网络模式:
bridge 桥接模式、host 模式、container 模式和 none 模式启动容器时可以使用 --net 参数指定,默认是桥接模式。


  (1) bridge 桥接模式下的 Docker Container 在使用时,并非为开发者包办了一切。最明显的是,
该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致
的结果是宿主机以外的世界不能直接和容器进行通信。虽然 NAT 模式经过中间处理实现了
这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器
内部服务的访问者需要使用服务发现获知服务的外部端口等。另外 NAT 模式由于是在三层
网络上的实现手段,故肯定会影响网络的传输效率。
  

  (2) host 模式是 bridge 桥接模式很好的补充。采用 host 模式的 Docker Container,可以直接使用
宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公
有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。当然,
有这样的方便,肯定会损失部分其他的特性,最明显的是 Docker Container 网络环境隔离性
的弱化,即容器不再拥有隔离、独立的网络栈。另外,使用 host 模式的 Docker Container 虽
然可以让容器内部的服务和传统情况无差别、无改造的使用,但是由于网络隔离性的弱
化,该容器会与宿主机共享竞争网络栈的使用;另外,容器内部将不再拥有所有的端口资
源,原因是部分端口资源已经被宿主机本身的服务占用,还有部分端口已经用以 bridge 网
络模式容器的端口映射。
  

  (3) Container 网络模式:
(1) 查找 other container(即需要被共享网络环境的容器)的网络 namespace;
(2) 将新创建的 Docker Container(也是需要共享其他网络的容器)的 namespace,使用
other container 的 namespace。
Docker Container 的 other container 网络模式,可以用来更好的服务于容器间的通信。
在这种模式下的 Docker Container 可以通过 localhost 来访问 namespace 下的其他容器,传输
效率较高。虽然多个容器共享网络环境,但是多个容器形成的整体依然与宿主机以及其他
容器形成网络隔离。另外,这种模式还节约了一定数量的网络资源。但是需要注意的是,
它并没有改善容器与宿主机以外世界通信的情况。
  

  (4) None 网络模式:
网络环境为 none,即不为 Docker Container 任何的网络环境。一旦 Docker Container 采用了
none 网络模式,那么容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。
可以说 none 模式为 Docker Container 做了极少的网络设定,但是俗话说得好“
少即是多”,在没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制
开发。这也恰巧体现了 Docker 设计理念的开放。
在 none 网络模式下分配固定 ip:
netns 是在 linux 中提供网络虚拟化的一个项目,使用 netns 网络空间虚拟化可以在本地虚拟
化出多个网络环境,目前 netns 在 lxc 容器中被用来为容器提供网络。
使用 netns 创建的网络空间独立于当前系统的网络空间,其中的网络设备以及 iptables 规则
等都是独立的,就好像进入了另外一个网络一样

  配置:
  使用loopback 网络设备,开启设备
DSC00027.png

  

  查看设备进程,修改网卡名称,在docker启动网卡
DSC00028.png

DSC00029.png

  

  局域网正常,添加网关,可以对外通信

DSC00030.png

DSC00031.png

  

  11.Dockerfile 编写介绍
  (1)安装docker,加载rhel7镜像,打开i该镜像,封装rhel7:v1镜像
  设置rhel7里的源
DSC00032.png

  安装封装前的常用工具

DSC00033.png

DSC00034.png

DSC00035.png

  

  提交封装好的镜像,版本为rhel:v1

DSC00036.png

  

  删除没用的容器vm1
DSC00037.png

  

  

  

  (2)容器间互联:创建Dockerfile
  mkdir /tmp/dockerfile
  cd /tmp/dockerfile
  vim index.html

DSC00038.png

  

  vim Dockerfile

DSC00039.png

  # vim Dcokerfile
FROM rhel7:yum
指定基础镜像
MAINTAINER yakexi007@westos.org
作者信息
ENV HOSTNAME server1
设置容器主机名
EXPOSE 80
暴露容器端口
RUN yum install -y httpd && yum clean all
镜像操作命令
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
镜像启动命令,默认只能启动一条。
  

  

  在rhel:v1的版本上创建rhel:v2,并自动安装启动相应的服务
DSC00040.png

DSC00041.png

  

  (2)启动rhel7:v2,端口正常

DSC00042.png

  打开网页测试,服务安装正常

DSC00043.png

  

  

  12. 容器互联ssh
  (1)配置Dockerfile,安装所需服务,修改ssh登陆密码

  

DSC00044.png

  

  (2)创建rhel:v3

DSC00045.png

DSC00046.png

  

  (3)用容器打开镜像rhel:v3,端口映射,服务正常
DSC00047.png

  
  (4)2222端口ssh登陆正常

DSC00048.png

  

  

  13.使用 Supervisord
CMD 如果只有一个命令,那如果我们需要运行多个服务怎么办呢?最好的办法是分别在不同的容器中运行,通过 link 进行连接,比如先前实验中用到的 web,app,db 容器。如果一定要在一个容器中运行多个服务可以考虑用 Supervisord 来进行进程管理,方式就是将多个启动命令放入到一个启动脚本中。
首先安装 Supervisord,添加下面内容到 Dockerfile:
  

  (1)份额古装rhel:v1镜像,在yum源中加入superisor插件
  

DSC00049.png

DSC00050.png

DSC00051.png

  

  (2)在/tmp/docker下修改Dockerfile文件、创建supervisord.conf文件和创建docker.repo文件
DSC00052.png

DSC00053.png

DSC00054.png

DSC00055.png

DSC00056.png

  

DSC00057.png

  

  (3)在rhel:v1基础上创建rhel:v2,并安装相关服务
DSC00058.png

DSC00059.png

  

  (4)测试ssh服务和httpd服务
  映射端口:httpd8080端口 ssh2222端口

DSC00060.png

DSC00061.png

  

DSC00062.png

  14.拉取别人创建好的镜像
  添加拉取地址

DSC00063.png

DSC00064.png

DSC00065.png

  

  
  15.docker安全
  
  设置特权级运行的容器:--privileged=true
有的时候我们需要容器具备更多的权限,比如操作内核模块,控制 swap 交换分区,挂载USB 磁盘,修改 MAC 地址等。
# docker run -it --name vm1 ubuntu bash
  # docker run -it --privileged=true --name vm1 ubuntu bash

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481579-1-1.html 上篇帖子: 创建带Tomcat服务的Centos Docker镜像 下篇帖子: centos 7 安装docker 并设置阿里云镜像仓库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表