使用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に触れたい