Docker数据管理与网络通信的使用

可以通过Dokcer核心及安装来安装Docker及简单操作。

一.Docker镜像的创建方法

Docker镜像除了是Docker的核心技术之外,也是应用发布的标准格式。一个 完整的Docker镜像可以支撑- -个Docker 容器的运行,在Docker的整个使用过程中,进入- -个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果要把已经安装的服务进行迁移,就需要把环境及搭建的服务生成新的镜像。

(1)基于已有镜像创建

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

命令格式如下:

docker commit 【选项】 容器ID/名称 仓库名称:【标签】

参数如下:

  • -m : 说明信息
  • -a : 作者信息
  • -p : 生成过程中停止镜像来创建新镜像

(1)先安装Docker,在创建个镜像

[root@localhost ~]# yum -y install docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# mount /dev/cdrom /media/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# cd /media/
[root@localhost media]# ls
apache-tomcat-8.5.16.tar.gz dhcp     jdk-8u91-linux-x64.tar.gz
centos            httpd     registry.tar.gz
centos6           httpd_centos ubuntu-12.04-x86_64-minimal.tar.gz
[root@localhost media]# docker load < dhcp \\zair载入镜像到本地
[root@localhost media]# docker images \\查看镜像
[root@localhost media]# docker create -it docker.io/networkboot/dhcpd /bin/bash  \\创建容器
dfbe3a15f462d82674cfdfe87dfb7c4b4b1dcf2267e5c0043510cbe10f11a65b
[root@localhost /]# docker ps -a \\查看容器
CONTAINER ID    IMAGE             COMMAND         CREATED       STATUS       PORTS        NAMES
dfbe3a15f462    docker.io/networkboot/dhcpd  "/entrypoint.sh /b..."  About a minute ago  Created                 determined_dubinsky
[root@localhost /]# docker start dfbe3a15f462 \\启动容器
dfbe3a15f462
[root@localhost /]# docker exec -it dfbe3a15f462 /bin/bash
root@dfbe3a15f462:/# touch 123 \\创建俩个文件
root@dfbe3a15f462:/# touch 456

(2) 启动一个镜像,在容器里做修改,然后将修改后的容器提交为新的镜像,需要记住该容器的D号,例如:

[root@localhost /]# docker ps -a
CONTAINER ID    IMAGE             COMMAND         CREATED       STATUS       PORTS        NAMES
dfbe3a15f462    docker.io/networkboot/dhcpd  "/entrypoint.sh /b..."  5 minutes ago    Up 2 minutes              determined_dubinsky

(3)使用dockercommit命令创建一个新镜像,如下:

[root@localhost /]# docker commit -m "newdhcp" -a "xws" dfbe3a15f462 docker:mydhcp
sha256:2c1acb192f78bbbb584fc52954a179eb0f10730e0cd58d120d952439ead45b00

(4)创建完成后.会返回新创建镜像的ID信息。查看本地镜像列表可以看到新创建的镜像信息:

[root@localhost /]# docker images
REPOSITORY          TAG         IMAGE ID      CREATED       SIZE
docker            mydhcp       2c1acb192f78    About a minute ago  125 MB
docker.io/networkboot/dhcpd  latest       6f98b6b9b486    19 months ago    125 MB

(2)基于本地模板创建

通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ 开源项目下载,下载地址为
http://openvz.org/Download/template/precreated.

用 命令下载如下

wget http://down1oad. openvz . org/ template/precreated/ubuntu-12.04-x86_ 64-minimal.tar.gz

(3)基于Dockerfile创建

除了手动生成Docker镜像之外,可以使用Dockerfile自动生成镜像。Dockerfile 是由-组指令组成的文件,其中每条指令对应Linux中的一条命令, Docker 程序将读取Dockerfile中的指令生成指定镜像。

Dockerfile结构大致分为4个部分:基础镜像信息、维护者信息.镜像操作指令和容器启动时执行指令

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

案例:使用Dockerfile创建镜像并在容器中运行

1.建立工作目录

[root@localhost /]# mkdir apache
[root@localhost /]# cd apache/

2.创建并编写Dockerfile文件

[root@localhost media]# docker load < centos  \\先把centos载入到本地
[root@localhost apache]# vim Dockerfile

