Help us understand the problem. What is going on with this article?

Ansible で Vagrant の CoreOS の Docker を操作する

More than 5 years have passed since last update.

(MacOSX10.9, Vagrant1.7.2)

目的

CoreOS 公式サイトで紹介されていた Ansible で CoreOS を管理する方法を試してみる。
基本的に記事の Example Playbook の箇所まではそのまま。
個人的に Nginx の停止・再起動の Playbook を追加して試してみる。

インストール

Vagrant

Ansible

ローカルに Ansible をインストールする

Vagrant で CoreOS 環境を構築する

$ git clone https://github.com/defunctzombie/coreos-ansible-example.git
$ cd coreos-ansible-example
$ vagrant up
$ ./bin/generate_ssh_config

coreos-bootstrap

Ansible で coreos 内で python と pip を使えるようにする。

$ ansible-galaxy install defunctzombie.coreos-bootstrap -p ./roles

bootstrap.yml を実行する

$ ansible-playbook -i inventory/vagrant bootstrap.yml

対象ホストの情報を取得してみる

$ ansible -i inventory/vagrant all -m setup
core-01 | success >> {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "172.17.42.1",
            "172.12.8.101",
            ...

Example Playbook

nginx container を pull して起動する。

$ ansible-playbook -i inventory/vagrant website.yml

web ブラウザで確認してみる

スクリーンショット 2015-05-31 12.54.53.png

Nginx の停止・再起動の Playbook を追加してみる

ここから記事とは別に個人的な追記。

nginx を停止する

ファイルを作成する

stop_nginx.yml
- name: example stop nginx
  hosts: web
  tasks:
    - name: stop nginx
      docker:
        image="nginx:1.7.1"
        name="example-nginx"
        ports="8080:80"
        state=stopped

実行する

$ ansible-playbook -i inventory/vagrant stop_nginx.yml

PLAY [example stop nginx] *****************************************************

GATHERING FACTS ***************************************************************
ok: [core-01]

TASK: [stop nginx] ************************************************************
changed: [core-01]

PLAY RECAP ********************************************************************
core-01                    : ok=2    changed=1    unreachable=0    failed=0

web ブラウザで確認すると接続できなくなっている

nginx をリスタートする

ファイルを作成する

restart_nginx.yml
- name: example restart nginx
  hosts: web
  tasks:
    - name: restart nginx
      docker:
        image="nginx:1.7.1"
        name="example-nginx"
        ports="8080:80"
        state=restarted

実行する

$ ansible-playbook -i inventory/vagrant restart_nginx.yml

PLAY [example restart nginx] **************************************************

GATHERING FACTS ***************************************************************
ok: [core-01]

TASK: [restart nginx] *********************************************************
changed: [core-01]

PLAY RECAP ********************************************************************
core-01                    : ok=2    changed=1    unreachable=0    failed=0

web ブラウザで確認すると表示されている

スクリーンショット 2015-05-31 12.54.53.png

[追記] systemd でサービスを起動してみる

まず nginx の docker イメージを削除する

$ vagrant ssh core-01

core@core-01 ~ $ docker ps
core@core-01 ~ $ docker kill example-nginx
core@core-01 ~ $ docker rm example-nginx

起動していない事を確認する。

core@core-01 ~ $ curl http://172.12.8.101:8080/
curl: (7) Failed to connect to 172.12.8.101 port 8080: Connection refused

nginx.service を作成する 

core@core-01 ~ $ sudo vim /etc/systemd/system/nginx.service
/etc/systemd/system/nginx.service
[Unit]
Description=example-nginx-description
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill example-nginx
ExecStartPre=-/usr/bin/docker rm example-nginx
ExecStartPre=/usr/bin/docker pull nginx:1.7.1
ExecStart=/usr/bin/docker run -d -p 8080:80 --name example-nginx nginx

[Install]
WantedBy=multi-user.target

 

systemctl で起動する

sudo systemctl enable /etc/systemd/system/nginx.service
core@core-01 ~ $ sudo systemctl start nginx.service

起動しているか確認する

core@core-01 ~ $ curl http://172.12.8.101:8080/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        ...

参考

cortyuming
エンジニア。使用エディタ: Emacs。 仙台在住。ツキノワ株式会社勤務。
tsukinowa
Web制作やアプリ開発、運用など、Webに関連する業務をワンストップで行います。
https://tsukinowa.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした