Docker的实际应用

news2024/12/23 20:25:18

一、 数据持久化

我们什么情况下要做数据持久化呢? 一定是在做容器之前先预判好哪些文件是要永久存储的,
而不会跟着它容器的一个生命周期而消失。

比如说配置文件、 日志文件、 缓存文件或者应用数据等等。 数据初始化有三种类型。 第一种
volumes, 这个是最推荐的, 也是最好的一种方式。 第二种是 bind—mount, 第三种是 tmpfs。

方式一: volumes

是官方比较推荐也是大型的集群比较常见的一种方式。 可以理解为在自己的宿主机或者云端或者在某一个区域创建一块磁盘专门去存放容器里的数据或文件。 把这个容器里边的数据或者文件还有目录等都规划好, 再去启动容器。 正常在老一些的版本里边首先必须要去创建 volumes,否则是没有办法创建成功的。 新版本好像不写命令也可以创建成功, 具体可以查询官方关于 volumes 的文档

使用:

docker volume create test1
docker run -itd -p 8800:80 -v test1:/usr/share/nginx/html nginx:v1
创建: docker volume create
删除某个卷: docker volume rm 卷名
删除所有未使用的卷: docker volume prune
列出所有卷: docker volume ls
查看某个卷的信息: docker volume inspect 卷名
挂载到容器: -v 或–volume。 如果是 Docker17.06 或更高: 推荐使用–mount。 (同 bind mount)
挂载类型: key 为 type, value 为 bind、 volume 或 tmpfs
挂载源: key 为 source 或 src, 对于命名卷, value 为卷名, 对于匿名卷, 则忽略
容器中的挂载点: key 为 destination、 dst 或 target, value 为容器中的路径
读写类型: value 为 readonly, 没有 key
volume-opt 选项, 可以出现多次。 比如 volume-driver=local,volume-opt=type=nfs,…
第一个域: 对于命名卷, 为卷名; 匿名卷, 则忽略, 此时会创建匿名卷
第二个域: 容器中的挂载点
第三个域: 可选参数, 由’ ,'隔开, 如 ro
-v 或—volume: 由 3 个域组成, ’ :’ 分隔
—mount: 由多个’ ,’ 隔开的键值对组成

方式二: bind—mount

将宿主机中的文件、 目录 mount 到容器上。 质上是宿主机、 container 之间共享宿主机文件系
统。 这种持久化方法更导致 container 与宿主机的耦合过于紧密, 所以不推荐使用。

使用:

docker run -itd -p 8801:80 -v /var/log/cont/apache1:/var/log/httpd/
apache:new2
挂载到容器: -v 或—volume。 如果是 Docker17.06 或更高: 推荐使用—mount。 (同 volume
s)
-v 或–volume: 由 3 个域组成, ’ :'分隔
第一个域: 对于命名卷, 为卷名; 匿名卷, 则忽略, 此时会创建匿名卷
第二个域: 容器中的挂载点
第三个域: 可选参数, 由’ ,'隔开, 如 ro
–mount: 由多个’ ,'隔开的键值对=组成:
挂载类型: key 为 type, value 为 bind、 volume 或 tmpfs
挂载源: key 为 source 或 src, value 为主机中文件或目录的路径
容器中的挂载点: key 为 destination、 dst 或 target, value 为容器中的路径
读写类型: value 为 readonly, 没有 key
bind-propagation 选项: key 为 bind-propagation, value 为 rprivate、 private、 rshared、shared、 rslave 或 slave

方式三: tmpfs

将数据存于宿主机内存中。 docker 可将用户名与密码等敏感数据保存在某个数据库中, 当启动需要访问这些敏感数据的 container 或者 service 时, docker 会在宿主机上创建一个 tmpfs,然后将敏感数据从数据库读出写到 tmpfs 中, 再将 tmpfs mount 到 container 中, 安样能保证数据安全。 当容器停止运行时, 则相应的 tmpfs 也从系统中删除。

docker run -itd --name tmptest --tmpfs /root nginx:latest

案例一

1、查看 busybox 镜像,确保是官方镜像

[root@template ~]# docker search busybox

2、拉取并查看镜像