FROM centos  \\基于centos基础镜像
MAINTAINER The Centos projier \\维护该镜像用户信息,后面随便写
RUN yum -y update  \\镜像操作指令安装apache软件包
RUN yum -y install httpd
EXPOSE 80  \\开启80端口
ADD index.html /var/www/html/index.html //复制网站首页文件
ADD run.sh /run.sh  //将执行脚本复制到镜像中
RUN chmod 775 /run.sh
RUN systemctl disable httpd  \\设置apache开启不启动
CMD 【“/run.sh”】  \\启动容器执行脚本

3.编写执行脚本内容

[root@localhost apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*             \\清理http的缓存
exec /usr/sbin/apachectl -D FOREGROUND  \\启动apache服务

4.创建测试页面

[root@localhost apache]# echo "asd" >index.html
[root@localhost apache]# ls
Dockerfile index.html run.sh

5.使用Dockerfile生成镜像

编写完成Dockerfile及相关内容之后,可以通过docker build 命令来创建镜像。

docker build 【选项】 路径

使用方才编写的dockerfile自动生成镜像

[root@localhost apache]# docker build -t httpd:centos .

在自动生成镜像的命令指定镜像后,一定不要忘记写新生成镜像的存放路径,也就是空格后的一个”."代表当前路径,否则会报错。

6.使用新的镜像运行容器

将新生成的镜像加载到容器中运行

[root@localhost /]# docker run -d -p 12345:80 httpd:centos

ee9adf324443b006ead23f2d9c71f86d1a4eb73358fb684ee3a2d058a0ac4243

[root@localhost apache]# docker ps -a

CONTAINER ID    IMAGE             COMMAND         CREATED       STATUS       PORTS          NAMES
99e9234cefe5    httpd:centos         "/run.sh"        8 seconds ago    Up 7 seconds    0.0.0.0:12345->80/tcp  youthful_lumiere
dfbe3a15f462    docker.io/networkboot/dhcpd  "/entrypoint.sh /b..."  56 minutes ago   Up 53 minutes                determined_dubinsky

//使用新生成的镜像加载到容器中运行
//“-p”选项实现从本地端口12345到容器中80端口的映射

用浏览器访问网页

二.Docker的数据管理

在Docker中,为了方便查看容器内产生的数据或者将多个容器之间的数据实现共享,会涉及容器的数据管理操作。管理Docker容器中的数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volumes Containers)。

(1)数据卷

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

1.创建数据卷

[root@localhost /]# docker run -d -v /data1 -v /data2 --name web httpd:centos
4944c63124d2f96bedd78b4016e6d96e464089626e97b913b06ec888e7ab8f65
[root@localhost /]# docker exec -it web /bin/bash \\进入容器可以看到已经和宿主机一样了
[root@4944c63124d2 /]# ls
anaconda-post.log boot  data2 etc  lib  media opt  root run.sh srv tmp var
bin        data1 dev  home lib64 mnt  proc run  sbin  sys usr
[root@4944c63124d2 /]# 

(2)挂载主机目录作为数据卷

例如

[root@localhost /]# docker run -d -v /var/www:/xws --name web-1 httpd:centos
05079057bf0c7c47b14fd457d1a5df0e29f080b6103753399654ef9d0aa4bf0f

中间:以前为宿主机的目录,后面为容器里的目录

[root@localhost /]# cd /var/www/
[root@localhost www]# touch asdasdasd
[root@localhost www]# ls
asdasdasd

进入容器里看一下

[root@localhost /]# docker exec -it web-1 /bin/bash
[root@05079057bf0c /]# ls
anaconda-post.log boot etc  lib  media opt  root run.sh srv tmp var
bin        dev  home lib64 mnt  proc run  sbin  sys usr xws
[root@05079057bf0c /]# cd xws
[root@05079057bf0c xws]# ls
asdasdasd

可以看到宿主机与容器共享

(2)数据卷容器

