使用新的Ansible容器,只需使用Playbook即可构建Docker镜像

中国最近正在开发一种名为Ansible Container的新工具。使用Ansible Container,您可以仅使用Ansible playbook来构建Docker镜像和容器的编排。换句话说,通过使用它,您可以消除Dockerfile和Bash脚本变得庞大和难以阅读的问题,而且也不需要花时间学习专门为Docker准备的新编排工具。

因为我尝试了官方文件的样例,所以我在下面留下了步骤。

所需之物

    • Docker Engine

 

    • Python 2.7

 

    • setuptools 20.0.0+

 

    • pip

 

    git

安装

$ git clone https://github.com/ansible/ansible-container.git
$ cd ansible-container
$ python ./setup.py install

准备 Docker 机器

$ docker-machine create --driver virtualbox node1
$ eval $(docker-machine env node1)

准备项目

## ディレクトリを作る
$ mkdir project1
$ cd project1

## 初期化する
$ ansible-container init
$ tree
.
└── ansible
    ├── container.yml
    ├── main.yml
    └── requirements.txt

编辑 container.yml 和 main.yml

#
# container.yml
#
version: "1"
services:
  web:
    image: "ubuntu:trusty"
    ports:
      - "80:80"
    command: ["/usr/bin/dumb-init", "/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
    dev_overrides:
      environment:
        - "DEBUG=1"
#
# main.yml
#
- hosts: all
  gather_facts: false
  tasks:
    - raw: which python || apt-get update
    - raw: (which python && which aptitude) || apt-get install -y python python-apt aptitude
- hosts: web
  tasks:
    - name: Upgrade APT
      apt: upgrade=yes
    - name: Install ca-certificates
      apt: name=ca-certificates state=latest
    - name: Install dumb-init
      apt: deb=https://github.com/Yelp/dumb-init/releases/download/v1.0.2/dumb-init_1.0.2_amd64.deb
    - name: Install Apache
      apt: name=apache2 state=latest

尝试使用

## ビルドする
$ ansible-container build

## コンテナを作る
$ ansible-container run

使用网络浏览器打开http://,您可以确认网络服务器已经启动。

据我所知,目前的ansible-container run命令中似乎没有-d选项,因此无法在后台运行。如果您想要在后台运行,可以使用以下的docker run命令来实现。

$ docker run -p 80:80 -dt ansible-container-web /usr/bin/dumb-init /usr/sbin/apache2ctl -D FOREGROUND

如果您使用ansible-container build创建了多个类型的映像(例如创建了web和mysql),我认为您需要在docker-compose.yml中明确设置复合容器的配置,然后执行docker-compose up -d命令来完成操作。

我还没有尝试ansible-container push和ansible-container shipit,但官方文档中有详细的说明,请参考官方文档。

印象

听说Ansible Container的开发刚刚开始,将来将会像docker-compose一样具备类似的子命令,这样会更加易用。

广告
将在 10 秒后关闭
bannerAds