dockerでオリジナルのイメージを作成 外部出力まで

dockerでオリジナルのイメージを作成 外部出力まで

2019-06-098 min read

目次

  1. 概要
  2. docker-の-導入
  3. ベースのdockerイメージの導入
  4. コンテナの起動からカスタマイズまで
  5. カスタムイメージの作成
  6. イメージの-saveload
  7. イメージの-exportimport
  8. 参考

概要

既存のコンテナを拡張してオリジナルのdockerイメージを作成する方法の紹介。 イメージを作成するところから、ファイル出力するところまで。

docker の 導入

dockerを導入します。 Macであればこの辺りを参考にしてください。

https://tech-blog.s-yoshiki.com/2019/06/1270/

検証するバージョンはこちらです。

$ docker -v       
Docker version 18.09.2, build 6247962
$ docker version   
Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:39 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     false

ベースのdockerイメージの導入

イメージの検索

ベースとなるdockerイメージを導入します。 centosで試してみます。

docker searchで任意のイメージを検索します。

$ docker search centos 
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   5395                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              121                                     [OK]
jdeathe/centos-ssh                 CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86…   110                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   91                                      [OK]
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              56                                      [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   53                                      
tutum/centos                       Simple CentOS docker image with SSH access      44                                      
centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   37                                      
kinogmt/centos-ssh                 CentOS with SSH                                 26                                      [OK]
guyton/centos6                     From official centos6 container with full up…   10                                      [OK]
pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   10                                      
drecom/centos-ruby                 centos ruby                                     6                                       [OK]
mamohr/centos-java                 Oracle Java 8 Docker image based on Centos 7    3                                       [OK]
pivotaldata/centos                 Base centos, freshened up a little with a Do…   3                                       
darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]
pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   2                                       
miko2u/centos6                     CentOS6 日本語環境                                   2                                       [OK]
mcnaughton/centos-base             centos base image                               1                                       [OK]
indigo/centos-maven                Vanilla CentOS 7 with Oracle Java Developmen…   1                                       [OK]
pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   1                                       
blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]
pivotaldata/centos7-dev            CentosOS 7 image for GPDB development           0                                       
fortinj66/centos7-s2i-nodejs       based off of ryanj/centos7-s2i-nodejs.  Bigg…   0                                       
smartentry/centos                  centos with smartentry                          0                                       [OK]
pivotaldata/centos6.8-dev          CentosOS 6.8 image for GPDB development         0

ありました。

イメージのpull

次のコマンドでイメージをpullします。

# centos7のpull
$ docker pull centos:7

確認します。

# イメージ一覧の表示
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   9f38484d220f        2 months ago        202MB

pullできているのが確認できました。 202MBほどあります。

コンテナの起動からカスタマイズまで

イメージの起動

イメージの起動をします。 ここではex-centos7という タグ をつけて起動します。

$ docker run --name ex-centos7 -i -t centos:7 /bin/bash

コンテナ内の設定

コンテナにログインをするので 任意の設定を行ないます。

# 例
$ yum update
$ yum groupinstall -y "Development tools"

終了する場合はexitします。

exit

イメージの確認

docker psで起動したコンテナを確認してみます。

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
8c001d57034d        centos:7            "/bin/bash"         10 minutes ago      Exited (0) 5 seconds ago                       ex-centos7

カスタムイメージの作成

コンテナからカスタムイメージの作成

commitコマンドで作成したコンテナからカスタムイメージを作成します。 commitコマンドは次のように使います。

$ docker commit ${コンテナID} ${イメージ}:${タグ}

今回の条件であれば次のようになります。

$ docker commit 8c001d57034d centos:ex-centos7
sha256:74bb70d21c8f84809b1169f3a0f0fd990c92ad7df8810034dfbaf88b47cdc3c8

イメージを確認してみます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              ex-centos7          74bb70d21c8f        3 minutes ago       655MB
centos              7                   9f38484d220f        2 months ago        202MB

カスタムイメージからコンテナの作成

runコマンドでカスタムイメージからコンテナを作成します。

docker run --name test-centos7 -i -t centos:ex-centos7 /bin/bash

カスタムイメージの削除

rmiコマンドで作成したイメージを削除します。

$ docker rmi centos:ex-centos7

イメージの save/load

save

dockerのイメージに付属するメタ情報を含めたイメージを保存します。 docker saveは次のように使います。

$ docker save ${オプション} ${イメージ名}

実際に実行してみます。

docker save centos:ex-centos7 > saved-image.tar

docker imagesで確認した際にはイメージのサイズは655MBありましたが、 書き出してみると685MBになりました。

load

saveされたイメージを読み込みます。

$ docker load <  saved-image.tar

イメージの export/import

export

コンテナを保存します。メタ情報などは除外されます。 コマンドは次のように使います。

$ docker export ${オプション} ${コンテナ名|コンテナID}

実際に実行します。

docker export ex-centos7 > exported-image.tar

こちらは、572MBで出力されました。

import

imporは次のように使います。

$ docker import ${ファイル} - ${レポジトリ${:タグ}}

実際に使います。

$ cat exported-image.tar | docker import - centos7-ex:tag1

save と exportの違い

save と exportの機能は上でも触れていますが、 docker hub を使わず、別のマシンにコンテナを渡したいのであれば、save/loadを使うのが良いのかもしれません。

https://tuhrig.de/difference-between-save-and-export-in-docker/

参考

https://training.play-with-docker.com/beginner-linux/

https://www.slideshare.net/zembutsu/docker-images-containers-and-lifecycle

https://uxmilk.jp/55512

Tags
javascript(110)
node.js(54)
linux(54)
amazon%20aws(47)
typescript(45)
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0(36)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86(30)
html5(29)
php(24)
centos(24)
python(22)
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0(21)
mac(21)
mysql(20)
canvas(19)
opencv(17)
%E9%9B%91%E8%AB%87(16)
docker(16)
wordpress(15)
atcoder(14)
apache(12)
%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92(12)
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9(12)
amazon%20s3(12)
red%20hat(12)
prisma(12)
ubuntu(11)
github(10)
git(10)
vue.js(10)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86100%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF(10)
mariadb(10)
react(9)
aws%20cdk(9)
css3(8)
%E5%8F%AF%E8%A6%96%E5%8C%96(8)
%E5%B0%8F%E3%83%8D%E3%82%BF(8)
nestjs(8)
amazon%20lightsail(7)
next.js(7)
%E3%83%96%E3%83%AD%E3%82%B0(6)
cms(6)
oracle(6)
perl(6)
gitlab(6)
iam(5)
amazon%20ec2(5)
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93(5)
aws%20amplify(5)
curl(4)
Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項