LoginSignup
9
8

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-05-31

(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 {
        ...

参考

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8