小阿轩yx-Docker 基本管理

news2024/9/20 22:28:04

小阿轩yx-Docker 基本管理

(镜像制作与管理)

Docker 镜像管理

  • Docker 镜像除了是 Docker 的核心技术,也是应用发布的标准格式
  • 一个完整的 Docker 镜像可以支撑一个 Docker 容器的运行
  • 进入容器之后最常见的操作就是在容器中安装应用服务

Docker 镜像结构

镜像

  • 不是一个单一的文件,而是有多层构成
  • 可以通过 docker history 命令查看镜像中各层内容及大小,每层对应着 Dockerfile 中的一条指令
  • 镜像默认存储在 /var/lib/docker/<stroage-driver>目录中
  • Docker 使用存储驱动管理镜像每层内容及可读写的容器层

Docker 镜像是分层的

有几条知识点非常重要

  • Dockerfile 中的每个指令都会创建一个新的镜像层
  • 镜像层将被缓存和复用
  • 当 Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效
  • 某一层的镜像缓存失效,它之后的镜像层缓存都会失效
  • 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件,只是这个文件在 Docker 容器中不可见了

Dockerfile 介绍

  • 是一种被 Docker 程序解释的脚本
  • 由多条的指令组成,每条指令对应 Linux 下面的一条命令
  • Docker 程序将这些 Dockerfile 指令翻译成真正的Linux命令
  • 有自己书写格式和支持的命令
  • Docker 程序解决这些命令间的依赖关系类似于 Makefile
  • Docker 程序将读取 Dockerfile,根据指令生成定制的镜像
  • 相比黑盒子,Docker 这种显而易见的脚本更容易被使用者接受,它明确表明镜像是怎么产生的
  • Dockerfile 当有定制额外需求时,只需在 Dockerfile 上添加或者修改指令,重新生成镜像

构建各类 Docker 镜像服务

案例环境

主机制作系统主机名/IP地址主要软件及版本
服务器CentOS7.9 x86-64localhost/192.168.10.101Docker-19.03.8

拓扑图原理

  • 通过 Dockerfile 创建常见应用镜像

案例需求

  • 基于容器(现有镜像)创建镜像
  • 基于模版创建镜像
  • 基于 Dockerfile 创建常用基础服务

案例实施

创建镜像三种方法

  • 基于已有镜像创建
  • 基于本地模版创建
  • 基于 Dockerfile 创建

基于现有镜像创建

  • 主要使用 docker commit 命令,即把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像

命令格式

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

首先将已有的镜像文件通过Xftp上传至服务器/root目录下

容器互联

创建源容器

[root@localhost ~]# docker run -dit --name web01 centos:7

查看状态

[root@localhost ~]# docker ps

创建接收容器

[root@localhost ~]# docker run -dit --name web02 --link web01:web01 centos:7

--link web1:web1

  • 冒号前的web1,是第一个需要链接的容器的名字
  • 冒号后的web1,是链接到第二个容器后,为第一个容器起的别名

登入 web02

[root@localhost ~]# docker exec -it web02 /bin/bash

测试容器互联

[root@2e1faafea0b /]# ping web01

用 cat 查看地址

[root@2e1faafea0b /]# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	web01 36411a49ce54
172.17.0.3	2e1faafea0b

测试IP互通

[root@2e1faafea0b /]# ping 172.17.0.6
容器间通信
[root@localhost ~]# docker network create mynet01
[root@localhost ~]# docker run -dit --name web03 centos:7
[root@localhost ~]# docker run -dit --name pc01 --net=my_net centos:7
[root@localhost ~]# docker run -dit --name pc02 --net=my_net centos:7
[root@localhost ~]# docker exec -it pc01 /bin/bash

测试IP互通并退出

[root@3427f15aa11f ~]# ping pc02
[root@3427f15aa11f ~]# exit

docker 的数据管理

创建数据卷

[root@localhost ~]# docker run -dit -v /data1 -v /data2 --name web04 centos:7

登入web04

[root@localhost ~]# docker exec -it web04 /bin/bash

进入 data 目录

[root@9a398d3ec1f3 /]# cd /data1
[root@9a398d3ec1f3 data1]# touch aaa
[root@9a398d3ec1f3 data1]# cd /data2
[root@9a398d3ec1f3 data2]# touch bbb
[root@9a398d3ec1f3 data2]# exit
exit

切换目录

