网站流量查询网站,做兼职的网站有哪些工作,如何在网站上做标记圈信息,南宁网站推广方案如何做简介#xff1a; 深入探究Docker
Docker镜像理解
Docker镜像是什么
镜像是一种轻量级、可执行的独立软件包#xff0c;用来打包软件运行环境和基于运行环境开发的软件#xff0c;它包含运行某个软件所需的所有内容#xff0c;包括代码、运行时库、环境变量和配置文件
D…简介 深入探究Docker
Docker镜像理解
Docker镜像是什么
镜像是一种轻量级、可执行的独立软件包用来打包软件运行环境和基于运行环境开发的软件它包含运行某个软件所需的所有内容包括代码、运行时库、环境变量和配置文件
Docker镜像加载原理 UnionFs联合文件系统 UnionFs(联合文件系统)Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统它支持对文件系统的修改作为一次提交来一层层的叠加同时可以将不同目录挂载到同一个虚拟文件系统下UnionFs联合文件系统是Docker镜像的基础镜像可以通过分层来进行继承基于基础镜像没有父镜像可以制作各种具体的应用镜像特性一次同时加载多个文件系统但从外面看起来只能看到一个文件系统联合加载会把各层文件系统叠加起来这样最终的文件系统会包含所有底层的文件和目录 Docker镜像加载原理 Docker的镜像实际上由一层一层的UnionFs文件系统组成bootfs主要包含 bootloader和 Kernelbootloader主要是引导加 kernelLinux刚启动时会加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 -atest -mtest 容器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_PASSWORD123456 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 rootlocalhost 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_PASSWORD123456 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 MT1746344046qq.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 fortuneteller1746344046qq.comCOPY 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 contentTypetext/html;charsetUTF-8 languagejava %
html
headtitledocker/title
/head
body
----------welcome------------
%这是一个测试页面%
/body
/html
7.在WEB-INF目录下编写web.xml文件
?xml version1.0 encodingUTF-8?
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion3.1display-nametest/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.port8080]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
本文为阿里云原创内容未经允许不得转载。