[root@template ~]# docker pull busybox
[root@template ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
busybox      latest    7cfbbec8963d   5 weeks ago   4.86MB
[root@template ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
busybox      latest    7cfbbec8963d   5 weeks ago   4.86MB

3、给镜像创建一个软链接并改名 box:v1 并检查是否成功

[root@template ~]# docker tag busybox:latest box:v1
[root@template ~]# docker tag busybox:latest box:v2
[root@template ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
box          v1        7cfbbec8963d   5 weeks ago   4.86MB
box          v2        7cfbbec8963d   5 weeks ago   4.86MB
busybox      latest    7cfbbec8963d   5 weeks ago   4.86MB

查看 ImageID,如果一样则软连接成功

4、删除 box:v2 镜像

[root@template ~]# docker rmi box:v2

至此, 第一个案例就此完成。

案例二

1、下载 centos:7 镜像。并用该镜像启动容器,命名为 centostest,暴露 6446

宿主机端口, 映射容器内 999 端口

[root@template ~]# docker run -it -d --name centostest -p 6449:999 centos:7

2、查看容器是否启动成功

[root@template ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
busybox      latest    7cfbbec8963d   5 weeks ago     4.86MB
centos       7         eeb6ee3f44bd   19 months ago   204MB
[root@template ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS                                     NAMES
d080931aaf96   centos:7   "/bin/bash"   28 seconds ago   Up 27 seconds   0.0.0.0:6449->999/tcp, :::6449->999/tcp   centostest

3、将宿主机/root/test.txt,复制到容器内/usr/local/

[root@template ~]# touch /root/test.txt
[root@template ~]# docker cp /root/test.txt centostest:/usr/local

4、进入容器查看是否cp过来

[root@template ~]# docker exec -it centostest /bin/bash
[root@d080931aaf96 /]# ll /usr/local/

5、再从该容器内的/root/study.txt 文件复制到宿主机/tmp

[root@d080931aaf96 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  study.txt  sys
[root@d080931aaf96 /]# exit
exit
[root@template ~]# docker cp centostest:/study.txt  /tmp
Successfully copied 1.536kB to /tmp
[root@template ~]# ll /tmp/
total 0
-rw-r--r--. 1 root root 0 Apr 25 20:58 study.txt

6、删除该容器前先停止容器

[root@template ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS                                     NAMES
d080931aaf96   centos:7   "/bin/bash"   11 minutes ago   Up 11 minutes   0.0.0.0:6449->999/tcp, :::6449->999/tcp   centostest
[root@template ~]# docker stop centostest
centostest
[root@template ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
busybox      latest    7cfbbec8963d   5 weeks ago     4.86MB
centos       7         eeb6ee3f44bd   19 months ago   204MB

7、删除容器和镜像

[root@template ~]# docker rmi centos:7
[root@template ~]# docker images
[root@template ~]# docker ps -a

Dockerfile

1.概述

dockerfile 可以理解为一个制作镜像的脚本, 但远没有脚本复杂。 他根据某种格式自定义内容,就可以快速创建出需求的镜像。

docker 容器启动的时候在最上层挂载了一个可写层, 比如说我在容器里面创建一个文件, 这个文件是存放在可写层的, 这时候容器要是销毁了, 那么我们对容器的一些写入操作也就没了,我这个文件也会随着容器销毁而销毁了, 我们要是想要保存我们对容器的一些写入操作的话,可以使用 commit 命令然后将容器制作成一个镜像, 这样下次 run 起来该镜像的时候, 我们之前的写入操作就还存在了。

除了使用 commit 方式制作镜像, 还有一种方式就是编写 Dockerfile 然后使用 build 命令来制作镜像了。

2.Dockerfile 的规则

格式:
指令建议要大写, 内容小写

执行顺序:
docker 是按照 Dockerfile 指令顺序依次执行的, 也就是说从上到下

3.指令

1) FROM: 底层镜像(如系统)
这个 FROM 指令是 dockerfile 的第一个指令, 然后指定了基础镜像, 后面的所有指令都是运行在该基础镜像环境上的 MAINTAINER 该指令是描述的维护者信息。底层的系统镜像用的是什么, 使用 from 指定, 绝大部分情况都用的底层有个系统或者基础的环境用的是什么, 对 docker 不熟练使用 centos 镜像即可。

2) RUN: 构建时容器内运行的命令。
RUN 指令用于在容器中执行命令。 我们常用来安装基础软件。
镜像安装软件依赖包都可以放在 run 中。

3) COPY: 复制 docker 目录中的文件到镜像中。
COPY 指令类似 ADD 指令, 但是 ADD 指令范围更广些, ADD 能够自动解压文件, 能够访问网络资源, 而 COPY 指令做不到。
非目录需要重新指定, 放在目录中非常便利, 属于好的一种习惯, 值得推荐使用目录。

4) ADD: 复制 docker 目录中的文件到镜像中。 (过程可以解压)
ADD 指令是用来将宿主机某个文件或目录放到(复制) 容器某个目录下面。
官方不推荐 ADD,高级复制功能, 需求不精准, 推荐使用 COPY。

5) EXPOSE: 声明开放端口。
EXPOSE 指令用于暴露容器里的端口, 我们在 3.5 里面演示过了, nginx 暴露的端口是 80, 但是启动容器的时候需要指定宿主机端口来映射你暴露的端口。 需要暴露多个端口的话可以使用
多个 EXPOSE, 也可以一个 EXPOSE 指令后面跟多个端口, 端口之间用空格隔开。声明不是变更, 变更使用-p 构建容器时候使用。

6) ENV: 设置环境变量。
ENV 指令是用于设置环境变量的 。
底层环境变量需要需提前设置。

7) CMD: 容器启动时执行的命令, 最多只能执行一条。
CMD 指令是你在容器启动的时候帮你运行的命令, 而 RUN 这个指令是构建镜像的时候帮你运行的命令。
容器启动时执行命令, 最多执行一条。

8) WORKDIR: 声明工作目录。 类似 cd。
WORKDIR 是指下面的指令都在 WORKDIR 指定目录下面工作, 这个与 linux 里面的 cd 差不多。
切换目录使用 WORKDIR。
做容器轻量级最好, 比较小就很好, 使用一条命令就不要使用两天命令。

