我在为我的团队设置开发环境的docker时面临一些问题.至今:
我使用基本图像来启动容器
docker run -t -i ubuntu:latest "/bin/bash"
Run Code Online (Sandbox Code Playgroud)我在其中安装了所有编译和构建工具
我提交了该图像并将其推送到我们的本地docker服务器
docker commit e239ab... 192.168.10.100:5000/team-dev:beta
Run Code Online (Sandbox Code Playgroud)到现在为止还挺好.现在,作为团队成员:
我在我的计算机上拉开了开发环境图像
docker pull 192.168.10.100:5000/team-dev:beta
Run Code Online (Sandbox Code Playgroud)我开始一个容器:
docker run -t -i 5cca4... "/bin/bash"
Run Code Online (Sandbox Code Playgroud)在这一点上,我正在考虑将我的容器作为一种远程机器,我可以通过SSH连接并工作.
我尝试git clone
从容器内部做一个,但由于一个公钥问题,这会失败.我手动将id_rsa*文件复制到docker中,克隆工作正常.然后我尝试编辑一些源文件,但我的vim配置,bash配置,一切都被抛弃了,因为这是一个全新的OS环境.什么工作真的很好我的整个依赖版本的构建环境.
这些是我想要帮助我解决这个问题的可能解决方案.
拉动基本映像后,使用dockerfile将所有环境变量从主机添加到docker.
缺点:每次我的主机环境改变bash/vim/git我需要更新dockerfile
使用主机到容器的卷.Git克隆并编辑主机中的文件.从docker内部运行构建脚本和编译.
缺点:如果需要,数据卷中的内容不能用于更新图像.我不知道这是否是我应该关心的事情.
或者我是以错误的方式接近这个?
基本问题如下:是否有方便的方法在嵌套查询的所有字段上指定多字段匹配?对于正常的查询{ match : { _all : "query string" }}
工作.这在嵌套查询中不起作用,可能是因为嵌套对象没有_all?
更详细的问题如下:
我有一个名为"Parent"的嵌套文档,如下所示:
{
"children" : [
{
"field_a": "value_a_1",
"field_b" : "value_b_1",
"field_c" : [ {
"field_c_a" : "value_c_a_1",
"field_c_b" : "value_c_b_1"
} ]
},
{
"field_a": "value_a_2",
"field_b" : "value_b_2",
"field_c" : [ {
"field_c_a" : "value_c_a_2",
"field_c_b" : "value_c_b_2"
} ]
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是我用来制作子嵌套对象的映射:
"Parent" : {
"properties" : {
"children" : {
"type" : "nested",
"include_in_parent" : true
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个查询,我想在所有子字段查询和术语查询中使用匹配选择几个术语:
"query" : { …
Run Code Online (Sandbox Code Playgroud) 我对镜头的魔力很新,所以我遇到了一些麻烦.
参考:https://www.fpcomplete.com/user/tel/lens-aeson-traversals-prisms
可以通过以下方式遍历JSON对象:
val ^? nth 0 . key "someObject" . key "version" . nth 2
Run Code Online (Sandbox Code Playgroud)
对于类似于的JSON对象:
"[{\"someObject\": {\"version\": [1, 0, 3]}}]"
Run Code Online (Sandbox Code Playgroud)
Maybe Monad在整个过程中使用,所以如果任何"访问者"失败,我会得到一个Nothing
.
我也想传播失败,以便我知道访问者失败了.
我能想到的唯一方法就是传递一组访问器,按顺序应用它们,并在任何失败点返回错误.像这样的东西:
import Data.Aeson
import Data.Text
import Data.Vector ((!?))
import qualified Data.HashMap.Strict as HM
data MyAccessor = Nth Int | Key Text
withFailure :: Value -> [MyAccessor] -> Either String Value
withFailure val [] = Right val
withFailure val (x:xs) = case x of
Nth i -> case val of
(Array …
Run Code Online (Sandbox Code Playgroud) 我安装了一个本地hackage-server用于开发192.168.1.100:8080
.在我开发之后,打包cabal sdist
我必须192.168.1.100:8080
在我的浏览器上并手动上传包.
这非常繁琐,尤其是在多个包装正在进行等冲刺的情况下,我只是喜欢使用cabal upload
.
对于名为my-pacakge.tar.gz的包,运行cabal upload
结果为:
Uploading dist/my-package-0.1.1.0.tar.gz...
Error: dist/my-package-0.1.1.0.tar.gz: 404 Not Found
Error: Page not found
Sorry, it's just not here.
Run Code Online (Sandbox Code Playgroud)
我的cabal配置的修改部分如下所示:
...
remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive
remote-repo: my.hackage:http://192.168.1.100:8080/packages/archive
...
Run Code Online (Sandbox Code Playgroud)
第二行优先考虑本地hackage over hackage.haskell for cabal install
我cabal upload
该如何设置上传到本地hackage?
我当然检查过 helm.sh,但乍一看整个设置似乎有点复杂(helm-client 和tiller-server)。在我看来,在大多数情况下,我只需拥有一个 helm-client 就可以逃脱。
这就是我目前所做的
假设我有一个由 3 个服务组成的项目,即。postgres
, express
, nginx
.
我创建了一个名为的目录product-release
,如下所示:
product-release/
.git/
k8s/
postgres/
Deployment.yaml
Service.yaml
Secret.mustache.yaml # Needs to be rendered by the dev before use
express/
Deployment.yaml
Service.yaml
nginx/
Deployment.yaml
Service.yaml
updates/
0.1__0.2/
Job.yaml # postgres schema migration
update.sh # k8s API server scritps to patch/replace existing k8s objects, and runs the state change job
Run Code Online (Sandbox Code Playgroud)
通常的 git 东西现在可以应用了。每次进行更改时,我都会更改规范文件,测试它们,编写更新脚本以帮助从上一个版本移动到当前版本,然后提交并标记它。
问题:
helm
要有分蘖服务器?在客户端做模板不是更简单吗?当然,如果您想将部署活动与应用程序知识(如机密)分开,模板必须在服务器上进行,否则为什么呢?我有.csv文件中的数据,我想导入我的Hasura集群的PostgreSQL数据库实例.最好的方法是什么?
haskell ×2
aeson ×1
cabal ×1
csv ×1
docker ×1
hackage ×1
haskell-lens ×1
hasura ×1
json ×1
kubernetes ×1
postgresql ×1