Docker 数据管理与网络通信

  • 提取码:8qf2

安装 Docker 服务:

[root@Docker ~]# ls

anaconda-ks.cfg centos7 docker-18.03.1-ce.tgz

[root@Docker ~]# tar xf docker-18.03.1-ce.tgz

[root@Docker ~]# cp docker/* /usr/bin/

[root@Docker ~]# dockerd &

在这里插入图片描述

载入 centos7 镜像:

[root@Docker ~]# docker load < centos7

f972d139738d: Loading layer 208.8MB/208.8MB

Loaded image: centos:latest

一、Docker 镜像的创建

=================================================================================

Docker 镜像除了是 Docker 的核心技术之外也是应用发布的标准格式。一个完整的 Docker 镜像可以支撑一个 Docker 容器的运行。

  • 创建镜像的三种方法:基于已有镜像创建、基于本地模板创建、基于 Dockerfile 创建。

1.基于已有镜像创建


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

  • 命令格式:docker commit [选项] 容器ID/名称 仓库名称:[标签]

常用选项:

  • -m:说明信息

  • -a:作者信息

  • -p:生成过程中停止容器的运行

1)创建一个容器,并启用

[root@Docker ~]# docker create -it --name www centos:latest /bin/bash

[root@Docker ~]# docker start www

[root@Docker ~]# docker ps | grep www #如果不显示表示没有启动成功

在这里插入图片描述

2)使用 docker commit 命令创建一个新的镜像

[root@Docker ~]# docker commit -m “Hello” -a “zhangsan” www docker:mycentos

[root@Docker ~]# docker images | grep docker

在这里插入图片描述

2.基于本地模板创建


  • 通过导入操作系统模块文件可以生成镜像,模板可以从 OPENVZ 开源项目 下载。

下面介绍的是 ubuntu 模板压缩包,将下载好的压缩包拖入:

[root@Docker ~]# ls

anaconda-ks.cfg centos7 docker docker-18.03.1-ce.tgz ubuntu-12.04-x86-minimal.tar.gz

[root@Docker ~]# cat ubuntu-12.04-x86-minimal.tar.gz | docker import - ubuntu:v12

[root@Docker ~]# docker images | grep ubuntu

在这里插入图片描述

3.基于 Dockerfile 创建


Dockerfile 是由一组指令组成的文件,其中每条指令对应 Linux 中的一条命令,Docker 程序将读取 Dockerfile 中的指令生成指定镜像。Dockerfile 结构大致分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

Dockerfile 每行支持一条指令,每条指令可携带多个参数,支持使用以 # 号开头的注释。

在编写 Dockerfile 时,有严格的格式要遵循:

  1. 第一行必须使用 FROM 指令指明所基于的镜像;

  2. 之后使用 MAINTAINER 指令说明维护该镜像的作者信息;

  3. 然后是镜像操作相关指令,如 RUN 指令;

  4. 最后使用 CMD 指令来指定容器要运行的命令操作。

常用的 Dockerfile 操作指令:

| 指令 | 作用 |

| :-- | :-- |

| FROM 镜像 | 指定新镜像所基于的镜像,第一条指明必须为 FROM 指令,每创建一个镜像就需要一条 FROM 指令 |

| MAINTAINER 名字 | 作者信息 |

| RUN 命令 | 在所基于的镜像上执行命令,并提交到新的镜像中 |

| CMD [“要运行的程序”,“参数1”,“参数2”] | 启动容器时要运行的命令或者脚本,Dockerfile 只能有一条 CMD 命令,当有多条时,最后一条生效 |

| EXPOSE 端口号 | 指定新镜像加载到 Docker 时要开启的端口 |

| ENV 环境变量 变量值 | 配置镜像内的环境变量 |

| ADD 源文件/目录 目标文件/目录 | 将源文件复制到目标文件,源文件要与 Dockerfile 位于相同目录中,或者是一个 URL |

| COPY 源文件/目录 目标文件/目录 | 将本地主机上的源文件/目录复制到目标地点,源文件/目录要与 Dockerfile 在相同目录中 |

| VOLUME [" 目录 "] | 在容器中创建一个挂载点 |

| USER 用户名/UID | 指定运行容器时的用户 |

| WORKDIR 路径 | 为后续的 RUN、CMD、ENTRYPOINT 指定工作目录 |

| ONBUILD 命令 | 指定所生成的镜像作为一个基础镜像时所要运行的命令 |

1)创建 Apache 镜像

[root@Docker ~]# yum -y install httpd && systemctl start httpd

[root@Docker ~]# cd /var/www/html/

