目录

Docker容器数据卷

DockerFile

创建Tomcat镜像

本地镜像上传阿里云

Docker总结

Docker部署SpringBoot项目


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,只需要安装自己所需的rootfs。

2. 对于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. 下载MySQLdocker 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. 进入MySQLmysql -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 nginxdocker 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镜像

  • 创建DockerFile

vim mycentos
  • 编写DockerFile

FROM centosMAINTAINER MT<1746344046@qq.com>
ENV MYPATH /usr/localWORKEDIR $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 centosMAINTAINER fortuneteller<1746344046@qq.com>
COPY README.txt /usr/local/README.txt
ADD jdk-8u251-linux-x64.tar.gz /usr/localADD apache-tomcat-9.0.35.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/localWORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_251ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35ENV CATALINA_BASH /usr/local/apache-toacat-9.0.35ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD ["/usr/local/apache-tomcat-9.0.35/bin/catalina.sh", "run"]

3.打包镜像​​​​​​​

# 这里使用的是Dockerfile来明白的脚本,所以省略-fdocker 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.测试访问

搜索顶级架构师公众号回复“offer”,送你一份算法面试题和答案惊喜礼包。

本地镜像上传阿里云

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

  2. 创建命名空间

  3. 创建仓库

  4. 设置固定密码

  1. 查看自己的推送命令

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

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

Docker总结

Docker部署SpringBoot项目

  1. 使用Maven构建获得jar包

  2. 编写Dockerfile

FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java", "jar", "app.jar"]
  1. 上传Docker与jar包到Linux服务器

  2. 使用命令获得镜像

docker build -t ideatest .
  1. 使用命令查看获取到镜像编号

docker images
  1. 启动镜像

docker run -d -p 3344:8080 ideatest  # 3344端口需要提前在阿里云放开
  1. 测试访问

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

作者 | Fortuneteller

来源 | developer.aliyun.com/article/769273

Docker中级篇,看这篇就对了相关推荐

  1. Docker入门实战看这篇就够了(最新详细以及踩过的坑)

    Docker入门实战看这篇就够了 前言 初识 是什么 容器与虚拟机 能干什么 去哪玩 安装 先决条件 查看自己的内核 安装所需的软件包(支持devicemapper存储类型) 设置镜像的仓库 设置yu ...

  2. 深入学习Docker网络(看这篇就完全够了)

    1.什么是Docker网络 没有开启Docker网络时的网络状态: 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state ...

  3. 30分钟快速上手Docker,看这篇就对了!

    一.历史演化 1.演化史 2.物理机时代 2.1.图解 一个物理机上安装操作系统,然后直接运行我们的软件.也就是说你电脑上直接跑了一个软件,并没有开虚拟机什么的,资源极其浪费. 2.2.缺点 部署慢 ...

  4. Docker 数据卷之进阶篇

    Docker 数据卷之进阶篇 原文:Docker 数据卷之进阶篇 笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入, ...

  5. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新手朋友),但是转念一想不如来点猛的(考虑到急性子的朋友),让你通过本文的学习就能快速的入门ASP.NET Core.既 ...

  6. 如何学习前端?看这篇就够了

    引子 ​ 作为一个前端工作多年的老鸟,见过各种各样的萌新入行前端,正好有些时间,把心里的一些话写一写,实在是不吐不快. ​ 我见过入职之后不明白什么是前端是做什么的"中级前端". ...

  7. docker入门,这一篇就够了。

    Docker入门,这一篇就够了. Docker容器虚拟化平台. 前言 接触docker很长时间了,但是工作中也没有用到,所以总是学了忘,忘了学.不过这次,我打算跟大家分享一下我的学习历程,也算是我的独 ...

  8. iOS开发 iOS10推送必看(基础篇)

    iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...

  9. Vue开发入门看这篇文章就够了

    摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...

  10. 【云栖大会精华汇】历届云栖大会精彩资料大放送,一篇看尽云栖大会前世今生...

    [热点头条] 历届云栖大会精彩资料大放送,一篇看尽云栖大会前世今生        如果从2009-2010年算起,2017杭州云栖大会已经是第八届.为帮助更多朋友认识云栖大会,云栖社区特别整理了历届云 ...

最新文章

  1. flask 常见关系模板代码
  2. 简单计算器 逆波兰表达式
  3. 7z(p7zip)压缩软件在Linux下的安装和使用
  4. NPOI 导出 excel 性能测试
  5. Mongo读书笔记1 -- GridFS
  6. 怎么p出模糊的照片_36. 盲去卷积 - 更加实用的图像去模糊方法
  7. c++远征之模板篇——友元函数、友元类
  8. 【自定义Android带图片和文字的ImageButton】
  9. 小程序动画从头开始_渐进式Web应用程序102:从头开始构建渐进式Web应用程序
  10. 移动的宽带真的很垃圾
  11. Python 读取数据
  12. 微信小程序template模板 ,提高效率第二篇
  13. html怎么设置展开li,html网页代码常用ul li列表布局标签。
  14. 【法律】如何保障未来夫妻合法权益:婚前房屋财产约定协议书
  15. 图像处理研究中心系统 包含去噪 蜕变 去痘痘等操作
  16. 第五项修炼与架构师感想
  17. ubuntu安装vmware12出现cannot ope dev/vmmon及modprobe vmmon提示密钥无效的解决办法
  18. 雨林木风欲借Linux洗白走上大雅之堂?
  19. [网络安全学习篇1]:windowsxp、windows2003、windows7、windows2008系统部署(千峰网络安全视频笔记)
  20. AVS3中的AMVR和EMVR

热门文章

  1. Hexo + Butterfly 自定义右键菜单
  2. 浅谈MATLAb中imcrop()函数
  3. linux系统的unip命令
  4. Numpy中 tolist() 的用法
  5. 合宙 air720 模块通过串口助手连接到阿里云 IOT
  6. 计算机频繁启动是何原因,电脑开机频繁断电又重启怎么回事?
  7. 现代档案馆库房环境监控管理系统解决方案
  8. 学习PMbok对pmp考试的认知理解和itto输入输出的整理笔记
  9. matlab生成对角占优矩阵,latex对角矩阵diag
  10. photoshop智能参考线