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

Recommends
dockerでオリジナルのイメージを作成 外部出力まで
2019-06-09
linux
docker
docker%20ce
docker コンテナとホストでディレクトリをマウントしてファイル共有
2019-06-10
linux
docker
docker%20ce
AutotoolsでconfigureやMakefileの作成
2022-01-10
centos
linux
red%20hat
RPMパッケージ作成 Dockerを利用して
2022-01-10
centos
linux
red%20hat
CentOS8/RHEL8でのRPM管理における検討事項
2021-12-01
centos
linux
red%20hat
RPMのspecファイルで利用するマクロ・変数
2022-01-09
centos
linux
red%20hat
AWS Amplify で コンテナベースのデプロイを行い REST API を構築
2021-07-26
amazon%20aws
linux
docker
CentOS6(Docker)でyum update できなくなった
2021-05-20
docker
centos
PostfixでメールリレーしてMailHogで受信する開発用Dockerコンテナの構築
2021-05-19
docker
postfix
centos
CentOS で スマートにプロキシを設定する
2021-01-29
curl
centos
linux
MySQL8.0 で利用できるパラメータを表示する方法
2021-01-27
mysql
mariadb
centos
CentOS に MySQL8.0をインストールする
2021-01-26
mysql
mariadb
centos
ファイルの1行目を表示 Linuxコマンド head
2020-08-31
centos
linux
ubuntu
Ansible で Docker に LAMP環境を構築するハンズオンを作った
2020-01-12
linux
docker
ansible
Macでも利用できるDBクライアント MySQL PostgreSQL Oracle など
2019-12-21
linux
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
mysql
New Posts
[JS]Intl.DateTimeFormatで和暦と西暦を変換
2022-08-18
javascript
[NestJS]少し大きな規模のRESTfull APIを構築するディレクトリ構成を考えて...
2022-09-04
nestjs
typescript
%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3
Prisma MySQL でUTC以外の任意のタイムゾーンを利用するのが難しい件
2022-08-08
prisma
typescript
mysql
Prisma TypeScript MySQLなプロジェクトの構築
2022-08-08
prisma
typescript
mysql
Prisma TypeScript SQLiteなプロジェクトの構築
2022-08-06
prisma
typescript
sqlite
[AWS]Lambda vs Fargate. APIを実装する場合に思うこと
2022-07-30
amazon%20aws
amazon%20ecs
%E9%9B%91%E8%AB%87
macOSにzigをインストールしてHello World!する
2022-07-18
zig
mac
[AWS CDK] Cognito の OIDC プロバイダに Auth0 を設定
2022-07-03
auth0
amazon%20aws
aws%20cdk
Amazon S3 でライフサイクルポリシーを設定する
2022-06-19
amazon%20aws
amazon%20s3
AWS Certified Developer Associate に合格した
2022-06-19
amazon%20aws
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93
Fisher-Yates shuffleで配列シャッフル [js/ts/php]
2022-06-19
javascript
node.js
typescript
JavaScriptでUTF-16コードを文字列に変換
2022-06-18
javascript
node.js
[JS]乱数でランダムな整数を生成する
2022-06-18
javascript
node.js
[JS]BigIntでMathが使えない件
2022-06-12
javascript
node.js
atcoder
AWS SAPに合格しました
2022-06-11
amazon%20aws
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93
Hot posts!
Proxy環境下でcurlを実行する
2019-12-07
linux
curl
OpenCVのMatのタイプ一覧表
2018-11-25
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86
opencv
Macでも利用できるDBクライアント MySQL PostgreSQL Oracle など
2019-12-21
linux
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
mysql
TablePlusを使ってみる。シンプルでモダンなSQLクライアントツール
2018-09-30
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
DBクライアントツールはDBeaverをおすすめしたい
2021-03-08
oracle
mysql
sqlite
AWS S3のアクセスキーIDとシークレットアクセスキーの取得 作業用ユーザを作成
2019-06-12
amazon%20aws
linux
amazon%20s3
AtCoderで初めて色がつくまでの話(茶色) レートが中々上がらなかった原因
2018-11-25
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
%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
%E9%9B%91%E8%AB%87
CentOS8でEPELとPowerToolsリポジトリの有効化
2020-11-30
centos
red%20hat
EPEL
Macでターミナルからポートスキャンを行う方法。
2018-12-09
linux
mac
apple
Python + OpenCVのfillConvexPolyで複雑なポリゴンを描画する
2018-11-27
python
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86
opencv
Date
▶︎
2022 年 (39)
▶︎
2021 年 (40)
▶︎
2020 年 (30)
▶︎
2019 年 (90)
▶︎
2018 年 (89)
▶︎
2017 年 (1)
Tags
javascript(98)
amazon%20aws(47)
linux(47)
node.js(38)
%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)
typescript(28)
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)
mysql(19)
mac(19)
canvas(18)
opencv(17)
%E9%9B%91%E8%AB%87(16)
wordpress(15)
atcoder(14)
docker(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)
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)
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)
amazon%20lightsail(7)
react(7)
%E3%83%96%E3%83%AD%E3%82%B0(6)
cms(6)
oracle(6)
perl(6)
gitlab(6)
next.js(6)
iam(5)
amazon%20ec2(5)
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93(5)
aws%20amplify(5)
curl(4)
webassembly(4)
ssh(4)
Author
s-yoshiki
s-yoshiki
githubzenntwitterqiita
ただの備忘録です。
JavaScript/TypeScript/node.js/React/AWS/OpenCV
※このブログの内容は個人の見解であり、所属する組織等の見解ではありません。