[root@localhost ~]# cd /var/lib/docker
[root@localhost docker]# cd volumes/
[root@localhost ~]# cd 005a5d40b123f06c4aca36279942faa10268c1969e7c040e8afa4a6424636f87/
[root@localhost 005a5d40b123f06c4aca36279942faa10268c1969e7c040e8afa4a6424636f87/]# cd _data/
[root@localhost _data]# ls
bbb

数据卷容器

[root@localhost ~]# docker run -dit --volumes-from web04 --name web05 centos:7

创建容器

[root@localhost ~]# docker run -dit -v /aaa:/bbb --name web06 centos:7

/aaa:/bbb

  • 冒号前是docker主机上指定的目录
  • 冒号后是在容器内创建的卷

挂载主机目录作为数据卷

[root@localhost ~]# docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web07 httpd

浏览器访问网站

  • 192.168.10.101:8888

进入 data1 目录并创建链接

[root@localhost ~]# cd /data1
[root@localhost data1]# touch aaa

浏览器刷新页面

创建首页文件

[root@localhost data1]# echo aaa>index.html

再次刷新网页 

创建 nginx 容器

//将编辑好的nginx配置文件拷贝到/www/conf
[root@localhost ~]# mkdir -p /www/conf
//将网站代码拷贝到/www/html
[root@localhost ~]# mkdir -p /www/html

进入 conf 目录

[root@localhost ~]# cd /www/conf

将已有的 nginx.conf 配置文件上传至该目录下

切换至 html 目录下

[root@localhost conf]# cd ../html/

创建网页文件

[root@localhost html]# echo bbb>index.html

创建容器

[root@localhost conf]# docker run -d -p 9090:80 -v /www/conf/nginx.conf:/etc/nginx/conf.d/nginx.conf -v /www/html:/usr/share/nginx/html -v /www/nginx/log:/var/log/nginx --name web08 nginx /bin/bash -c "nginx"

如果 nginx 容器一直处于 Exited 的状态,就查看一下 nginx.conf 文件中有没有 daemon off; 的语句,没有就加上去

案例--构建 nginx 容器

拉取 centos 镜像

[root@localhost ~]# docker pull centos:7

创建 dockerfile 工作目录

[root@localhost ~]# mkdir nginx

进入 nginx 目录

[root@localhost ~]# cd nginx/

创建 dockerfile 文件

[root@localhost nginx]# vim dockerfile 
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://192.168.2.149/repo/CentOS-Base.repo
RUN curl -o /etc/yum.repos.d/epel.repo ftp://192.168.2.149/repo/epel.repo
RUN yum clean all

RUN yum -y install pcre-devel zlib-devel zlib gcc* make
ADD nginx-1.19.5.tar.gz /opt
WORKDIR /opt/nginx-1.19.5
RUN ./configure --prefix=/usr/local/nginx && make && make install
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
EXPOSE 80
EXPOSE 443
ADD run.sh /run.sh
RUN chmod +x /run.sh
CMD ["/run.sh"]

将 nginx-1.19.5.tar.gz 源码包上传至nginx目录下

再将已有 nginx.conf 配置文件上传至nginx目录下

修改 nginx.conf 配置文件

[root@localhost nginx]# vim nginx.conf
//在末尾添加
daemon off;

生成镜像

[root@localhost nginx]# docker build -t mynginx .

查看新生成的镜像

[root@localhost nginx]# docker images
REPOSITORY   TAG       IMAGE  ID        CREATED             SIZE
mynginx      latest    e8dc45ec9828     13  minutes ago     2.55GB

退出并运行容器

[root@localhost nginx]# cd
[root@localhost ~]# docker run -dit -p 8080:80 --name nginx01 mynginx

案例--构建 Tomcat 容器

创建工作目录

[root@localhost ~]# mkdir tomcat

进入 tomcat 目录

[root@localhost ~]# cd tomcat/

将 apache-tomcat-8.5.16.tar.gz 源码包和 jdk-8u91-linux-x64.tar.gz 源码包上传至tomcat目录下

创建 dockerfile 文件

[root@localhost tomcat]# vim dockerfile
FROM centos:7
ADD jdk-8u91-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_91
ENV JAVA_BIN /usr/local/jdk1.8.0_91
ENV JRE_HOME /usr/local/jdk1.8.0_91
ENV PATH $PATH:/usr/local/jdk1.8.0_91/bin:/usr/local/jdk1.8.0_91/jre/bin
ENV CLASSPATH /usr/local/jdk1.8.0_91/jre/bin

