docker 仓库镜像 替换_自己动手创建 Docker 镜像并分享到镜像仓库,容器引擎的用途越来越广泛!...
前面在公众号里讲过Docker安装和基本用法和概念,新来的小伙伴可以先去学习一下:
docker yum快速安装和命令大全
Docker容器 - Build, Ship, and Run及基本概念
这里主要解决自己动手创建镜像。
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 mysqlDockerFileDockerFile是用来构建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.编写DockerFileFROM 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 mytomcat5.测试运行
6.在宿主机的/home/fortuneteller/tomcat/test目录下创建WEB-INF目录与mt.jspdocker ----------welcome------------ 7.在WEB-INF目录下编写web.xml文件<?xml version="1.0" encoding="UTF-8"?> test 8.测试访问
本地镜像上传阿里云
1.登陆阿里云容器镜像服务
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
--
知识分享,时代前行!
~~ 时代Java
还有更多好文章……
请查看历史文章和官网,
↓有分享,有收获~
docker 仓库镜像 替换_自己动手创建 Docker 镜像并分享到镜像仓库,容器引擎的用途越来越广泛!...相关推荐
- 动手创建docker镜像
动手制作docker镜像 一.docker镜像的分层 二.docker镜像的创建 (一).docker镜像 (二).docker镜像的创建方法 三.基于已有镜像创建 四.基于本地模板创建 五.基于Do ...
- docker删除镜像命令_第三章 Docker常用命令之镜像命令
3.2 镜像命令: docker images 列出本机所有镜像docker images -a 列出本机所有镜像,包含中间映像层docker images -q 列出本机所有镜像的iddocker ...
- docker linux 快速开窗口_技术|如何使用 Docker 快速配置数据科学开发环境?
数据科学开发环境配置起来让人头疼,会碰到包版本不一致.错误信息不熟悉和编译时间漫长等问题.这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难.而且这也是一个完全不常见的准入门槛. 还好,过去几 ...
- docker -v 挂载文件_浅谈关于docker中数据卷的操作,附带案例
Volume数据卷的由来: Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上添加一个读写层.如果运行中的容器修改了现有的一个已经存在的 ...
- anconda设置镜像源_三、DockerFile 定制属于自己的专属镜像
前言 上篇文章我们知道了怎么操作镜像和容器,到基础都是从已经存在的镜像开始的,那我们自己怎样搭建一个镜像并使用它呢?接下来就让我们学习使用dockerfile 创建属于自己的镜像吧. dockerfi ...
- docker image存储路径_使用fluentd作为docker日志驱动收集日志
前言 docker默认的日志驱动是json-file,每一个容器都会在本地生成一个/var/lib/docker/containers/containerID/containerID-json.log ...
- docker 主进程 日志_运维笔记--docker高效查看后台日志
场景描述: 应用程序运行在 Docker环境中, 经常使用的查看后台日志的命令是:docker attach 容器名 该命令优点:实时输出: 不足之处:日志大量输出的时候,屏幕一闪而过,不便于调试, ...
- docker公共存储库_查找并修复docker镜像安全漏洞
容器的出现使开发团队可以创建沙盒环境,以在其中运行和测试应用程序,容器主要由从 docker hub 或其他公共镜像存储库提取的开源镜像组成. 但是这些开源镜像有时可能包含一些漏洞,这些漏洞可能会危害 ...
- python docker自动化_自动化 – 自动创建docker容器并启动python脚本
我正致力于创建一个自动化的单元测试系统,该系统将利用docker测试用 Python编写的单个学生作业,对照单个单元测试文件. 我创建了一个网站,学生可以上传他们的作业,但我有点不确定如何通过Dock ...
最新文章
- LeetCode 763. 划分字母区间
- OpenKruise v0.9.0 版本发布:新增 Pod 重启、删除防护等重磅功能
- GAN生成对抗网络-INFOGAN原理与基本实现-可解释的生成对抗网络-06
- 【转】SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤
- 在浏览器中输入网址总是打开同一个网站怎么回
- CSS效果:固定页脚、PNG透明、最小高度 3枚
- css3 页面翻转效果.
- 微软提高 Microsoft 365 的漏洞奖励
- qt UI design tips
- ADO.NET中COMMAND对象的ExecuteNonQuery、ExcuteReader和ExecuteScalar方法
- 如何打造一个能自动回复的钉钉机器人
- 六、银行会计核算(全是重点)
- 2022山东省安全员C证复训题库模拟考试平台操作
- 网信耕耘十余载,金融安全3.0时代的缔造者
- 什么是软件可靠性测试?
- flutterdio_强大的Flutter http请求库dio
- '.'和'..'还有'./'和'../'
- WPF学习开发客户端软件-任务助手(已上传源码)
- maters鸿蒙系统,【华为MateRS保时捷版评测】系统:多元素化集合EMUI 8.1体验很棒-中关村在线...
- Brodal queue简要说明
热门文章
- spring controller 增加header字段forward_Spring 注解编程之模式注解
- 无法检测或故障_大众朗境挡位偶发缺失且无法启动
- python标准数据库接口是_Python 数据库接口模块_python 数据库模块_python 数据库接口...
- python 自定义函数导入_python如何导入自编函数模块
- 一个解决方案创建多个项目问题解决方案
- C语言程序怎么保存文件,急求如何将下列C语言程序数据存储到文件中?
- java Flink滚动时间窗口聚合TumblingProcessingTimeWindows运算例子
- python提取tuple列表中的特定位置的值
- 虎牙游戏直播基于php swoole,centos6.8 php7+swoole 实现赛事直播系统
- mysql双主故障自动切换_MySQL主库高可用 -- 双主单活故障自动切换方案