本文目录一览:
- 1、[Docker] docker-compose使用教程
- 2、Docker-compose编排微服务顺序启动
- 3、如何在Java 8中使用compose和andThen组合函数
- 4、compose环境变量怎么配置
- 5、为什么除了Flutter之外,我们还需要另一个跨平台开发框架?
- 6、如何在线安装docker compose详细步骤
[Docker] docker-compose使用教程
[Docker] 入门教程
我们从 logo 上可以看出来, 说白了, 这个东西就是一个管理容器的工(zhang)具(yu), 我们可以方便的使用它来管理我们的 docker 容器, 可以极大程度的简化命令行的复杂操作.
如果你是 Mac 或 Windows 用户使用桌面版本的 Docker 应用默认就会替你安装 docker-compose (下文中用dc代替), 如果是 centos 的话可以使用命令 yum -y install docker-compose 太简单了不做过多说明.
查看版本,能显示出来证明安装成功了
接下来我们有需求了, 运行一个 service-a 挂载到 /usr/local , 映射端口为 8082 并添加 servicehost 域名映射内网 ip ,很多人可以想到那应该是一条冗长 docker 命令
这么一大坨,看起来十分不方便,那么我们就是用 docker-compose 来优化一下
首先创建一个名为 docker-compose.yml 的文件
之后随便是用一个文本编辑器打开,写入下面内容
这样看起来是不是思路清晰多了呢,我们接下来运行一下
-d 后台运行,否则运行log就会出现在你的屏幕上。。。
然后查看一下运行状态
我们可以看到服务已经运行起来了,我们试着访问一下
成功,这一部分告一段落。
有的人会问,多个服务怎么运行呢?很简单,我们这里就来做一下。
下面我要做的是开启三个服务 service-a , service-b , service-eureka ,分别是一个注册中心和两个服务。
我们来完善一下 docker-compose.yml
我们来运行一下
注册中心
访问service-a
访问service-b
到这里我们已经可以运行起来多个服务了!!!!下课 - -
我们可以看到 docker-compose 会自动识别容器的开启状态,替我们开启需要开启的那一个
1.可能很多人对我的 echo 192.168.1.126 servicehost /etc/hosts 不是很理解
这里说一下,这句命令的意思是,把 servicehost 域名加入到 hosts 文件,目的是为了能让我的 eureka 发现我的服务,而不是把地址写死在配置文件中,这句命令对应的服务配置为
Docker-compose编排微服务顺序启动
docker-compose可以方便组合多个 docker 容器服务, 但是, 当容器服务之间存在依赖关系时, docker-compose 并不能保证服务的启动顺序。docker-compose 中的 depends_on 配置是容器的启动顺序, 并不是容器中服务的启动顺序。本章将详细叙述如何解决 docker-compose 顺序启动微服务的问题。
1.用restart:always机制
docker-compose.yml
2. 用shell脚本阻止当前服务启动,直到所需依赖的服务全部启动之后再启动当前服务。
部署的微服务如下图所示
(1) shell脚本 :entrypoint.sh ( 镜像中必须安装 netcat要么通过maven配置要么在dockefile安装netcat )
这个脚本有2 个参数:
-d: 需要等待的服务和端口,例如: simonEureka:8080
-c: 等待的服务和端口启动之后, 自己的启动命令,例如: java -jar eureka.jar
(2)编写docker-compose.yml
(3) 编写每个jar包的Dockerfile文件
Dockerfile-eureka:
Dockerfile-config(其他的类似):
netcat放在同级目录下
(4) 启动服务
$ docker-compose up
其他程序都在等待eureka启动这样就实现了顺序启动的功能
注意问题:
1. Shell脚本权限问题(不能执行shell脚本):
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"docker-entrypoint.sh\": executable file not found in $PATH": unknown.
解决方法(添加权限)
chmod +x docker-entrypoint.sh
2. Shell脚本 报错"start.sh /bin/bash^M: 坏的解释器:没有那个文件或目录”,因为 .sh文件是从windows拷贝过来的,所以多了\r
解决办法
sed -i 's/\r$//' start.sh
3. 出现网关不能no host to root
先关闭防火墙看是否能解决
4. 关闭防火墙后会出现NO chain需要重启docker
如何在Java 8中使用compose和andThen组合函数
什么是函数组合?
首先需要创建一些小的可重用函数,然后将这些小函数组合为新函数。
现在,我们怎么利用 compose 和 andThen 方法来完成函数的组合?
首先,定义两个简单的函数—— times2 和 squared。
FunctionInteger, Integer times2 = e - e * 2; FunctionInteger, Integer squared = e - e * e;
接下来,使用 compose 和 andThen 将它们连起来。
times2.compose(squared).apply(4); // Returns 32 times2.andThen(squared).apply(4); // Returns 64
如你所见,compose 和 andThen 的不同之处是函数执行的顺序不同。compose 函数先执行参数,然后执行调用者,而 andThen 先执行调用者,然后再执行参数。
compose环境变量怎么配置
安装 - Windows
使用安装程序
这是将 Composer 安装在你机器上的最简单的方法。
下载并且运行 Composer-Setup.exe,它将安装最新版本的 Composer ,并设置好系统的环境变量,因此你可以在任何目录下直接使用 composer 命令。
选择php.exe 如E:\xampp\php\php.exe
cmd 输入
composer -V
显示composer的版本号
为什么除了Flutter之外,我们还需要另一个跨平台开发框架?
不久前,谷歌正式推出 Jetpack Compose 1.0 版本。近日,JetBrains 在此基础上发布了 Compose Multiplatform Alpha 版本,旨在将 Compose 扩展到桌面和 Web 端。
Compose Multiplatform 由 Compose for Desktop 和 Compose for Web 组成,通过 Kotlin Multiplatform 支持许多不同的平台。其中,Compose Desktop 采用 Google 的 Skia 图形库,来实现在 Windows、macOS 和 Linux 上的 UI 绘制,借此在所有支持的操作系统中提供统一的体验,类似于 Flutter 的做法。
根据 Kotlin 团队的说法,相比起 Electron 框架,Compose Multiplatform 在内存消耗、安装大小和 UI 渲染性能等方面将有更明显的优势。随着 Alpha 版本的发布,Compose Multiplatform 还收获了新的 Android Studio 插件,包括对在 IDE 中显示组件预览的支持以及许多附加功能。
我们希望通过本文帮助大家进一步了解 Compose 的跨平台能力,以及 JetBrains 将 Compose 从 Android 扩展到这些其他平台背后的主要驱动力是什么。
基于 Jetpack Compose 1.0
由谷歌打造的 Jetpack Compose 是一款用于在 Android 应用程序之内构建用户界面的官方框架,上周刚刚发布 1.0 版本。与此同时,Android Studio 代号“极狐”的首个稳定版 2020.3.1 也正式亮相。
尽管才刚迎来 1.0,但谷歌表示“目前 Play Store 中已经有超过 2000 款应用程序在使用 Compose——更重要的是,就连 Play Store 这款应用本身也在使用 Compose。”谷歌方面还表示,“我们一直在与一些顶级应用的开发人员进行合作,他们的反馈和支持帮助我们使 1.0 版本更加强大。”
Jetpack Compose for Android 迎来 1.0 版本
Compose 基于 Kotlin 开发,而 Kotlin 与 Android Studio(即官方指定的 Android IDE)均来自开发工具厂商 JetBrains。虽然 Jetpack Compose 专为 Android 打造(与谷歌的 Flutter 框架不同), 但 JetBrains 公司坚信 Compose 完全能够获得跨平台能力 。
Compose for Desktop: 这只是开始
Compose Multiplatform 可以说是该框架面向 MacOS、Linux、Windows 以及 Web 开设的一个端口,目前刚刚发布 1.0 Alpha 版本。虽然尚处于早期开发阶段,但 JetBrains 表示,其已经“为开发人员带来能够基本安全使用的稳定 API”。
TheRegister 就此事询问了 JetBrains 公司 Compose 项目负责人 Nikolay Igotti,希望了解为什么该公司在拥有了已经广泛应用于 IntelliJ IDEA IDE 及多种丰富变体的桌面应用程序跨平台 Java 框架之外,还要费力开发 Compose for Desktop。Igotti 的回答是,“旧有 Java 框架基本上就是修改版的 Swing。Swing 属于默认 JDK UI 框架,Swing 和 AWT(Abstract Windows Toolkit,抽象窗口工具包)。Compose 则完全是另一码事,当然我们也在设计中考虑到了互操作性需求……Swing 这套框架太陈旧了,最早出现在上世纪九十年代末。多年来人们对于 UI 的设计思路已经天翻地覆,Swing 显然满足不了要求了。”
JetBrains IDE 中的 Compose for Desktop 项目
Compose 与 Swing 有一个比较大的共同点:与其他使用本机控件的跨平台框架,比如例如 Java 的 SWT(Standard Widget Toolkit)以及微软的 Xamarin 有所不同,它们选择自主绘制控件。Compose 使用的 Skia 开源图形库,也在谷歌 Chrome、Flutter 及其他众多框架当中得到广泛应用。那这是否意味着 Compose 应用程序将没有自己的原生外观?对此,Igotti 的回应是,“这取决于开发人员的选择,取决于他们如何为应用程序设置主题。在这方面,Compose 的情况与 Flutter 等其他框架没什么区别。”
那 Compose for Desktop 应用程序是否依赖于 JVM(Java Virtual Machine)运行?Igotti 表示,“我们也知道,JVM 应用程序的发布情况可能比较棘手。因此我们提供自己的 Gradle 插件,其使用 jpackage 与 Jlink 以 JVM 应用程序为基础制作原生应用程序。Mac 的.dmg、Windows 的 MSI、Linux 的 deb 包等均可实现,大家用不着担心 JVM。”
也就是说,开发成果将会是一款被精心包裹起来的 JVM 应用程序。JetBrains 还有一款用于解决这个问题的 Kotlin/Native 编译器,“预计将在未来发布,或者专门用于桌面开发。”
对应用程序的另一种思考方式
那 Web 应用程序方面呢?Igotti 回应称,“我们使用 Kotlin/JS 编译器。”Compose 的 Web 版本不如桌面版先进,说明文档中也警告称“API 尚未最终确定,预计会发生重大变化。”此外,虽然 Web 版本确实使用 Compose 模型,但 API 却完全不同,而且会使用 HTML 与 CSS。所以,Web 版与 Compose for Desktop 之间能够共享的代码应该比较少。
据 Igotti 介绍,“Compose 代表着一种不同的应用程序思考方式。状态即 UI 的真实来源,而 UI 本身是无状态的,其表达永远由状态计算得出。在这方面,Compose for Web 采用一组相同的原语,完全相同的状态管理思路。但是对于具体的小部件集合与排列方式,Web 版与桌面版之间确实无法互通。”
说到这里,为什么要把 Compose for Android 扩展到多种其他平台之上?“Compose 的目标受众主要分为三类。首先是使用 Kotlin 与 Compose 的 Android 开发人员,他们希望把自己的开发成果交付至其他平台;其二是纯 Kotlin 开发人员,他们希望以‘一次编写、随处运行’的方式开发新的应用程序;第三则是那些不太熟悉 Kotlin 或者 Compose,但又希望开发出精美 UI 的用户,我们希望能为他们提供实现目标的工具。”
Igotti 并没有给出具体的发布日期,但表示自己希望 Beta 版能在今年秋天发布,“我们也希望能在今年之内推出 1.0 版本。”项目本身是完全开源的,“二十一世纪了,框架在大多数人们心目中就不应该收费。我们只是想开发一款长期缺失的软件”,补足 JetBrains 当前商业模式中的工具链。
那么,JetBrains 会在自己的其他工具中使用 Compose 吗?事实上,他们的 JetBrains Toolbox(用于管理已安装的 IDE)已经在使用 Compose,但 Igotti 表示短时间内 Compose 还无法取代 IntelliJ IDEA 等现有框架。“编辑器是其中最复杂也最重要的组件,经历了 20 年的发展演进,我们几乎不可能在中途进行重写了。无论是 JetBrains 还是我个人,都不打算强迫每个人都转而使用 Compose。我们的目标是为原有框架选项满足不了的用户提供新的解决方案。”
写在最后
那么,为什么除了 Flutter 之外,我们还需要另一个跨平台框架?虽然谷歌的 Flutter 最开始主要面向移动设备,但现在也开始向桌面及 iOS 进军,甚至比 Compose 还抢先了一步。不过,根据 StackOverflow 的最新调查, Flutter 使用的语言为 Dart;尽管 Dart 语言的人气正在增长(正是受到 Flutter 的推动),但仍然无法与 Kotlin 相提并论。
Compose 代表着一种独特的 UI 构建方法,也许最期待 Compose 跨平台功能的受众,正是那些曾在 Android 上使用过它、又特别喜欢这种 UI 构建体验的开发者。
想要进一步了解 Compose,国内 Android 开发者可访问以下链接查看中文手册:
延伸阅读:
如何在线安装docker compose详细步骤
实际上到目前为止还不能直接在Windows上安装Docker Compose,所以这篇文章要讲的是如何在Windows上使用Docker Compose。
先决条件: Docker Machine 已经安装完毕。
解决方案: 将 Docker-Compose 安装在Boot2Docker虚拟机中。
1. SSH to VM:
[plain] view plain copy print?
span style="font-size:14px;"$ docker-machine ssh docker machine name/span
2.获得root用户权限:
[plain] view plain copy print?
span style="font-size:14px;"$ sudo -i/span
3. 运行以下两条命令(注意:不要使用官方指南中“Install as container”章节中提供的命令。亲测无效!)
[plain] view plain copy print?
span style="font-size:14px;"$ curl -L -`uname -s`-`uname -m` /usr/local/bin/docker-compose/span
[plain] view plain copy print?
span style="font-size:14px;"$ chmod +x /usr/local/bin/docker-compose/span
4. 回到docker用户权限:
[plain] view plain copy print?
span style="font-size:14px;"$ exit/span
5. 测试 Docker-Compose 安装成功:
[plain] view plain copy print?
span style="font-size:14px;"$ Docker-Compose --version/span