ADD apache-tomcat-8.5.16.tar.gz /
RUN mv /apache-tomcat-8.5.16 /usr/local/tomcat
EXPOSE 8080
EXPOSE 8009
ADD run.sh /run.sh
RUN chmod +x /run.sh
CMD ["/run.sh"]

创建运行脚本

[root@localhost tomcat]# vim run.sh 
#!/bin/bash
/usr/local/tomcat/bin/startup.sh
tailf /run

用 dockerfile 生成镜像

[root@localhost tomcat]# docker build -t mytomcat .

查看新生成的镜像

[root@localhost ~]# docker images
REPOSITORY      TAG        IMAGE    ID        CREATE            SIZE
mytomcat        latest     13396d0e0bcb       36 seconds ago    595MB

运行镜像

[root@localhost ~]# docker run -dit -p 8081 --name tomcat01 mytomcat

查看镜像状态

[root@localhost ~]# docker ps

小阿轩yx-Docker 基本管理

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

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

相关文章

Python绘图入门:使用Matplotlib绘制柱状图

Python绘图入门&#xff1a;使用Matplotlib绘制柱状图 柱状图是一种常见的数据可视化方式&#xff0c;能够直观地展示不同类别之间的数据差异。在Python中&#xff0c;Matplotlib是一个非常强大且灵活的绘图库&#xff0c;它不仅能绘制简单的图表&#xff0c;还能创建复杂的多…

importlib库介绍

importlib importlib 包的目的有两个。 一种是在 Python 源代码中提供 import 语句&#xff08;因此&#xff0c;通过扩展&#xff0c;import() 函数&#xff09;的实现。 这提供了 import 的实现&#xff0c;它可以移植到任何 Python 解释器。 这也提供了一种比 Python 以外…

【鸿蒙学习】使用HarmonyOS NEXT与Uniapp开发同一鸿蒙应用的区别及分析

随着鸿蒙操作系统的普及&#xff0c;开发者面临着多种开发工具的选择。本文将通过开发、部署、运行、使用四个方面&#xff0c;详细分析使用HarmonyOS NEXT与Uniapp开发同一鸿蒙应用的区别&#xff0c;为开发者提供参考。 一、引言 鸿蒙操作系统&#xff08;HarmonyOS&#xf…

拿到服务器做的事:自己写的最全的一个,方便后续使用

1、ssh密钥登录 1.1本机生成密钥 这里是windows的命令 1.2上传.pub文件到服务器端 服务器端的操作&#xff1a; 本机用记事本打开.pub文件&#xff0c;复制到服务器端 我这里是新建了一个hh文件&#xff0c;粘贴过去了 vim hh1.3密钥写入到密钥key文件中 cat hh >>…

【C语言初阶】C语言指针全攻略:解锁C语言深层奥秘的钥匙

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言操作符 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀指针 &#x1f4d2;1. 指针和指…

于博士Cadence视频教程学习笔记备忘

标签&#xff1a;PCB教程 PCB设计步骤 cadence教程 Allegro教程 以下是我学习该视频教程的笔记&#xff0c;记录下备忘&#xff0c;欢迎大家在此基础上完善&#xff0c;能回传我一份是最好了&#xff0c;先谢过。 备注&#xff1a; 1、未掌握即未进行操作 2、操作软件是15.…

【问题记录+总结】VS Code Tex Live 2024 Latex Workshop Springer模板----更新ing

目录 Summary 道阻且长 少即是多 兵马未动粮草先行 没有万能 和一劳永逸 具体问题具体分析 心态 Detail 1、关于模板[官网] 2、settings.json 3、虫和杀虫剂 4、擦 换成Tex Studio都好了。。。 Summary 道阻且长 某中意期刊&#xff0c;只有Latex。之前只简单用过…

VSCODE platformio ESP32-S3 内置 JTAG 接口断点单步调试笔记

ESP32 S3的两种JTAG调试方法 ESP32 S3的有两种JTAG调试方法&#xff0c;直接连接板子上的JTAG引脚进行调试&#xff0c;或者用ESP32-S3 内置 JTAG 接口进行调试&#xff0c;这些方法有助于开发者在开发过程中进行更深入的调试。 1、ESP32-S3 内置 JTAG 接口 使用 ESP32-S3 内…

第63期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

如何使用unittest和pytest进行python脚本的单元测试

