小编mon*_*lls的帖子

如何使用docker图像过滤器

我可以写

docker images --filter "dangling=true"
Run Code Online (Sandbox Code Playgroud)

我可以使用哪些其他过滤器?

我可以用这样的东西吗?

docker images --filter "running=false"
Run Code Online (Sandbox Code Playgroud)

docker

65
推荐指数
6
解决办法
5万
查看次数

我可以在docker-compose中使用mem_limit吗?如何?

docker-compose支持mem_limit?我该怎么测试呢?

我有一个以下docker-compose.yml

repository:
  image: myregistry/my_nginx_image
  mem_limit: 60m
  volumes:
    - /etc/localtime:/etc/localtime
  ports:
    - "80:80"
Run Code Online (Sandbox Code Playgroud)

如何证明容器实际上不超过60 mb的RAM?

我在用:

  • 码头1.3.1
  • docker-compose 1.1.0

docker fig

48
推荐指数
2
解决办法
5万
查看次数

允许在使用docker-machine配置的主机中使用不安全的注册表

无论如何要为docker-machine创建的docker's deamon 配置--allow-insecure-ssl.

命令:

docker-machine create --driver virtualbox dev 
eval "$(docker-machine env dev)"
docker run myregistry:5000/busybox:latest echo 'hello world'
Run Code Online (Sandbox Code Playgroud)

输出:

Unable to find image 'myregistry:5000/busybox:latest' locally
2015/06/04 16:54:17 Error: v1 ping attempt failed with error: Get          
https://myregistry:5000/v1/_ping: EOF. If this private  
registry supports only HTTP or HTTPS with an unknown CA certificate, 
please add `--insecure-registry myregistry:5000` to the 
daemon's arguments. In the case of HTTPS, if you have access to the 
registry's CA certificate, no need for the …
Run Code Online (Sandbox Code Playgroud)

docker docker-machine

33
推荐指数
5
解决办法
3万
查看次数

docker-machine创建没有tls验证的节点

当我用docker-machine创建节点时

docker-machine create -d virtualbox node1
Run Code Online (Sandbox Code Playgroud)

它是在为docker deamon启用tls验证的情况下创建的,这使得事情比swarm更麻烦.

我想创建一个带有docker-machine的节点,而不需要进行tls验证以进行测试.

我尝试过:

docker-machine create -d virtualbox --engine-tls false node1
Run Code Online (Sandbox Code Playgroud)

docker-machine create -d virtualbox --engine-tls-verify false node1
Run Code Online (Sandbox Code Playgroud)

docker-machine create -d virtualbox --engine-opt-tls false node1
Run Code Online (Sandbox Code Playgroud)

docker docker-machine

14
推荐指数
3
解决办法
6942
查看次数

当git checkout同一个文件时,docker添加缓存

我需要在CI服务器构建映像中使用checkout项目重用docker cache.

结帐时,Docker ADD不使用缓存相同的文件.

我在git分支A执行docker build -t somename .它正常使用docker缓存,但如果我通过分支Bgit checkout B,什么都不做,去分支A通过git checkout A并再次运行docker build -t somename .docker缓存仅在第一个ADD之前使用.

这里的例子:

Dockerfile

# DOCKER-VERSION 0.10.0
FROM myregistry:5000/ruby:2.1.2-1
MAINTAINER ME

# Gem sources
RUN gem source -r https://rubygems.org/
RUN gem source -a http://gems.mydomain

# Never install a ruby gem docs
RUN echo "gem: --no-rdoc --no-ri" >> ~/.gemrc

# gems install
RUN mkdir /foo
WORKDIR /foo

RUN gem install bundler
ADD Gemfile …
Run Code Online (Sandbox Code Playgroud)

git docker

10
推荐指数
1
解决办法
2588
查看次数

重用 docker 构建镜像中的步骤。缓存?

我正在尝试提高 CI/CD 的速度。步骤之一是构建我的 docker 映像。构建镜像后,我将其推送到注册表,以便稍后在下一次 CI/CD 迭代中进行拉取||循环||在开始构建过程之前运行,以便重用 docker 构建镜像层缓存。预计此步骤需要一些时间,但是,如果之前已经构建了以前的图像,则可以减少时间。如果之前的行没有改变,docker 不应该重复(或者至少这是我所期望的)同一层(Dockerfile 行)。

下面是真实的例子:

我有这个目录

ls  
Dockerfile  
somefile.txt
Run Code Online (Sandbox Code Playgroud)

