Docker中级篇|深入探究Docker

简介: 深入探究Docker

Docker镜像理解

Docker镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件

Docker镜像加载原理

UnionFs:联合文件系统

UnionFs(联合文件系统):Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,UnionFs联合文件系统是Docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker镜像加载原理

Docker的镜像实际上由一层一层的UnionFs文件系统组成bootfs:主要包含 bootloader和 Kernel,bootloader主要是引导加 kernel,Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是bootfs,这一层与我们典型的Linux/Unix系统是一样的,包含bootfs加载器和内核,当bootfs加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。rootfs:在 bootfs之上,包含的就是典型 Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件,rootfs就是各种不同的操作系统发行版,比如:Ubuntu,、CentOS等等

简单理解:

 1. 对于Docker安装OS来说:就是Docker使用了Linux本身的bootfs,只需要安装自己所需的rootfs2. 对于Docker安装普通镜像来说:就是Docker本身是分层下载镜像,所以可以提取出公共层镜像,进行复用

Docker镜像的特点

Docker镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部

这一层就是我们通常说的容器层,容器之下的都叫镜像层

-

Commit镜像

# 提交本地镜像 
# -a:作者信息 -m:描述信息 容器ID 镜像名称:版本信息
docker commit -a="test" -m="test" 容器id tomcat01:1.0

Docker容器数据卷

什么是容器数据卷

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

容器数据卷使用命令

# 命令
docker run -it -v 主机目录:容器内目录 /bin/bash

挂载MySQL数据库到Liunx宿主机

# 1. 下载MySQL
docker pull mysql
# 2. 启动并挂载 -e:特别注意需要设置密码
docker run -d -p 3344:3306 -v /home/conf:/etc/mysql/conf.d -v /home/logs:/logs -v /home/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

此时我们使用远程连接软件会报错

-

# 解决报错
# 1. 进入容器内
docker exec -it 容器ID /bin/bash
# 2. 进入MySQL
mysql -uroot -p123456
# 3. 授权
mysql> GRANT ALL ON *.* TO 'root'@'%';
# 4. 刷新权限:
mysql> flush privileges;
# 5. 更新加密规则:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
# 6. 更新root用户密码:
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 7. 刷新权限:
mysql> flush privileges;

具名和匿名挂载

-v 容器内路径          # 匿名挂载
-v 卷名:容器内路径         # 具名挂载
-v 宿主机路径:容器内路径 # 指定路径挂载

Docker容器内的卷,在没有指定目录的情况下都在/var/lib/docker/volumes/xxx/_data下

拓展:绑定权限

# 通过 -v 容器内路径:ro rw 改变读写权限
ro # readonly 只读
rw # readwrite 可读可写
docker run -d nginx01 -v nginxdemo:/etc/nginx:ro nginx
docker run -d nginx01 -v nginxdemo:/etc/nginx:rw nginx
# ro:只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作

数据卷容器挂载

目的:实现多个容器间的数据同步(多个MySQL间共享数据)

# 使用 --volumes-from 容器名称 此命令实现数据卷容器挂载
docker run -d --name mysql02 -p 3345:3306 --volumes-from mysql01 -e MYSQL_ROOT_PASSWORD=123456 mysql

DockerFile

DockerFile是用来构建Docker镜像的文件(命令参数脚本)

DockerFile构建指令

FROM                # 基础镜像,一切从这里开始构建
MAINTAINER             # 镜像是谁写的, 姓名+邮箱
RUN                    # 镜像构建的时候需要运行的命令
ADD                    # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR                # 镜像的工作目录
VOLUME                # 挂载的目录
EXPOSE                # 保留端口配置
CMD                    # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT            # 指定这个容器启动的时候要运行的命令,可以追加命令
COPY                # 类似ADD,将我们文件拷贝到镜像中
ENV                    # 构建的时候设置环境变量!

创建一个自己的CentOS镜像

  • 创建DockerFilevim mycentos
  • 编写DockerFileFROM centos MAINTAINER MT<1746344046@qq.com> ENV MYPATH /usr/local WORKEDIR $MYPATH RUN yum -y install vim EXPOSE 80 CMD /bin/bash
  • 构建自己的镜像docker build -f mycentos -t mycentosdemodo:1.0 .
  • 查看镜像生成历史docker history 镜像ID

创建Tomcat镜像

1.准备镜像文件:Tomcat和JDK的压缩包

2.编写DockerFile

FROM centos
MAINTAINER fortuneteller<1746344046@qq.com>COPY README.txt /usr/local/README.txtADD jdk-8u251-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.35.tar.gz /usr/localRUN yum -y install vimENV MYPATH /usr/local
WORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_251
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35
ENV CATALINA_BASH /usr/local/apache-toacat-9.0.35
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD ["/usr/local/apache-tomcat-9.0.35/bin/catalina.sh", "run"]