1. 关于unittest和pytest unittest是python内置的支持单元测试的模块&#xff0c;他提供了核心类&#xff0c;TestCase&#xff0c;让单元测试 代码的编写不再是从0开始&#xff0c;不再是作坊式&#xff0c;而是标准化&#xff0c;模板化&#xff0c;工厂化。 pytest是第三方…

微软官方U盘制作工具重装Windows11系统教程

微软官方U盘制作工具重装Windows11系统教程 **注意&#xff1a;**在安装系统的过程中&#xff0c;有可能会因为操作失误造成硬盘原有数据丢失&#xff0c;建议大家要提前做好重要资料备份&#xff0c;避免出现无法挽回的损失。 ​ Windows 11 对于大部分用户而言是完全没有使用…

国产JS库(js-tool-big-box)7月度总结

js-tool-big-box开发已经有3个月了&#xff0c;团队内的小伙伴进行了热烈的讨论&#xff0c;持续做了功能迭代。小伙伴们也做了艰苦卓绝的文档分享&#xff0c;有纯功能分享类的&#xff0c;有带有小故事的&#xff0c;有朋友们利用自己独自网站分发分享的。7月份快要结束了&am…

【云原生】Pass容器研发基础——汇总篇

云原生基础汇总 系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了云计算学习的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;每个知识点的修正和深入主要参考各平台大佬的文章&#xff0c…

Backtrader 文档学习- 整体架构功能分析理解

Backtrader 文档学习- 架构功能分析理解 1. 概述 backtrader是一个用于开发和执行交易策略的Python框架。它提供了一套完整的工具和功能&#xff0c;使得用户可以方便地进行策略回测、实盘交易以及数据分析。 backtrader的入口为Cerebro类&#xff0c;该类将所有输入(Data F…

FPGA学习笔记-1 FPGA原理与开发流程

1 初识FPGA 文章目录 1 初识FPGA1.1 基本认知1.1.1 什么是FPGA&#xff1f;1.1.2 什么是HDL&#xff1f;什么是Verilog&#xff1f;1.1.3 硬件开发与软件开发1.1.4 FPGA与其他硬件的对比1.1.5 FPGA优势与局限性1.1.6 FPGA的应用1.1.7 FPGA的学习之路 1.2 FPGA开发流程1.2.1 一般…

【学习AI-相关路程-概念了解-基础概念-正负样本-模型-文件结尾-卷积-yolov8模型-概念学习】

【学习AI-相关路程-概念了解-基础概念-正负样本-模型-文件结尾-卷积-yolov8模型-概念学习】 1、前言2、了解正负样本1-定义2-正样本3-负样本4-举例 3、模型这个概念1- 模型的定义2- 模型的训练3- 模型的推理4- 模型的评估5- 模型的类型6- 常见的模型 4、以这样 .yaml 结尾文件是…

以太坊私有链 搭建及相关操作

文章目录 1、创建私有链1.1 创建配置文件1.2 初始化私有链1.3 启动私有链1.4 添加节点1.4.1 启动节点A1.4.2 启动节点B1.4.3 查看节点A信息1.4.4 节点B主动加入到节点A1.4.5 查看已连接的节点数1.4.6 查看其它节点信息2、以太坊挖矿相关操作2.1 查看账户2.2 创建账户2.3 查看账…

RUST实现远程操作电脑手机

简介&#xff1a; Rust Desk 是一个开源的远程桌面软件&#xff0c;能够完全替代向日葵和ToDesk的功能&#xff0c;包括电脑控制电脑、电脑控制手机、手机控制电脑等。它是完全免费的。 下载&#xff1a; 需要下载 Rust Desk 的服务端和客户端安装包。 安装&#xff1a; 服务…

PHP移动端商城分销全平台全端同步使用

&#x1f4f1;【掌中购物新纪元&#xff1a;探索移动端购物商城系统的无限魅力】&#x1f6cd;️ &#x1f680; 随时随地&#xff0c;购物自由新体验 在这个快节奏的时代&#xff0c;移动端购物商城系统彻底颠覆了传统购物方式&#xff0c;让消费者享受到了前所未有的便捷与…

探索RPA自动化流程机器人在财务领域的应用

随着科技的不断发展&#xff0c;企业对于流程自动化的需求日益增长。在此背景下&#xff0c;RPA机器人流程自动化技术应运而生&#xff0c;并在财务领域展现出强大的应用潜力。RPA能够模拟人类在计算机上的操作&#xff0c;自动化处理大量重复、繁琐的财务流程&#xff0c;为企…