千家信息网

Docker数据管理与网络通信

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,博文结构Docker镜像的创建方法Docker的数据管理Docker的网络通信可以通过Dokcer核心及安装来安装Docker及简单操作。一.Docker镜像的创建方法Docker镜像除了是Docke
千家信息网最后更新 2026年11月03日Docker数据管理与网络通信

博文结构
Docker镜像的创建方法
Docker的数据管理
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]# lsapache-tomcat-8.5.16.tar.gz  dhcp          jdk-8u91-linux-x64.tar.gzcentos                       httpd         registry.tar.gzcentos6                      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               NAMESdfbe3a15f462        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/bashroot@dfbe3a15f462:/# touch 123  \\创建俩个文件root@dfbe3a15f462:/# touch 456

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

[root@localhost /]# docker ps -aCONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMESdfbe3a15f462        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:mydhcpsha256:2c1acb192f78bbbb584fc52954a179eb0f10730e0cd58d120d952439ead45b00

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

[root@localhost /]# docker imagesREPOSITORY                    TAG                 IMAGE ID            CREATED              SIZEdocker                        mydhcp              2c1acb192f78        About a minute ago   125 MBdocker.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 DockerfileFROM centos   \\基于centos基础镜像MAINTAINER The Centos projier  \\维护该镜像用户信息,后面随便写RUN yum -y update   \\镜像操作指令安装apache软件包RUN yum -y install httpdEXPOSE 80   \\开启80端口ADD index.html /var/www/html/index.html  //复制网站首页文件ADD run.sh /run.sh   //将执行脚本复制到镜像中RUN chmod 775 /run.shRUN 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]# lsDockerfile  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:centosee9adf324443b006ead23f2d9c71f86d1a4eb73358fb684ee3a2d058a0ac4243[root@localhost apache]# docker ps -aCONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                   NAMES99e9234cefe5        httpd:centos                  "/run.sh"                8 seconds ago       Up 7 seconds        0.0.0.0:12345->80/tcp   youthful_lumieredfbe3a15f462        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:centos4944c63124d2f96bedd78b4016e6d96e464089626e97b913b06ec888e7ab8f65
[root@localhost /]# docker exec -it web /bin/bash  \\进入容器可以看到已经和宿主机一样了[root@4944c63124d2 /]# lsanaconda-post.log  boot   data2  etc   lib    media  opt   root  run.sh  srv  tmp  varbin                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:centos05079057bf0c7c47b14fd457d1a5df0e29f080b6103753399654ef9d0aa4bf0f

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

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

进入容器里看一下

[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  varbin                dev   home  lib64  mnt    proc  run   sbin    sys  usr  xws[root@05079057bf0c /]# cd xws[root@05079057bf0c xws]# lsasdasdasd

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

(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]# exitexit[root@localhost /]# docker exec -it web /bin/bash[root@4944c63124d2 /]# ls123                bin   data1  dev  home  lib64  mnt  proc  run     sbin  sys  usranaconda-post.log  boot  data2  etc  lib   media  opt  root  run.sh  srv   tmp  var[root@4944c63124d2 /]# cd data1[root@4944c63124d2 data1]# lsfile[root@4944c63124d2 data1]# 

可以看到俩个容器共享

(3)Docker网络通信

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

1.端口映射

[root@localhost /]# docker run -d -P httpd:centos70762709d90a8365803b8b13be02e06e2f9c0b4fdb8624bad01d579817809[root@localhost /]# docker ps -aCONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                     PORTS                   NAMES70762709d90a        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:centos9c7b1b3989b30f44c22276a62674e565daf410e05bdf0b4892c09dca22662253

2.容器互联

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

--link name:alias \别名

  • 创建源容器
[root@localhost /]# docker run -d -P --name web1 httpd:centos0105f396c69b15557af4c15a62143872e725a28050075b554a4d2765a504d558
  • 创建接收容器

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

[root@localhost /]# docker run -d -P --name web2 --link web1:web1 httpd:centos10413ec7492d1d4bab724b4ecf2c2378dae6f496d14c2d68d27ee29b6a26bb1a
  • 测试容器互联
[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 ms64 bytes from web1 (172.17.0.8): icmp_seq=2 ttl=64 time=0.063 ms64 bytes from web1 (172.17.0.8): icmp_seq=3 ttl=64 time=0.064 ms64 bytes from web1 (172.17.0.8): icmp_seq=4 ttl=64 time=0.074 ms64 bytes from web1 (172.17.0.8): icmp_seq=5 ttl=64 time=0.065 ms64 bytes from web1 (172.17.0.8): icmp_seq=6 ttl=64 time=0.065 ms
容器 镜像 数据 指令 命令 端口 运行 生成 信息 目录 互联 宿主 宿主机 网络 名称 文件 服务 管理 通信 之间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南云网互联网络科技有限公司 互联网科技深圳 互联网金融与金融科技 互联网科技论文 远拓互联网科技 天津摩尔互联网科技 互联网科技ppt模板 互联网女皇 腾讯科技 长亮科技 互联网金融 联恩商钥互联网科技有限公司 恒生科技互联网指数分析 厦门比较好的科技互联网公司 苏州五指互联网络科技有限 互联网科技创新的路径 特约风豹互联网科技为什么扣费 互联网时代的科技公司 领航科技大厦互联网公司 互联网风格科技公司名称 山东大美朱楼互联网科技有限公司 广西泛欧互联网科技有限公司 广州淘业互联网络科技 互联网科技工作委员会主任 互联网科技公司华为 互联网未来科技 深圳卡尔迅互联网科技有限公司怎么样 华中科技有哪些互联网大佬 昊天互联网科技有限公司 互联网科技创新的路径 互联网与数字科技关系 数字互联网科技有限公司
0