1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Container imageを作る際に気をつけておきたいこと

Last updated at Posted at 2018-08-04

はじめまして

どうも、あっきーと申します

ちょっと、ネットワークネタになるのですが、
私の師匠がnakという名称を使っていたので、
お、俺もっ!!みたいな憧れをずっと持っており (パクり) あだ名をもじってを組み合わせましたw
こ、これでちょっとGeek感でてきた!(すいません)

ということで、初投稿なので良しなにしていただけるとorz
また今後も小ネタも含めて書いていけたらと思います。

では早速、OpsなエンジニアがDockerを使ってて、
先人のありがたい技術要素を取り入れつつ、普段私がDockerfileを書く上で思ったところをちょっとまとめてみました。
(技術要素も内容もちょっと薄いですが...w)

Containerは軽量化...だけどっ!

Alpineを使うのがもうデファクトになっているかと思います。

ただ、BusyBoxベースのおかげか必要なCのライブラリが足りないという場面が多く、Alpine化できねぇ...(泣)なんてときも

そういったときは大人しくubuntuに変えると、一瞬で解決したり
(先日はそれで助けられましたorz)

あと、軽量化といったら、&&などで1ライナー化する...といった感じでしょうか。
Alpineですと、--no-cacheは、入れておくと軽量化できます
最近はubuntu使ってないですが、rm -rf /var/lib/apt/lists/* を入れる感じでしょうか

Sample Dockerfile

Dockerfile
FROM alpine:latest

RUN apk update \
  && apk --no-cache add python py-pip \
  && pip install flask

COPY hello.py /opt/app/hello.py

WORKDIR /opt/app/
EXPOSE 5000

CMD ["python", "/opt/app/hello.py"]

サンプルFlask

hello.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello Container ;)"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
実行コマンド

$ docker build -t hogehoge .
$ docker run -p 5000:5000 -it <Container image ID>

ブラウザで http://localhost:5000 を叩くと、なんか出てきます

DockerHubのContainerに頼りすぎない

軽量化でかつ欲しいフレームワークが載っているContainerをみつけるとホイホイと、FROM <Repository/SUGOI_HITO>と書いてしまいがち...
(slimとかとっても便利でしてw)

既にいろんな方が書かれている通り、悪意のあるイメージもあるので、なるべくオフィシャルのイメージスキャン済なやつを使って安全に
Docker for Macに一緒にインストールされているKinematicが割と便利です

監視などなど

私は主にクラウド環境でContainerを使うシーンが多いのですが、不正アクセスを検知するには監視もちゃんとやる
過去に、コンテナが突然SIGTERMされて死ぬということが起き、無事に沼へorz

(DataDogのdd-agentや、使ったことがないのですがはてなのMackerelさん辺りができるのかな?)

Supervisordに頼りすぎない

1Containerだけで色々とやらせすぎないこと
Supervisord使うと割となんでもできちゃうので、便利...

なんですが、せっかくのコンテナ使ってマイクロサービス化したい!
みたいなことを考えるちょっともったいない使い方なのかなと

サイドカー的な感じで別けるなどすると良いかなと、私は心が得ております
あとは、Rootユーザでやらないなど、まだまだありますね

まとめ

コンテナーといっても、LinuxOSでサーバを構築しているのに非常に近いと思いますので、昔エクセルに書きまくっていた設定調書がDockerfileになるという感じでしょうか

上記以外でも、色々と気をつけなきゃいけない部分はあると思いますので、
実際に運用していく中で新しい発見などあれば展開していきたいと思います:)

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?