[root@localhost /]# docker run -it --volumes-from web --name 777 httpd:centos /bin/bash
[root@d6324596cb2c /]# cd data1
[root@d6324596cb2c data1]# touch file
[root@d6324596cb2c data1]# exit
exit
[root@localhost /]# docker exec -it web /bin/bash
[root@4944c63124d2 /]# ls
123        bin  data1 dev home lib64 mnt proc run   sbin sys usr
anaconda-post.log boot data2 etc lib  media opt root run.sh srv  tmp var
[root@4944c63124d2 /]# cd data1
[root@4944c63124d2 data1]# ls
file
[root@4944c63124d2 data1]# 

可以看到俩个容器共享

(3)Docker网络通信

Docker提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务。
实现端口映射,需要在运行docker run命令时使用-P (大写)选项实现随机映射,Docker 会随机映射一个端口范围在49000~ 49900的端口到容器内部开放的网络端口,

1.端口映射

[root@localhost /]# docker run -d -P httpd:centos
70762709d90a8365803b8b13be02e06e2f9c0b4fdb8624bad01d579817809
[root@localhost /]# docker ps -a
CONTAINER ID    IMAGE             COMMAND         CREATED       STATUS           PORTS          NAMES
70762709d90a    httpd:centos         "/run.sh"        5 seconds ago    Up 4 seconds        0.0.0.0:**32768**->80/tcp  kickass_bhaskara

可以看到端口变为32768

也可以指定端口

[root@localhost /]# docker run -d -p 123:80 httpd:centos
9c7b1b3989b30f44c22276a62674e565daf410e05bdf0b4892c09dca22662253

2.容器互联

容器互联是通过容器的名称在容器间建立一条 专门的网络通信隧道从而实现的互联。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息,在运行docker run 命令时使用--link选项实现容器之间的互联通信。
格式为:

--link name:alias \别名

创建源容器

[root@localhost /]# docker run -d -P --name web1 httpd:centos
0105f396c69b15557af4c15a62143872e725a28050075b554a4d2765a504d558

创建接收容器

使用docker run 命令建立容器B,-- -name指定名称为web2. --link 指定连接容器以实现容器互联。

[root@localhost /]# docker run -d -P --name web2 --link web1:web1 httpd:centos
10413ec7492d1d4bab724b4ecf2c2378dae6f496d14c2d68d27ee29b6a26bb1a

测试容器互联