dockerfile案例

1、用 dockerfile 创建并启动一个 centos 的 apache 镜像。 指定自定义内容

[root@template ~]# mkdir dockerfile
[root@template ~]# cd dockerfile/
[root@template dockerfile]# mkdir apache
[root@template dockerfile]# cd apache/
[root@template apache]# vim dockerfile
[root@template apache]#
[root@template apache]# echo "test page ..." >  index.html

[root@template apache]# cat dockerfile
FROM centos:7
RUN yum -y install httpd
EXPOSE 80
COPY index.html /usr/share/httpd/noindex/index.html
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

2、构建镜像

[root@template apache]# docker build -t apache:v1 .

3、测试

[root@template apache]# docker run  -it -d --name web1 -p345:80  apache:v1
ee9f31c43a84190d3db5dd85d6d53e799c16224eab5ea18ecabc96c411cc4e71
[root@template apache]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                 NAMES
ee9f31c43a84   apache:v1   "/usr/sbin/httpd -D …"   6 seconds ago   Up 6 seconds   0.0.0.0:345->80/tcp, :::345->80/tcp   web1

4、浏览器测试

5、用 dockerfile 创建并启动一个 centos7 的 nginx 镜像

[root@template apache]# cat dockerfile
FROM centos:7
RUN rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum -y install nginx
EXPOSE 80
CMD ["nginx","-g","daemon off;"]
[root@template apache]# docker build -t nginx:v1 .
[root@template apache]# docker run  -itd --name web2 -p 789:80 nginx

构建过程

测试截图

最后放平心态, 为自己赚一个好未来,准备秋招,好好沉淀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器缓存策略:强缓存和协商缓存

浏览器缓存:其实就是在本地使用的计算机中开辟一个内存区,同时也开辟一个硬盘区,作为数据传输的缓冲区,然后利用这个缓冲区来暂时保护用户以前访问的信息通常浏览器的缓存策略分为两种:强缓存和协商缓存,强…

Vmware 搭建 Bitnami GitLab CE

Vmware 搭建 Bitnami GitLab CE 下载 Bitnami GitLab CE导入到 Vmwaressh 登录到虚拟机获取 root 用户密码访问 GitLab CE关机命令扩展磁盘配置 tls 证书安装 GitLab Runner注册 GitLab Runner其他,配置 docker 信任自签名证书 下载 Bitnami GitLab CE 下载地址&am…

Photoshop如何使用基础功能?

文章目录 0.引言1.菜单栏2.工具箱 0.引言 笔者从开始科研时就接触过Photoshop(PS),这么多年一直用着感觉有些陌生,在每次使用PS时总感觉有些抵触,这状态说明还未入门。为了入门PS,笔者从头熟悉PS的菜单和工…

一文弄懂Jupyter的配置与使用(呕心沥血版)

Jupyter 是一个基于 Web 的交互式计算平台,使用户能够创建和共享文档,这些文档包含实时代码、方程式、可视化图表和解释文字。Jupyter 在数据分析领域被广泛应用,它提供了一个直观、交互式的操作界面,使得用户能够更容易地探索数据…

MybatisPlus入门和分页和条件查询里面的条件和null值的处理方式和查询投影和查询条件设置

MybatisPlus 简化了mybatis之前的在springboot整合MyBatis时需要自己写sql语句在接口中&#xff0c;现在只需要让接口继承BaseMapper<实体类>&#xff0c;然后在测试类中接口.增删改查方法&#xff08;&#xff09;即可 不用像springboot整合mybatis一样勾选spring web…

【Python】【进阶篇】9、Django路由系统精讲

目录 Django路由系统精讲1. Django 路由系统应用1&#xff09;配置第一个URL实现页面访问2&#xff09;正则与正则分组使用3&#xff09;正则捕获组使用 2. path()与re_path() Django路由系统精讲 在《URL是什么》一节中&#xff0c;我们对 URL 有了基本的认识&#xff0c;在本…

