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

[经验分享] 【Docker篇之二】数据管理与网络通信

[复制链接]

尚未签到

发表于 2019-2-21 08:18:21 | 显示全部楼层 |阅读模式
  通过上一篇【Docker篇一】了解到Docker的三大核心概念:镜像、容器、仓库,以及镜像下载上传导入和导出操作,容器的创建以及启动,导入和导出。        
本篇将从如下三个方面详解如何灵活的构建自己的容器,实现这些容器中数据的迁移,以及怎么样实现从网络中访问容器中的数据。


  • 1)Docker镜像创建方法。
  • 2)Docker数据管理。
  • 3)Docker网络通信。

一、Docker镜像的创建方法

1、基于已有镜像创建


  • 基于已有镜像创建主要适用的是docker commit命令。实质就是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。

命令格式:docker commit [选项] 容器ID/名称 仓库名称[标签]
常用选项:
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行

  • 例:下面利用一个正在运行的docker容器,在该容器里修改完毕后打包成自己的镜像。

  docker images
docker create -it 11426a19f1a2 /bin/bash
docker ps -a
docker start 4212c3d37718
docker commit -m "new" -a "test" 4212c3d37718 httpd:test



2、基于本地模板创建


  • 通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载,下载地址为wget http://download.openvz.org/template/precreated
  • 下面是使用docker导入命令将下载debian模板压缩包导入本地镜像的例子。

  wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
cat debian-7.0-x86-minimal.tar.gz | docker import - zhangsan:new



3、基于Dockerfile创建(推荐)


  • 除了手动生成镜像之外,还可以使用Dockerfile自动生成镜像。
  • Dockerfile结构大致分为四个部分

  基础镜像信息      
维护者信息            
镜像操作指令      
容器启动时执行指令



  • Dockerfile操作指令如下图:



  •   如上图所示,编写Dockerfile时,有严格的格式需要遵循,第一行必须是FROM指令说明所基于的镜像名称,之后使用MAINTAINER指令说明维护该镜像的用户信息,然后是镜像操作相关指令,如RUN,每运行一条指令,都会给基础镜像添加新的一层,最后使用CMD指令,来指定启动容器时要运行的命令操作。

  • 例:利用Dockerfile创建httpd容器镜像,并且运行。

  mkdir  apache
cd  apach
vim Dockerfile     //注意名称必须是Dockerfile


#基于的基础镜像,若本地没有就会自动下载
FROM centos
#维护镜像的用户信息
MAINTAINER The porject
#镜像操作指令安装apache软件
RUN yum -y update            //初始化yum仓库
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件,将本地与Dockerfile同级目录下的index.html文件放入容器对应路径下,需手动创建
ADD index.html /var/www/html/index.html   
#将执行脚本复制到镜像中,此脚本为启动服务脚本,不存在,需要自己创建
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]

  • 创建首页目录

  echo "NEVER SAY NEVER !" > index.html



  • 创建服务启动脚本

  vim run.sh