3.打包镜像

# 这里使用的是Dockerfile来明白的脚本,所以省略-f
docker build -t mytomcat .

4.启动镜像

docker run -d -p 3344:8080 --name mttomcat -v /home/fortuneteller/tomcat/test:/usr/local/apache-tomcat-9.0.35/webapps/test -v /home/fortuneteller/tomcat/logs:/usr/local/apache-tomcat-9.0.35/logs mytomcat

5.测试运行

6.在宿主机的/home/fortuneteller/tomcat/test目录下创建WEB-INF目录与mt.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>docker</title>
</head>
<body>
----------welcome------------
<%="这是一个测试页面"%>
</body>
</html>

7.在WEB-INF目录下编写web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><display-name>test</display-name>
</web-app>

8.测试访问

本地镜像上传阿里云

1.登陆阿里云容器镜像服务

2.创建命名空间

3.创建仓库

4.设置固定密码

5.查看自己的推送命令

6.使用推送命令完成上传

7.拉取时同理根据阿里云提示命令完成即可


Docker总结

-

Docker部署SpringBoot项目

1.使用Maven构建获得jar包

2.编写Dockerfile

FROM java:8COPY *.jar /app.jarCMD ["--server.port=8080"]EXPOSE 8080ENTRYPOINT ["java", "jar", "app.jar"]

3.上传Docker与jar包到Linux服务器

4.使用命令获得镜像

docker build -t ideatest .

5.使用命令查看获取到镜像编号

docker images

6.启动镜像

docker run -d -p 3344:8080 ideatest  # 3344端口需要提前在阿里云放开

7.测试访问

在浏览器输入:服务器ip:3344

原文链接:https://developer.aliyun.com/article/769273

本文为阿里云原创内容,未经允许不得转载。

 

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

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

相关文章

npm源管理nrm

在npm中有许多源地址&#xff0c;最近发现一个好用的工具nrm可以管理。 1、安装nrm npm install nrm -g 2、安装好后就是使用了 查看有哪些源 nrm ls 添加源 nrm add 删除源 nrm del 使用源 nrm use

掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地中篇

联席作者&#xff1a;吴毅挺 任浩军 童子龙 郑重鸣谢&#xff1a;Nacos - 彦林&#xff0c;Spring Cloud Alibaba - 小马哥、洛夜&#xff0c;Nacos 社区 - 张龙&#xff08;pader&#xff09;、春少&#xff08;chuntaojun&#xff09; 掌门教育自 2014 年正式转型在线教育以…

经典永不过时!重温设计模式

导语&#xff1a;在软工程中&#xff0c;设计模式&#xff08;design pattern&#xff09;是对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;所提出的解决方案。这个术语是由埃里希伽玛&#xff08;Erich Gamma&#xff09;等人在1990年代从建筑设…

抖音实战~项目关联UniCloud

文章目录一、云存储1. 登录UniCloud2. 创建服务空间3. 详情查看二、项目关联UniCloud2.1. 创建云开发环境2.2. 关联云服务空间2.3. 效果验证一、云存储 1. 登录UniCloud 链接&#xff1a;https://unicloud.dcloud.net.cn/login 云存储空间&#xff1a;https://unicloud.dcl…

Flutter+FaaS一体化任务编排的思考与设计

作者&#xff1a;闲鱼技术-古风 FlutterServerless三端一体研发架构&#xff0c;客户端不仅仅是编写双端的代码&#xff0c;而是扩展了客户端的工作边界&#xff0c;形成完整的业务闭环。在新的研发模式落地与实践的过程中&#xff0c;一直在思考如何提高FaaS端研发体验与研发…

如何拉去远程的分支

首先在项目中输入git命令 git fetch origin origin 后面跟上该分支的名称 然后就可以在vscode上看到该origin分支了&#xff0c;切换到该分支。 记得切换后pull一下&#xff0c;保证最新的

抖音实战~实现App端视频上传、发布、落库

文章目录一、API阅读1. 选择或拍摄视频2. 云函数API~文件上传3. 视频截帧二、App端视频上传流程2.1. 上传流程图2.2. 流程简述三、前端源码实战3.1. 选择/拍摄短视频3.2. 短视频上传3.3. 进度条页面3.4. 补充短视频内容3.5. 视频发布3.6. 视频预览四、后端源码实战4.1. 短视频发…

从微服务到 Serverless | 开源只是开始,终态远没有到来

开源只是开始&#xff0c;终态远没有到来。 从微服务开源&#xff0c;到 Serverless 开源&#xff0c;我们正持续将阿里沉淀的技术能力进行开放。 只是这一次不同的地方在于&#xff0c;借助 Serverless 能力的释放&#xff0c;将帮助前端进入一个崭新的时代&#xff0c;只需…

从Python到AI,这条路好走吗?