[root@Docker html]# mkdir centos7

[root@Docker html]# mount /dev/cdrom centos7/

使用浏览器访问测试:

在这里插入图片描述

2)建立工作目录

[root@Docker html]# cd /root/

[root@Docker ~]# mkdir apache

[root@Docker ~]# cd apache/

[root@Docker apache]# vim Dockerfile

基于 CentOS 基础镜像

FROM centos

作者信息

MAINTAINER The zhangsan

删除无用文件

RUN rm -rf /etc/yum.repos.d/*

上传新的文件到镜像目录 (这个 .repo 文件要和 Dockerfile 文件位于同一个目录)

ADD CentOS7.repo /etc/yum.repos.d/

安装 Apache 服务

RUN yum -y install httpd

开启 80 端口

EXPOSE 80

复制网址首页到镜像中

ADD index.html /var/www/html/

将启动脚本复制到镜像中

ADD run.sh /

RUN chmod 755 /run.sh

配置 Apache 服务开机自启

RUN systemctl enable httpd

启动容器时执行脚本

CMD [“/run.sh”]

3)创建 .repo 文件

[root@Docker apache]# cat < CentOS7.repo

[zhangsan]

name=zhangsan

baseurl=http://192.168.1.1/centos7

enabled=1

gpgcheck=0

END

在这里插入图片描述

4)编写执行脚本内容

[root@Docker apache]# vim run.sh

#!/bin/bash

rm -rf /run/httpd/* # 清理 HTTP 缓存

exec /usr/sbin/apachectl -D FOREGROUND # 启用 Apache 服务

5)创建测试页面

[root@Docker apache]# echo “This is beijing” > index.html

[root@Docker apache]# ls

CentOS7.repo Dockerfile index.html run.sh

在这里插入图片描述

6)使用 Dockerfile 生成镜像

  • -t 表示生成新的镜像 名字: 标签

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

[root@Docker apache]# docker images | grep httpd

在这里插入图片描述

7)使用新的镜像运行容器

[root@Docker ~]# docker run -d -p 888:80 --name mmm httpd:centos

[root@Docker ~]# docker ps | grep mmm

在这里插入图片描述

8)访问容器中的网页测试

在这里插入图片描述

二、Docker的数据管理

================================================================================

在Docker中,为了方便查看容器内产生的数据或者将多个容器中的数据实现共享,就是涉及到容器的数据管理操作。

  • 主要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volumes Containers)。

1.数据卷


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

1)创建数据卷

[root@Docker ~]# docker run -itd -v /data1 -v /data2 --name web1 centos:latest

[root@Docker ~]# docker ps | grep web1

[root@Docker ~]# docker exec -it web1 /bin/bash

[root@941a16b013ae /]# ls

在这里插入图片描述

  • 注意:上面这种创建方式只是创建数据卷,只可以实现宿主机的容量,给容器使用,还不可以实现数据通信。

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

  • 使用 -v 选项可以在创建数据卷同时,将宿主机的目录挂载到数据卷上使用,以实现宿主机与容器之间的数据迁移;

  • 宿主机的本地路径必须为绝对路径,如果路径不存在,则会在本地自动创建。

创建一个新的容器 web2 ,将宿主机的 /www 目录挂载到容器的 /data1 目录上:

[root@Docker ~]# docker run -itd -v /www:/data1 --name web2 centos:latest

[root@Docker ~]# docker ps | grep web2

在这里插入图片描述

在宿主机的 /www 的目录下,创建几个文件,并进入容器中查看:

[root@Docker ~]# cd /www/

[root@Docker www]# touch test{1…5}.txt

[root@Docker www]# ls

在这里插入图片描述

进入容器查看:

[root@Docker www]# docker exec -it web2 /bin/bash

[root@c2581b676431 /]# cd /data1/

[root@c2581b676431 data1]# ls

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

学习分享,共勉

这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!

资料整理不易,读者朋友可以转发分享下!

Java核心知识体系笔记.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

中高级Java开发面试高频考点题笔记300道.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

架构进阶面试专题及架构学习笔记脑图

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

Java架构进阶学习视频分享
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

学习分享,共勉

这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!

资料整理不易,读者朋友可以转发分享下!

Java核心知识体系笔记.pdf

[外链图片转存中…(img-Vuy5AV0C-1713823458342)]

中高级Java开发面试高频考点题笔记300道.pdf

[外链图片转存中…(img-XNKom9eh-1713823458343)]

架构进阶面试专题及架构学习笔记脑图

[外链图片转存中…(img-SYBqfWkb-1713823458343)]

Java架构进阶学习视频分享
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值