#!/bin/bash
rm -rf /run/httpd/*     //初始化容器httpd服务,清楚缓存
exec /usr/sbin/apachectl -D FOREGROUND   //启动容器中httpd服务

  • 所有文件创建完毕后,在当前目录下执行命令,生成镜像。

  docker build -t httpd:centos .  //注意末尾有"."



  • 新镜像容器运行,将宿主机的端口映射到容器中80端口,-p为指定端口号,-P为随机映射,第一次开启端口为32768

  docker run -d -p 1216:80 httpd:centos  //镜像名称与标签同在生成镜像时设定




  • 注:如果运行容器时,提示:

  WARNING:IPv4 forwarding is disabled.Networking will not work.



  • 需要打开路由转发功能,然后运行容器即可。

  sysctl -w net.ipv4.ip_forward=1


二、私有仓库的建立


  •   当使用docker push命令上传时,默认上传到官方公共仓库,对于一些公共仓库里面的镜像无法了解详细情况下,我们们需要建立私有仓库,方便我们选择更加合适自己的容器镜像。

  • 首先需要在构建私有仓库的服务器上下载registry镜像。

  docker pull registry


Using default tag: latest
latest: Pulling from library/registry
4064ffdc82fe: Pull complete
c12c92d1c5a2: Pull complete
4fbc9b6835cc: Pull complete
765973b0f65f: Pull complete
3968771a7c3a: Pull complete
Digest: sha256:51bb55f23ef7e25ac9b8313b139a8dd45baa832943c8ad8f7da2ddad6355b3c8
Status: Downloaded newer image for registry:latest

  • 之后需要在/etc/docker/目录下创建一个json文件,否则往往在自定义的私有仓库中上传镜像时,就会报错。

  vim /etc/docker/deamon.json


{ "insecure-registries":["192.168.144.111:5000"]}    //指定私有仓库地址和端口号

  • 重启docker服务

  systemctl status docker.service



  • 然后使用下载好的registry镜像启动一个容器,默认情况下仓库存放于容器内的/tmp/registry目录下,使用-v选项可以将本地目录挂载到容器内的/tmp/registry下使用,这样就不怕容器被删除后镜像也会随着消失。

  docker create -it registry /bin/bash   //为registry镜像创建容器
  docker ps -a
docker start a1a68e5b9b6f  //启动registry镜像容器



  • 宿主机的/data/registry自动创建挂载容器中的/tmp/registry,当利用docker run命令时,宿主机中本不存在这个目录,也会自动创建。

  docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry



  • 将需要上传的镜像更改TAG,注意此处新镜像名称前必须加上私有仓库的地址与端口号

  docker tag zhangsan:new 192.168.144.111:5000/zhangsan



  • 将镜像上传到私有仓库

  docker push 192.168.144.111:5000/zhangsan




  • 获取私有仓库列表

  curl -XGET http://192.168.144.111:5000/v2/_catalog



三、Docker数据管理
  为了方便查看容器内产生的数据或者将多个容器中的数据实现共享,就涉及到容器的数据管理操作,管理Docker容器中数据主要有两种方式,数据卷和数据卷容器。

3.1、数据卷


  • 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移,数据卷的使用类似于在Linux下对目录进行的mount操作。

3.1.1、创建数据卷
  在docker run 命令中使用-v选项可以在容器内创建数据,多次使用,可创建多个数据卷,使用--name选项可以给容器创建一个友好的自定义名称。


  • 宿主机目录/var/www挂载到容器中的/data1

  docker run  -v /var/www:/data1 --name web1 -it centos /bin/bash



  [root@202dd484fd62 /]# cd /data1/
  [root@202dd484fd62 data1]# touch test123



  • 返回宿主机进行查看

  [root@localhost ~]# ls /var/www/



3.2、数据卷容器
  如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器,数据卷容器就是一个普通的容器,专门提供数据卷给其他容器挂载使用,使用方法如下:
首先需要创建一个容器作为数据卷容器,之后在其他容器创建使用时用--volumes-from挂载数据卷容器中的数据卷使用。


  • 创建数据卷容器

  docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash




  • 新容器挂载数据卷容器

  docker run -it --volumes-from web100 --name db1 centos /bin/bash





四、Docker网络通信

4.1、端口映射

  docker run -d -P httpd:centos
  docker run -d -p 49280:80 httpd:centos
  docker ps -a


6d461287c25d        httpd:centos        "/run.sh"           7 seconds ago        Up 7 seconds        0.0.0.0:49280->80/tcp   zen_swanson
4.2、容器互联

  docker run  -P --name web1 -it httpd:centos /bin/bash
  docker run  -P --name web2 --link web1:web1 -it httpd:centos /bin/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-675089-1-1.html 上篇帖子: docker数据管理与网络通信之数据卷与数据卷容器 下篇帖子: Docker(六)数据管理与网络通信
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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