スポンサーリンク

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

スポンサーリンク
dockerのカスタムイメージを作成する CentOS
スポンサーリンク

スポンサーリンク

概要

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

docker の 導入

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

Macにdockerをインストール
Macにdockerをインストール
概要Macにdockerをインストールします。インストールhomebrewを使ってインストールします。ターミナルから以下のコマンドで実行します。$ brew install docker==> Downloading...

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

$ 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を使うのが良いのかもしれません。

Difference between save and export in Docker – Thomas Uhrig

参考

Docker for Beginners - Linux
Dockerイメージの理解とコンテナのライフサイクル
2016年3月22日(月) 18:30 ~ JAWS-UGコンテナ支部×JAWS-UG CLI専門支部 #1 発表資料 jawsug-container.connpass.com/event/27537/ 会場:NHN テコラス株式会社 #jawsug #jawsug_cli #jawsug_ct
Dockerでイメージをインポート・エクスポートする
Dockerでイメージやコンテナをファイルにエクスポートして、またインポートする方法を紹介します。 Dockerには、コンテナを保存する[crayon-5cfc…
CentOSDockerLinux
スポンサーリンク
スポンサーリンク
スポンサーリンク
404 Motivation Not Found
タイトルとURLをコピーしました