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,只需要安装自己所需的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. 下载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镜像
-
创建DockerFile
vim mycentos
-
编写DockerFile
FROM 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.txt ADD jdk-8u251-linux-x64.tar.gz /usr/local ADD apache-tomcat-9.0.35.tar.gz /usr/local RUN yum -y install vim ENV MYPATH /usr/local WORKDIR $MYPATH ENV 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/bin EXPOSE 8080 CMD ["/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.测试访问
本地镜像上传阿里云
2.创建命名空间
3.创建仓库
4.设置固定密码
5.查看自己的推送命令
6.使用推送命令完成上传
7.拉取时同理根据阿里云提示命令完成即可
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"]
3.上传Docker与jar包到Linux服务器
4.使用命令获得镜像
docker build -t ideatest .
5.使用命令查看获取到镜像编号
docker images
6.启动镜像
docker run -d -p 3344:8080 ideatest # 3344端口需要提前在阿里云放开
7.测试访问
在浏览器输入:服务器ip:3344

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云存储团队招聘贴(2020.07.28更新)
简历投递邮箱:liemiko.lifang@alibaba-inc.com 一、Java技术专家(北京/杭州) 工作内容: 负责阿里云线上块存储系统功能研发,包括设计、开发、测试和发布; 负责阿里云线上块存储系统的维护; 负责阿里云线上块存储架构重构和演进。 职位要求 4年以上Java项目开发经验; Java基础扎实,理解IO、多线程、集合等基础框架,对JVM原理有一定的了解; 熟悉高并发、高性能的分布式系统的设计及应用、调优; 熟练使用 Spring、Spring MVC、MyBatis 等框架,并对框架原理有所了解;了解RPC框架,如dubbo、thrift等;了解redis zookeeper; 熟悉MySQL的应用开发、性能调优和可扩展性设计,了解事务、锁、并发等实现机制; 具备较好的系统化分析能力、团队协作能力和沟通交流能力。 二、研发专家/高级专家(Linux/C/C++)(北京/杭州/上海/成都) 候选人将工作在下面的一个或多个领域: 基于新型存储介质如 NVMe SSD 的文件系统;或者 云存储对象存储,块存储,文件存储的开发;或者 基于K-V系统的存储索引系统;或者 ...
- 下一篇
香港服务器对游戏行业有什么意义?
IP不受锁区效应的影响,网络速度快 由于香港机房中的游戏服务器提供了香港的本地IP,所以它们不会受到香港PSN服务器的链接的限制。此外,如果香港服务器在线路上连接到CN2,则延迟非常低。特别是,一些大型香港机房还支持自建专线接入,而延迟基本上低到3M/s部署的游戏加速度不仅可以保证网络延迟稳定,而且还采用高质量的线路,因此网络带宽比很大。即使多玩家接入也能保证整体游戏加速服务的稳定性和玩家数据的安全。 服务可靠 香港机房支持24小时在线技术支持,常驻计算机机房常驻硬件工程师。对于游戏加速业务,有必要做业务的安全性和连续性,并且专业的香港机房游戏服务器提供可靠的容灾功能。因此,建议开展游戏加速业务的团队要注意机房的声誉和服务质量。 支持硬件扩展 对于游戏加速车来说,除非已经是比较大型的厂商,对于创业团队来说,业务规模的变化都比较大,所以硬件配置升级的需求比较大。即使大型游戏加速企业也会有相对高端的硬件需求,随着业务的调整和功能的改变,香港游戏服务器支持硬件,除了扩展服务器本身的硬件配置外,定制配置也支持同一机房内的多台服务器进行负载。在线平衡,扩展功能强。 游戏企业也很喜欢选择香港云主...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19