Dockerfile 内容:

cat Dockerfile
FROM ruby:2.7.4-slim

ENTRYPOINT irb
Run Code Online (Sandbox Code Playgroud)

当我第一次构建时:

docker build -t my-registry/my-docker-cache .
Sending build context to Docker daemon   2.56kB
Step 1/2 : FROM ruby:2.7.4-slim
 ---> db4073acbaac
Step 2/2 : ENTRYPOINT irb
 ---> Running in 14055ed3e5d1
Removing intermediate container 14055ed3e5d1
 ---> f4f317dde34d
Successfully built f4f317dde34d
Successfully tagged my-registry/my-docker-cache:latest
Run Code Online (Sandbox Code Playgroud)

一切都像预期的那样,没有缓存,每一步都被执行。如果我重复该命令:

docker build -t my-registry/my-docker-cache .
Sending build context to Docker daemon   2.56kB
Step 1/2 …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

7
推荐指数
1
解决办法
1206
查看次数

如何在 rspec 测试中创建时态表

我有一个模型 Address 和一个模块 Addressable,为包含此模块 Addressable 的 AR 类注入 *belongs_to :address* 关系。

我想测试包含此模块的类是否具有这种关系。

班级地址:

class Address < ActiveRecord::Base
  attr_accessible :street, :zip
end
Run Code Online (Sandbox Code Playgroud)

模块可寻址

module Addressable
  def self.included(base)
    base.class_eval <<-CLASS_METHODS
          belongs_to :address
          validates :address, presence: true
    CLASS_METHODS
  end
end
Run Code Online (Sandbox Code Playgroud)

测试代码:

require 'spec_helper'
describe 'Addressable' do

  subject do
    class OtherModel < ActiveRecord::Base
      include Addressable
    end
  end

  before(:all) do
    connection = ActiveRecord::Base.connection
    connection.create_table :othermodels do |t|
      t.references :address
    end
  end

  after(:all) do
    connection.drop_table :othermodels
  end

  it "should validate presence of address"do
    should validate_presence_of(:address)
  end …
Run Code Online (Sandbox Code Playgroud)

testing activerecord rspec ruby-on-rails

5
推荐指数
1
解决办法
2468
查看次数

Capistrano 3改变任务中的ssh_options

我尝试使用不同的ssh_options在同一阶段运行capistrano v.3任务.

我的production.rb说:

set :stage, :production

set :user, 'deploy'
set :ssh_options, { user: 'deploy' }
Run Code Online (Sandbox Code Playgroud)

通过这种配置,capistrano与用户部署连接,这对于其余的用户来说是正确的.但是我需要将一个特定任务与一个在服务器中配置良好的an_other_user连接起来.然后我的食谱说:

...
tasks with original user
...

task :my_task_with_an_other_user do
  set :user, 'an_other_user'
  set :ssh_options, { user: 'an_other_user' }

  on roles(:all) do |host|
    execute :mkdir, '-p', 'mydir'
  end
end

...
other tasks with original user
...
Run Code Online (Sandbox Code Playgroud)

执行时:

cap production namespace:my_task_with_an_other_user

capistrano使ssh conexion与original:user"deploy"(在production.rb中声明的用户).

如何在任务中更改用户和/或ssh_options?

ruby deployment capistrano capistrano3

5
推荐指数
1
解决办法
4050
查看次数

docker 镜像层次管理

在一种场景中,我的 IT 团队通过 docker 部署了许多应用程序。我们有自己的 docker 镜像,其他镜像来自互联网注册中心。

一个(基本)映像可能是操作系统映像,而另一个可能是运行时框架(用于 java、ruby 等),另一个可能是某些特定工具(例如 git、一些库)。然后,最后,我们有我们的应用程序的图像。

这意味着我们的容器层次结构看起来像:

  1. 应用FROM工具和(ADD . /app)
  2. 工具FROM框架
  3. 框架FROM操作系统
  4. 操作系统是基础容器

每个容器都有自己的 Dockerfile。

然后如果我们需要创建另一个app2,我们可以重新使用我们的框架容器。好的。

但是,如果app3出现时,使用类似frameworks2与差异较小的容器框架,然后我们与其它图像最终framework2

这使得使用版本图像及其基础来控制应用程序的版本变得非常困难。

最后,我只选择了一个 Dockerfile。来自 OS 的 APP,它创造了一切,Dockerfile 使用 app 进行版本控制。

