はじめに
業務で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終了時に合わせてコンテナを削除してくれる。
デバッグ時は指定しておくと便利。