大家都在学Python的时候&#xff0c;怎么才能让自己更有竞争力&#xff1f;Python 的应用方向有很多&#xff0c;基本每个方向都是大热门&#xff0c;但至今为止&#xff0c;人工智能行业仍处于人才稀缺的情况。正因这样&#xff0c;近几年来&#xff0c;AI 成为了广大 Python …

Flutter瀑布流及通用列表解决方案

作者&#xff1a;闲鱼技术-夜澜 背景 目前闲鱼业务中无论是首页还是搜索页都有大量可以落地瀑布流的场景&#xff0c;而在Flutter原生中只提供了ListView, GridView&#xff0c;无法提供自定义布局的能力。 而在社区中&#xff0c;一般瀑布流的解决方案都是基于SliverMultiB…

find VS not looking for VS2015

用管理员打开cmd. npm install -g node-gyp npm install --global --production windows-build-tools

uniapp 制作手机app程序, 使用uni.chooseVideo录制视频,视频播放模糊分辨率低的原因

原因:compressed参数是true&#xff0c;这个参数的意思是‘是否压缩所选的视频源文件&#xff0c;默认值为 true&#xff0c;需要压缩’。如果不加这个参数默认就是true&#xff0c;就会默认压缩视频播放出来就是模糊的&#xff0c;改为false就可以了 可以参考uniapp API开发文…

闲鱼的商品结构化是如何演进的(超详细)

作者&#xff1a;闲鱼技术-吴白 引言 商品的信息结构化程度在某种意义上来说决定导购效率的天花板。闲鱼商品结构化和淘宝/天猫最大的区别在于闲鱼卖家都是个人用户&#xff0c;无论是专业程度还是行动力远不及淘宝卖家。为了不阻碍商品发布&#xff0c;闲鱼一直倡导轻发布&a…

一文看懂5G射频的“黑科技”

作者 | 小枣君来源 | 鲜枣课堂&#xff08;ID&#xff1a;xzclasscom&#xff09;手机&#xff0c;作为移动互联网时代的标配&#xff0c;已经走进了我们每个人的生活。有了它&#xff0c;我们可以随心所欲地聊天、购物、追剧&#xff0c;享受美好的人生。正因为手机如此重要&a…

抖音实战~首页视频~下拉刷新

文章目录1. 配置下拉刷新2. 下拉刷新监听3. tab监听索引4. 控制台监控5. 父子组件调用6. 效果图1. 配置下拉刷新 在pages.json配置文件中添加如下配置&#xff1a; "enablePullDownRefresh":true //开启下拉刷新2. 下拉刷新监听 // 当前页下拉刷新onPullDownRefre…

支付宝研究员王益的建议:“学好语文,才能写好代码”

王益&#xff0c;蚂蚁集团研究员&#xff0c;开源项目SQLFlow 和 ElasticDL 的负责人。他从10岁开始写代码。曾经用自己焊接的电路板扩展“中华学习机”来把自家的老式“威力牌”双筒洗衣机改造成了自动洗衣机&#xff1b;用Apple BASIC语言和6502汇编混合编程写了人生中第一个…

抖音实战~搜索页面~视频详情

文章目录一、前端部分1. 检索关键词短视频列表2. 选中某一个短视频3. 短视频详情二、后端部分2.1. 短视频入口2.2. 短视频接口层2.3. 短视频服务层2.4. 持久层-接口2.5. 持久层- xml三、效果图鉴赏3.1. 搜索页面3.2. 短视频列表3.3. 短视频详情一、前端部分 1. 检索关键词短视…

金蝶国际公布2020年全年业绩,云业务收入增长45.6%

金蝶国际软件集团有限公司&#xff08;「金蝶国际」、「金蝶」或「公司」&#xff0c;连同其附属公司统称「集团」&#xff1b;股份编号&#xff1a;0268.HK&#xff09;今日公布其截至2020年12月31日&#xff08;「报告期」&#xff09;之全年业绩。集团持续推进业务发展转型战…

技术人的灵魂 3 问,阿里工程师如何解答?

作者 | 氐宿 阿里云高级前端技术专家 导读&#xff1a;在业务团队做事的工程师摸爬滚打了一段时间后&#xff0c;一定会有所疑问。团队同学在最初的一段时间都提出这样的疑惑&#xff1a;如何在业务中发现有技术价值的问题&#xff1f;发现问题后如何思考和发起再到解决&…

10+知识图谱开放下载,让你的学习效率提升5倍! | “右脑”开发套餐

简介&#xff1a; 为了让广大开发者清晰了解技术体系&#xff0c;打造属于自己的系统学习路径。今天&#xff0c;开发者社区整理了10知识图谱&#xff0c;供大家交流学习&#xff0c;持续更新中~ 知识的学习从来就不是孤立的&#xff0c;学习任何知识&#xff08;概念、定义、…