易基因:禾本科植物群落的病毒组丰度/组成与人为管理/植物多样性变化的相关性 | 宏病毒组

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 现代农业通过简化生态系统、引入新宿主物种和减少作物遗传多样性来影响植物病毒的出现。因此&#xff0c;更好理解农业生态中种植和未种植群落中的病毒分布&#xff0c;以及它们之间的病…

解析Mybaits核心配置文件属性

目录 1.environment 2.transactionManager 3.dataSource 4.peoperties 5.mapper 先来看看mybatis核心配置文件代码 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN&qu…

02- stable diffusion的基本使用

stable diffusion的基本使用 对应视频 https://www.bilibili.com/video/BV1Q14y1f7XJ/https://www.bilibili.com/video/BV1av4y1E74C/ 一、下载 1.1 官方github&#xff1a; 官方github&#xff1a; GitHub - Stability-AI/stablediffusion: High-Resolution Image Synth…

Linux进程命令

目录 前言 基本命令 PS命令 语法 字段解释 栗子 top命令 语法 参数解释 栗子 kill命令 语法 参数解释 栗子 前言 进程是正在执行的一个程序或命令&#xff0c;每一个进程都是一个运行的实体&#xff0c;都有自己的地 址空间&#xff0c;并占用一定的系统资源。 基本命…

滑动奇异频谱分析:数据驱动的非平稳信号分解工具(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

线程池四种拒绝机制 实现 及执行日志

目录 目录 目录 创建线程池 测试代码 运行线程 全量代码 日志 AbortPolicy 报出异常模式 DiscardPolicy 放弃机制啥也不处理 DiscardOldestPolicy 放弃机制&#xff0c;放弃列队最早进入的 CallerRunsPolicy 交给主线程执行 创建线程池 public static ExecutorServi…

这篇文带你从入门级开始学习网络安全—认识网络安全

随着网络安全被列为国家安全战略的一部分&#xff0c;这个曾经细分的领域发展提速了不少&#xff0c;除了一些传统安全厂商以外&#xff0c;一些互联网大厂也都纷纷加码了在这一块的投入&#xff0c;随之而来的吸引了越来越多的新鲜血液不断涌入。不同于Java、C/C等后端开发岗位…

【Vue】Vue 前端设计模式梳理

文章目录 一、什么是设计模式&#xff1f;二、设计几个原则三、常见的设计模式及实际案例【1】单例模式1. 什么是单例模式&#xff1f;2.Vue中的单例模式 【2】工厂模式1. 什么是工厂模式&#xff1f;2.Vue中的工厂模式 【3】策略模式1. 什么是策略模式&#xff1f;2.策略模式的…

2023年6月CDGP数据治理专家认证报名及费用

目前6月DAMA-CDGP数据治理认证考试开放报名地区有&#xff1a;北京、上海、广州、深圳、长沙、呼和浩特。 目前南京、济南、西安、杭州等地区还在接近开考人数中&#xff0c;打算参加6月考试的朋友们可以抓紧时间报名啦&#xff01;&#xff01;&#xff01; DAMA认证为数据管…

密码基础知识(3)---对称密码体制

目录 一、对称密码概念 二、别名 三、对称密码体制的优缺点&#xff1a; 1、对称密码体制的缺点&#xff1a; 2、对称密码体制的优点&#xff1a; 四、对称密码的分类 1、序列密码 2、分组密码 五、分组密码的分组模式 1、ECB模式:Electronic CodeBook mode(电子密码…

Node【Node.js 20】新特性

文章目录 &#x1f31f;前言&#x1f31f;Node.js 20: 一次重要的升级和改进&#x1f31f;Internationalization API Update&#x1f31f;端口管理器&#x1f31f;字符串处理&#x1f31f; 更好的调试工具&#x1f31f; Crypto模块的更新&#x1f31f;总结&#x1f31f;写在最后…

【unity项目实战】3DRPG游戏开发05——动画、画质优化和shader的使用

摄像机跟随 摄像机跟随人物的方法有很多,其他方法可以看完另一篇文章 unity控制摄像机跟随玩家三种办法 添加虚拟相机 设置宽容度,相机跟随就会有一个缓慢的跟随效果 设置相机高度,也可以ctrl+shift+f修改相机位置 希望看的是人物的中心,可以在人物内新建一个空子节点…

【算法与数据结构】6 学会对算法进行性能测试

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于算法与数据结构体系专栏,本专栏对于0基础者极为友好,欢迎与我一起完成算法与数据结构的从0到1的跨越 算法性能测试 一、前情回顾二、算法性能测试1.生成测试用例2.使用测…

“递归三要素”寻踪(浅析递归“精典”框架,领略递归优雅秀气;看到有“递归算法优化”的操作,余试剖之)

浅析递归“精典”框架&#xff0c;领略递归优雅秀气。看到有“递归算法优化”的操作&#xff0c;余试剖之。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是…