目录
上述的宿主端口 就是你的服务器端口, 容器端口 就是存放在docker 里面的 服务的端口
基于Ubuntu 镜像构建一个新镜像,运行一个jar 项目.
由于dockerfile的配置文件里面,配置多,如果遇见微服务情况,又如何解决呢?
第一步: 覆盖之前繁琐的 dockerfile文件, 使用上面这个配置文件
dockerConpose 文件命令对比 之前繁琐的 容器镜像挂载配置命令
下图是所有配置都完成以后, 只要构建compose命令 它的镜像就会构建,容器就会部署
前言
很惭愧,希望读者看了 不要喷我,我就是喜欢瞎记录东西,看着粉丝突然有了几十个了 ,我感觉很沉重, 有点自愧不如, 感觉自己写得很烂, 我慢慢进步去修改, 我就是单纯记录东西,好上班划水
万般皆下品惟有读书高,好记性不如烂笔头
最喜欢的群,有一群经常交流的群友,这里的韭菜谁也隔不了
一、Docker是什么?它是如何解决兼容问题?
Docker是什么?
- Docker是一个快速交付应用,运行应用的技术
- 可以将程序及其依赖,运行环境一起打包个镜像,可以迁移到任意的Linux操作系统.
- 运行启动移除等命令 方便快捷, 沙箱机制隔离应用,应用互不干扰
如何解决大型项目依赖关系复杂问题?不同组件依赖的兼容问题?
- Docker将应用Libs(函数库),Deps(依赖),配置与应用打包
- Docker允许开发中将应用,依赖,函数库,配置 一起打包,形成可移植镜像.
- Docker应用允许在容器中,使用沙箱机制,相互隔离 (将每个应用放到一个隔离容器去运行,避免相互干扰)
Docker如何解决开发,测试,生产环境的差异呢?
- Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统运行.
任意运行的原因: 操作系统组成是 硬件+内核+系统应用
例如ubuntu 和 Centos 二个操作系统 就是同一种Linux内核,只是里面的函数 不同, 都有少数自己独有的 函数, Docker 把这个函数都打包在一起, 这样 不管是什么 程序调用 都可以使用
被打包的 函数库
docker 与 虚拟机 差异:
镜像和容器:
镜像:Docker将应用程序及其所需的依赖,函数库,环境位置文件打包在一起 称之为镜像
容器:镜像中 应用程序运行后形成的进程就是容器,只是docker会给容器做隔离,对外不可见
二、DockerHub镜像托管平台
1.Docker架构
总结上述Docker的理论知识:
2.安装Docker
如果之前电脑安装过docker,就先卸载:
第一步:
首先要连网,安装yum工具:
yum安装成功提示:
然后更新本地镜像源:
然后输入命令:
yum install -y docker-ce
安装成功以后, 在启动之前 一定要先配置 防火墙规则, 这里是直接关闭防火墙
在工作的时候 肯定不能直接关闭这个 ,一般都是 开放对应的端口
docker -v 就是查看版本 如果查看版本 和 查看docker的状态 都没问题 ,那么就是安装成功了!
配置镜像加速:
镜像相关命令:
docker save 和docker load的使用:
docker -- help 可以直接查看帮助文档,
查看指定命令文档, docker 指定命令 --help
导出nginx详解命令: docker save
docker rmi 删除指定镜像
上面的docker load -q 就是不打印日志的意思
总结相关指令:
docker images 查看docker镜像
docker rmi 删除指定镜像
docker pull 拉取镜像
docker save 导出后缀为tar的镜像包
docker load 导入镜像,
查看指定命令使用文档, docker 指定命令 --help 例如:docker load --help
=============================下图是 上述指令的流程=======================================
容器运行 暂停 停止 命令使用:
创建一个Nginx 容器:
上述的宿主端口 就是你的服务器端口, 容器端口 就是存放在docker 里面的 服务的端口
查看对应容器的日志
docker logs 容器名称(创建容器的时候 命名的名称),
docker -f 容器名称 这个就是实时展示日志信息
操作修改Nginx容器内部HTML文件:
创建一个Redis容器:
docker exec -it mr bash 进入redis 容器内:
redis-cli 启动客户端
exit 是退出命令
docker exec -it mr redis-cli 可以 一起执行
容器和数据耦合的问题:
如何解决数据耦合问题呢 ?
那么如何操作数据卷呢?
创建数据卷:
docker volume create 数据卷名称,
数据卷展示
docker volume ls
查看数据卷的路径
docker volume inspect
删除一个数据卷:
docker volume prune 删除数据卷 (删除未使用的数据卷 ,有提示 是否确认 y/n)
docker volume rm 数据名称, 直接删除
=======================================================================
如何挂载 数据卷到容器内部
把指定的容器内部路径下的文件 挂载到 ,数据卷的路径下,
这时候 我们修改 数据卷的文件内容,指定的 容器内部文件内容也会跟着改变
我们把数据卷和容器都删除以后,
重新执行 docker -run --name mn -p 80:80 -v html /usr/share/nginx/html -d nginx
docker 也会智能的 把数据卷也创建上
======================================================================
将宿主机目录直接挂载到容器上:
下面是mysql 的运行命令 和配置 挂载的 二个文件,
这里的 \ 是应用于 指令比较长的时候, 告诉linux 我后面还有执行的命令 比较方便清晰
https://www.bilibili.com/video/BV1LQ4y127n4?p=55&spm_id_from=pageDriver 这个是视频学习的地址
DockerFile自定义镜像
-
镜像结构
镜像是将应用程序及其需要的系统函数库,环境,配置,依赖打包而成..
-
Dockerfile语法
基于Ubuntu 镜像构建一个新镜像,运行一个jar 项目.
docker build -t javaweb:1.0 . 这个javaweb是名称 后面是 1.0 版本,
注意这个运行命令 后面有一个点 空格 +点
dockerfilie文件配置
这个是dockerfile 是基于ubuntu 来实现的,下面是ubuntu的配置文件内容
这里面配置了 项目运行的jdk 和java项目的包
docker images 查看镜像![](https://i-blog.csdnimg.cn/blog_migrate/80135394435beff0ab503404e77626af.png)
运行创建的镜像:
docker run --name web -p 8090:8090 -d javaweb:1.0
由于dockerfile的配置文件里面,配置多,如果遇见微服务情况,又如何解决呢?
java:8-alpine 这个镜像 是别人做好了的 相当于我们直接使用,
上面说的 基于Ubuntu构建, 就需要去Ubuntu里面配置相关jdk 路径 环境等等....
docker build -t javaweb:2.0 . 注意有个点 空格+点 (然后构建好了 就去运行dockerfile这个文件 javaweb是名称, 2.0 是版本 )
首先上面的繁琐dockerfile 文件,能被共享的配置都被 抽离到 java:8-alpine 这个镜像里面去了
第一步: 覆盖之前繁琐的 dockerfile文件, 使用上面这个配置文件
在这里一定要记住,防火墙规则, 跟端口涉及的东西 都要注意防火墙 是否关闭,或者 端口是否放行
docker build -t javaweb:2.0 . 注意有个点 空格+点
先睡个觉
DockerCompose
-
初识DockerCompose
dockerConpose 文件命令对比 之前繁琐的 容器镜像挂载配置命令
build . 构建当前目录镜像
因为mysql 是内部访问 所以就没有暴露端口
centos7安装dockerCompose:
二种方式, 自己上传 已经好的compose文件 或者github上面去下载 但是git 比较慢
配置compose文件自动补全命令:
这里的域名访问不到 需要配置权限,放行这个域名 在hosts文件
dockercompose作用:
-
部署微服务集群
=================================================
上图是dockerfile文件展示内容
看配置文件提示,我们需要把jar包命名 app.jar,存放在当前dockerfile 平级目录下面
java:8-alpine 这个是拉取别人定义好的 镜像, 例如jdk路径什么的 都不用配置了
./app.jar 是把当前目录下的jar copy到镜像内部
打包名称方法:
一种是 jar包下载完成 邮件重命名
另一种是 通过依赖
mysql的数据表也要配置在 对应mysql 服务里面,这样到时候让mysql容器挂载到mysql下的 conf 和data文件,就能访问了
dockercompose文件内容配置
配置对应的服务名称
dockerCompose 对应项目服务名称
mysql 文件内容路径对应 , 把下载配置好的文件上传宿主机 ;linux上面,然后让mysql容器能够挂载到这个文件上面
下面的volume 是数据卷
下图是所有配置都完成以后, 只要构建compose命令 它的镜像就会构建,容器就会部署
把cloud-demo上传服务器:
docker-compose --help 可以查看相关文档命令
docker-compose up -d 就是后台运行
运行成功 可以通过docker ps 可以查看 容器状态
Docker镜像仓库
常见镜像仓库服务:
docker 和 dockerhub 都属于公共仓库
但是企业在开发的时候,肯定不能把企业的东西公开出来,这时候就需要搭建自己的私有仓库
带有图形化的界面版本的仓库:
配置docker的信任地址:
这个文件就是来记录 这个信息的 daemon.json
如果这个文件里面有配置其他的 路径 ,在换行的时候 要有 , 逗号结尾, 最后一行不需要
然后在服务器创建一个空的文件, 把上面带有图形化版本的 compose.yml文件上传上去,
然后启动
启动成功以后 就可以通过域名+8080 端口访问到 这个ui界面.... (ui界面配置 是上面 带有图形化那个配置信息)
向私有仓库推送本地镜像
也就是宿主机打包好的 镜像 推送到私有仓库去
私有仓库配置成功, 下图是访问成功的图形界面, 展示的是 向私有仓库推送成功的 nginx镜像
向私有仓库推送 镜像总结![](https://i-blog.csdnimg.cn/blog_migrate/68e942f2fcb96393b740d3ee435542dc.png)
总结
过了一遍docker 懂了3%, 每天都在和生活,工作,内心搏斗....
有颓废,有迷茫,最近的斗志又回来了..
最近很烦恼,因为也是因为钱, 我真俗气....