有人有其他想法吗?

deployment docker

5
推荐指数
1
解决办法
566
查看次数

铁路环境mongoid连接问题

我有rails app 3.2.17,部署在登台环境中,独角兽4.6.3由bluepill 0.0.66使用mongid 3.1.5监控

当我为staging环境进行部署时,所有工作都会找到包括active_record在内的mongoid查询,其结果包含以下错误:

Error during failsafe response: 
Problem:
  No configuration could be found for a session named 'default'.
Summary:
  When attempting to create the new session, Mongoid could not find a session configuration for the name: 'default'. This is necessary in order to know the host, port, and options needed to connect.
Resolution:
  Double check your mongoid.yml to make sure under the sessions key that a configuration exists for 'default'. If you have set the …
Run Code Online (Sandbox Code Playgroud)

deployment ruby-on-rails mongodb unicorn mongoid

4
推荐指数
1
解决办法
3959
查看次数

无花果船坞监控破碎的容器

我有一个用于发射N码头工人容器(app,redis,mongo,postgre等等)的无花果配置

当我运行fig up一切都没问题.

      Name      Command               State            Ports           
--------------------------------------------------------------------------
my_mongodb_1   /usr/local/bin/run       Up      28017/tcp, 27017/tcp     
my_redis_1     /usr/local/bin/run       Up      6379/tcp                 
my_pg_1        /usr/local/bin/run       Up      5432/tcp                 
my_app_1       ...                      Up      443->443/tcp, 80->80/tcp 
Run Code Online (Sandbox Code Playgroud)

但是,由于一个不重要的原因,可以关闭其中一个容器.

      Name      Command               State            Ports           
--------------------------------------------------------------------------
my_mongodb_1   /usr/local/bin/run       Up      28017/tcp, 27017/tcp     
my_redis_1     /usr/local/bin/run       Exit    6379/tcp                 
my_pg_1        /usr/local/bin/run       Up      5432/tcp                 
my_app_1       ...                      Up      443->443/tcp, 80->80/tcp 
Run Code Online (Sandbox Code Playgroud)

可以配置监控以监控所有容器并启动已关闭的容器

supervisord docker

4
推荐指数
1
解决办法
1962
查看次数

用ansible playbook改变rvm ruby​​版本

我有ansible-playbook成功安装rvm.但现在我必须更改默认的ruby版本.我尝试过:

- name: Install Bundler
  command: bash -lc "rvm use 2.1.2-p95"
Run Code Online (Sandbox Code Playgroud)

要么

- name: use 2.1
  shell: /usr/bin/env bash -lc "rvm use 2.1.2-p95"
Run Code Online (Sandbox Code Playgroud)

要么

- name: use 2.1
  shell: rvm use 2.1.2-p95
Run Code Online (Sandbox Code Playgroud)

但是没有任何ansible看起来一切正常,但是当我使用相同的用户登录ssh时使用ansible并运行rvm currentruby版本是一样的.

我怀疑从ssh和bash登录shell但我可以看到解决方案.

ruby bash rvm rvmrc ansible

4
推荐指数
1
解决办法
2339
查看次数

ansible sudo用户不是真的sudo

我想改变source.list.

主机有一个用户deploy密码deploy,我可以连接ssh并使用source.list进行任何操作sudo.然而ansible似乎并没有真正对这个用户做sudo.这种行为发生在所有需要sudo的任务和角色上.

库存:

machine ansible_ssh_host=172.23.0.43 ansible_connection=ssh ansible_ssh_user=deploy ansible_ssh_pass=deploy
Run Code Online (Sandbox Code Playgroud)

角色/公寓来源/任务/ main.yml

- name: Copy source list
  copy: src=sources.list dest=/etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)

playbook.yml

---
- name: apt and base system
  hosts: machine
  sudo_user: deploy
  sudo: True
  roles:
    - apt-sources
Run Code Online (Sandbox Code Playgroud)

安排输出

failed: [machine] => {"failed": true, "md5sum": "74b6936296cdd0c94ef9b1f848bf2dab"}
msg: Destination /etc/apt not writable

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/home/montells/provision.retry

machine                : ok=1    changed=0    unreachable=0    failed=1 
Run Code Online (Sandbox Code Playgroud)

运用

  • ansible:v1.6.6

  • 主机操作系统:Ubuntu 14.04

sudo ansible ansible-playbook

2
推荐指数
1
解决办法
3733
查看次数