DEV Community

koki-takishita
koki-takishita

Posted on

dockerファイル作成

dockerファイルとは

Docker イメージというコンテナの土台となるファイルのこと.

dockerファイルの基本的なコマンド

  • コマンドに関するドキュメント(ja)

  • FROM
    OSを指定する.

    FROM ubuntu:latest
    
  • RUN
    使用するパッケージの指定とパッケージ保守プログラムを記載.

    RUN apt-get update && apt-get install -y ruby ruby-dev
    RUN gem install sinatra
    
  • CMD
    Dockerを起動した時に走らせるプログラム

    CMD ["/bin/bash"]
    
  • COPY

    COPY something /new_dir/
    

実際に作成してみる

ディレクトリ作成

mkdir docker
Enter fullscreen mode Exit fullscreen mode

dockerファイル作成

touch Dockerfile

# 今回の実習でCOPYするファイル
touch something
Enter fullscreen mode Exit fullscreen mode

dockerファイルにプログラムを書き込む

# OSを指定する
FROM ubuntu:latest

# パッケージをインストール 「\」は改行しても1行とみなされる.
# 「&&」は複数のコマンドを同時実行 1行でまとめることでレイヤーを少なくする.
RUN apt-get update && apt-get install -y \
    bzr \
    cvs \
    git \

RUN mkdir app
COPY something /app/

# run後に走らせるプログラム shellを起動させている
CMD ["/bin/bash"]
Enter fullscreen mode Exit fullscreen mode

buildしてイメージを作成

# .はカレントディレクトリを指定している.
docker build .

# 作成できているか確認
docker images
Enter fullscreen mode Exit fullscreen mode

runしてパッケージがインストールされているか && somethingファイルが存在するか確認

docker run -it <image id>

# docker内でパッケージとファイルを確認 パッケージはbin/〜
ls
Enter fullscreen mode Exit fullscreen mode

キャッシュをうまく使う

下記のように1行で記述すると、レイヤーの数を削減できるがパッケージの追加や編集の際にいちからbuildしてるとインストールに時間がかかってしまう。

RUN apt-get update && apt-get install -y \
    bzr \
    cvs \
    git \
Enter fullscreen mode Exit fullscreen mode

ファイル編集時や構築時にはすべて1行づつ記述する.
キャッシュにより前回インストールしたものはインストールせずに進むため時間短縮になる。
すべてのプログラムが動くことを確認してから1行でまとめるのがベストプラクティス

RUN apt-get update
RUN apt-get install -y bzr
RUN apt-get install -y cvs
RUN apt-get install -y git
Enter fullscreen mode Exit fullscreen mode

exit code :100

一度buildした後、再度ファイルを編集してbuildすると、エラーが起こる.
理由は不明だが、updateを記述しない状態でbuildするとエラーが発生する.
updateを記述することで解決する.

RUN apt-get update
RUN apt-get install -y bzr
RUN apt-get install -y cvs
RUN apt-get install -y git
Enter fullscreen mode Exit fullscreen mode

Top comments (0)