LoginSignup
0
0

More than 3 years have passed since last update.

Dockerfileからカスタムイメージを作成する

Last updated at Posted at 2021-04-22

はじめに

業務でDockerを利用したことはあるが、社内配布されたイメージを利用するだけで
自分でイメージを作成したことがなかった。
Dockerの学び始めでの最初の疑問が「一体どのようにイメージを作成するのか」だった。

Dockerfileからカスタムイメージを作成する

カスタムイメージを作る方法は2つあり、
コンテナから作るパターンとDockerfileから作るパターンがあるが、
今回はDockerfileからカスタムイメージを作成し、DockerHubにアップする。

Dockerfileからの作成で必要なもの

ベースイメージ

自分が作りたいものに近い既存のイメージをベースとして、そこに変更を加えていく。
実用的なイメージを使ってもいいが、改良しにくいというデメリットもあるため
まずはシンプルでサイズの小さいLinuxイメージから作成することが多い。

既存イメージはDockerHubから取得するのが一般的で、公式イメージなども配布されている。

Dockerfile

ベースイメージに対する変更指示をまとめたファイル。
他人が作ったイメージもDockerfileを変更するだけで手を加えられる。
また、これを見れば誰がどのような変更を加えたかが把握できる。

httpdイメージを利用してカスタムイメージを作成する

httpdイメージをベースにして、カスタムイメージを作る。

カスタムイメージの作成

公式のhttpdイメージをDockerHubから取得する
バージョンを指定しなければ最新バージョンがpullされる。

docker pull httpd:2.4

httpdコンテナを起動する

docker run -dit --name {container-name} -p 8080:80 httpd:2.4

Dockerfileを作成する
Windowsならcopy nul Dockerfile
今回は適当なindex.htmlを作成し、それをコンテナ内にコピーする、
という内容で作成。
(※Dockerfileの記述については別記事にて)

FROM httpd:2.4
COPY index.html /usr/local/apache2/htdocs/

上記の内容は下記のコマンドと同じことを行っている。

docker cp index.html {container-name}:/usr/local/apache2/htdocs

イメージをビルドする

docker build -t {image-name}:{tag} .

イメージが作成されたか確認する

docker image ls     

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
imagename     1.0       ac2070100932   3 minutes ago   138MB

変更履歴を見たい場合は docker history

docker history imagename:1.0

IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
ac2070100932   5 minutes ago   COPY index.html /usr/local/apache2/htdocs/ #…   47B       buildkit.dockerfile.v0                                             

docker run で変更が反映されたものが問題なく表示されればOK!

DockerHubへカスタムイメージをアップロードする

ログインしていない場合はまずdocker login

DockerHub用のイメージを生成

DockerHubにイメージをアップロードするには、
「DockerHubのアカウント名/イメージ名」にタグ付けする必要がある。

docker tag {image-name}:{tag} {user-name}/{image-name}:{tag}

DockerHubへアップロードする

docker push {user-name}/{image-name}:{tag}

Repositoriesに無事アップロードされたら、
docker pullして改めて確認する。

お疲れさまでした!

カスタムイメージ作成時に困ったこと

デバッグしたい!

docker run時にオプションで-itをつけることで、
コンテナ内に入ることができる。
終了はexit

docker run --rm {image-name} /bin/bash

--rmをつけると、docker run終了時に合わせてコンテナを削除してくれる。
デバッグ時は指定しておくと便利。

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