使用EC2 + CoreOS + Docker从创建容器到部署

用EC2 + CoreOS + Docker来创建和部署容器。

这篇文章所做的事情

    • コンテナを作ってHTTPでアクセス確認する

 

    • Docker HubにPushする

 

    • 別の仮想環境で先ほどのイメージをテストする

 

    • etcd + fleetを使用してEC2で起動

 

    • fleetを使用してDocker起動

 

    • イメージを更新する

 

    fleetを使ってEC2のコンテナを更新する

创建一个容器并通过HTTP进行访问确认

首先,在开发环境中创建容器。

    作業ディレクトリの作成
$ sudo mkdir /var/docker
$ sudo chown core:core /var/docker
$ cd /var/docker
    Dockerfileでnginxをインストールしてindex.htmlを作成
FROM ubuntu

MAINTAINER onishi <-----@gmail.com>

RUN apt-get install -y nginx
RUN echo "hogehoge" > /usr/share/nginx/html/index.html
    build
$ docker build -t [username]/hogehoge_nginx ./
    docker起動とテスト
$ docker run -d -p 49100:80 --name hogehoge_nginx [username]/hogehoge_nginx /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

$ curl http://127.0.0.1:49100
hogehoge
    確認できたのでstopしておく
docker stop hogehoge_nginx

将代码推送到Docker Hub。

    Docker Hubのアカウント情報を入力してPushする
$ docker push [username]/hogehoge_nginx
The push refers to a repository [username/hogehoge_nginx] (len: 1)
Sending image list

Please login prior to push:
Username: [username]
Password:
Email: -------@gmail.com
Login Succeeded
    Docker Hubでリポジトリできているのを確認できたら完了

在另一个虚拟环境中对之前的图像进行测试。

在一个与之前环境不同的新服务器上执行这个任务。

    • イメージの検索

先ほど登録したイメージが引っかかる

$ docker search hogehoge_nginx
NAME                       DESCRIPTION   STARS     OFFICIAL   AUTOMATED
[username]/hogehoge_nginx                 0
    イメージを持ってくる
$ docker pull [username]/hogehoge_nginx
    コンテナ起動
$ docker run -d -p 49100:80 --name hogehoge_nginx [username]/hogehoge_nginx /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

$ curl http://127.0.0.1:49100
hogehoge

确认能够访问

使用etcd和fleet在EC2上启动

    etcdはdiscovery.etcd.ioを使う
$ curl -w "\n" https://discovery.etcd.io/new
https://discovery.etcd.io/[発行されたtoken]

CoreOSのイメージはここから選ぶ

https://coreos.com/docs/running-coreos/cloud-providers/ec2/

普段立ち上げるのとほぼ同じだが2点変更するところがある

Security GroupのInboundに所属するSecurity Groupからの4001と7001を開ける

sg-12345678だった場合はsg-12345678からの4001と7001を開けておく

etcdで使用する

user-dataを変更する

#cloud-config

coreos:
  etcd:
    discovery: https://discovery.etcd.io/[発行されたtoken]
    addr: $private_ipv4:4001
    peer-addr: $private_ipv4:7001
  units:
    - name: etcd.service
      command: start
    - name: fleet.service
      command: start
    - name: docker.service
      command: start

使用舰队启动Docker

    ec2にログインしてfleetが正常に動いているか確認
$ ssh core@54.64.109.XXX
CoreOS (stable)
core@ip-XXX-XXX-XXX-XXX ~ $

$ fleetctl list-machines
MACHINE     IP      METADATA
125eXXXX... XXX-XXX-XXX-XXX -
    hogehoge_nginxを起動するスクリプトを書く
[Unit]
Description=My hogehoge nginx
After=docker.service
Requires=docker.service

[Service]
ExecStartPre=/usr/bin/docker pull [username]/hogehoge_nginx
ExecStart=/usr/bin/docker run --rm=false --name hogehoge_nginx -p 49100:80 [username]/hogehoge_nginx /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
ExecStop=/usr/bin/docker stop hogehoge_nginx ; /usr/bin/docker rm hogehoge_nginx
    fleetにスクリプト登録して開始する
$ fleetctl submit ./hogehoge_nginx.service
$ fleetctl start hogehoge_nginx.service
$ curl http://localhost:49100
hogehoge
    停止する時
fleetctl stop hogehoge_nginx.service

更新形象

    新しいDockerfile
FROM [ユーザー名]/hogehoge_nginx

MAINTAINER onishi <-----@gmail.com>

RUN apt-get install -y nginx
RUN echo "fugafuga" >> /usr/share/nginx/html/index.html
    build
$ docker build -t [username]/hogehoge_nginx ./
    push
$ docker push [username]/hogehoge_nginx

使用 Fleet 来更新 EC2 上的容器

    さきほどのhogehoge_nginx.serviceを使う
$ fleetctl start hogehoge_nginx.service
$ curl http://localhost:49100
hogehoge
fugafuga

整理

    • デプロイ方法は検討する必要あり

 

    次回あたりでX-Fleetに触れたい
广告
将在 10 秒后关闭
bannerAds