[root@localhost /]#** docker exec -it web2 /bin/bash**
[root@10413ec7492d /]# **ping web1**
PING web1 (172.17.0.8) 56(84) bytes of data.
64 bytes from web1 (172.17.0.8): icmp_seq=1 ttl=64 time=0.153 ms
64 bytes from web1 (172.17.0.8): icmp_seq=2 ttl=64 time=0.063 ms
64 bytes from web1 (172.17.0.8): icmp_seq=3 ttl=64 time=0.064 ms
64 bytes from web1 (172.17.0.8): icmp_seq=4 ttl=64 time=0.074 ms
64 bytes from web1 (172.17.0.8): icmp_seq=5 ttl=64 time=0.065 ms
64 bytes from web1 (172.17.0.8): icmp_seq=6 ttl=64 time=0.065 ms

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker中容器数据卷(Data Volume)和数据管理详解

    卷(Volume) 众所周知卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必重新构建镜像. 一.数据卷 数据卷是一个可以绕过联合文件系统的,专门指定的可在一或多个容器间共享目录.卷为提供为持久化或共享数据提供了一些有用的特性. 数据卷设计的初哀是提供持久化数据,而与容器的生命周期无关.因此,在删除容器时,Docker不会自动删除卷,直到没有容器再

  • Docker 数据管理Named volume详解

    Docker数据管理:Named volume Docker中可以使用Named volume和data container来进行数据的管理. 单一Container的使用Helloworld Step 1:创建一个Named Volume 事前确认volume的信息,没有VOLUME存在 [root@host88 volumes]# docker volume ls DRIVER VOLUME NAME [root@host88 volumes]# 确认/var/lib/docker/volu

  • Docker 多主机网络通信详细介绍

    最近做项目是关于Docker 的网络通信,需要多个主机进行链接通信,这里记录下,以后便于项目开发,大家需要的话也可以看下,少走些弯路. Docker多主机网络通信详解              Docker支持多主机网络通信功能,可以通过命令行建立多主机通信网络.本文使用Docker machine和Consul服务发现工具来讲解这一点. 前提是需要先安装Docker工具箱. 1.Docker Multi-Host Networking 作为一个示例,我们会在VirtualBox虚拟机上使用do

  • 详解Docker数据管理(数据卷&数据卷容器)

    生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 1.数据卷(Data Volumes):容器内数据直接映射到本地主机环境:如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数据卷中. 2.数据卷容器(Data Volume Containers):使用特定容器维护数据卷.如何使用数据卷容器在容器和主机.容器和容器之间共享数据,并实现数据的备份和恢复. 数据卷 数据卷是一个可

  • docker部署Macvlan实现跨主机网络通信的实现

    基本概念: Macvlan工作原理: Macvlan是Linux内核支持的网络接口.要求的Linux内部版本是v3.9–3.19和4.0+:通过为物理网卡创建Macvlan子接口,允许一块物理网卡拥有多个独立的MAC地址和IP地址.虚拟出来的子接口将直接暴露在相邻物理网络中.从外部看来,就像是把网线隔开多股,分别接受了不同的主机上一样:物理网卡收到包后,会根据收到包的目的MAC地址判断这个包需要交给其中虚拟网卡. 当容器需要直连入物理网络时,可以使用Macvlan.Macvlan本身不创建网络,

  • 浅谈Docker基础之数据管理

    用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作.容器中管理数据主要有两种方式:数据卷(Data Volumes),数据卷容器(Data Volume Containers). 数据卷 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: 1.数据卷可以在容器之间共享和重用. 2.对数据卷的更改会立即生效. 3.对数据卷的更新不会影响镜像. 4.数据卷会一直

  • Docker基础学习之数据管理

    前言 docker容器中管理数据主要有两种方式,数据卷(Data Volumes)和数据卷容器(Data Volume Containers),下面我们详细介绍Docker中的数据管理,有需要的一起来学习学习吧. 数据卷 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用: 对数据卷的修改会立马有效: 对数据卷的更新,不会影响镜像: 卷会一直存在,直到没有容器使用. 数据卷的使用,类似于Linux下对目录或文件进行mount操作. 挂载本

  • Docker 教程之数据管理详细介绍

    Docker 数据管理 用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作.容器中管理数据主要有两种方式:数据卷(Data Volumes),数据卷容器(Data Volume Containers). 数据卷 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: 1.    数据卷可以在容器之间共享和重用. 2.    对数据卷的更改会立即生效. 3.   

  • Docker数据管理与网络通信的使用

    可以通过Dokcer核心及安装来安装Docker及简单操作. 一.Docker镜像的创建方法 Docker镜像除了是Docker的核心技术之外,也是应用发布的标准格式.一个 完整的Docker镜像可以支撑- -个Docker 容器的运行,在Docker的整个使用过程中,进入- -个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果要把已经安装的服务进行迁移,就需要把环境及搭建的服务生成新的镜像. (1)基于已有镜像创建 基于已有镜像创建主要使用docker c

  • 基于Python爬取51cto博客页面信息过程解析

    介绍 提到爬虫,互联网的朋友应该都不陌生,现在使用Python爬取网站数据是非常常见的手段,好多朋友都是爬取豆瓣信息为案例,我不想重复,就使用了爬取51cto博客网站信息为案例,这里以我的博客页面为教程,编写的Python代码! 实验环境 1.安装Python 3.7 2.安装requests, bs4模块 实验步骤 1.安装Python3.7环境 2.安装requests,bs4 模块 打开cmd,输入:pip install requests -i https://pypi.tuna.tsi

  • 详解 微信小程序开发框架(MINA)

    小程序MINA框架,及优点 MINA框架: 小程序使用的是MINA框架,目的是通过简单.高效的方式让开发者可以在微信中开发具有原生App体验的服务. MINA的核心是一个响应的数据绑定系统. 整个系统分为两块:视图层(view,描述语言wxml和wxss)和逻辑层(App Serice,基于 JavaScript).这可以让数据与视图非常简单的保持同步.当做数据修改时,只需要在逻辑层改数据,视图层就会做响应的更新.开发者只需要将页面路由.方法.生命周期函数注册进框架,其他的一切复杂的操作都将由框

随机推荐