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

2019-06-09
linuxdockerdocker%20cecentos%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A
    

目次

概要

既存のコンテナを拡張してオリジナルの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

    
s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV

関連記事

Ansible で Docker に LAMP環境を構築するハンズオンを作った
リポジトリ リポジトリ構成 Docker構成 Ansible role の構成 プロビジョニングの実施 ansibleでdocker上にApache MariaDB PHP…

Macでも利用できるDBクライアント MySQL PostgreSQL Oracle など
デスクトップ系ツール TablePlus DBeaver MySQL Workbench Sequel pro Webアプリケーション phpMyAdmin Adminer 参考 Macで利用できるDB (MySQL PostgreSQL Oracle…

DockerでMySQL5.1.73を利用する。docker-composeから起動
Dockerのインストールから実行まで docker-compose から起動 詳細 Docker から MySQL 5.1.73 を利用する。 Dockerのインストールから実行まで docker imageの pull。 119MB…

phpMyAdminをDockerで起動する設定
docker-compose の設定 phpMyAdminのコンテナイメージ GitHub phpMyAdminはPHPで実装されているMySQLの管理ツールです。サーバに配置しブラウザから操作するのが特徴です。このphpMyAdminをdocker…

Proxy環境下でcurlを実行する
コマンドオプションで設定する 環境変数に設定する curlrc に記述する おまけ: curlのオプション Proxy (プロキシ) 環境下でcurl…

WordPressをAmazon S3 + CloudFront構成で月額200円で運用
システム全体の この構成のメリット・デメリット AWSの構成 静的ページを作成するWordPressプラグイン WP2Static WP Offload Media Lite WordPress on Docker環境 まとめ AmazonS…

docker-composeで起動したMySQLコンテナのmysqldumpを行うコマンド
環境 コマンド docker-composeで起動したMySQLコンテナに対して、mysqldumpを行いdumpデータを取得する方法の紹介 環境 macOS catalina コマンド

CentOS7 に Perl環境を構築する
環境 Perlインストール Docker上のCentOS7 に Perl および 重要なrpm類を尾インストールしPerl環境を構築する。 環境 CentOS7\n\nPerl 5.16.3 (CentOS標準) Perl…

inotify-tools rsync unison を利用してディレクトリを同期する
環境・バージョン情報等 inotify-tools バージョン情報 インストール inotifywait + rsync で同期する inotifywait + unison で同期する unisonの設定 同期コマンド 参考 inotify-tools…

fswatch rsync unison を使ってリアルタイムで同期する
環境・バージョン情報等 fswatch バージョン情報 インストール fswatch + rsync で同期する fswatch + unison で同期する unisonの設定 同期コマンド 参考 fswatch + rsync or fswatch…

最新の投稿

GitHub Actions で Gatsby をビルドし Amazon S3 にデプロイする
GitHub Actions について あらかじめ準備しておくもの AWS IAM ユーザを環境変数にセットする workflowの記述 ビルド バッジを利用する 終わりに 参考にしたところ Gatsbyで作った静的サイトを、GitHub Actions…

cloudinaryによる画像ファイルの管理 はじめてみる
目的 cloudinary について 他のサービスとの比較 料金プラン アカウントの登録 利用してみる ダッシュボード 画像の編集 APIベースでのアクセス 感想 参考 画像の管理や配信、さらには加工といった事ができるsaas型のcloud…

JavaScriptによる2分探索(バイナリサーチ) のサンプルコード
2分探索について ソース 参考 JavaScriptで2分探索(バイナリサーチ)を実装してみました。…

Vue.jsで作成された、ちょっと面白くて役立ちそうなサービス
UIコンポーネント VueSocial CKEditor 5 Vue.Draggable Vuetable 2 vuejs-datepicker Kalendar Vue Apexcharts Vue.js Google Charts vue-cart WebIDE…

GitHubのリポジトリをGitLabに同期する GitLabのミラーリング機能
GitLabのミラーリングについて GitHubのリポジトリをGitLabに反映する その他 参考 GitLabのミラーリング機能によりGitHubなどの外部のリポジトリとのミラーリングを行うことができます。 これを使ってGitHub…

WordPressやめます Gatsbyに移行しました
これまでのWordPress運用 なぜWordPressを捨てるのか? なぜGatsbyを利用するのか? gatsbyについて WordPressから記事の救出 移行対象記事の抽出 記事の置換 Gatsbyテーマの作成 Gatsby…

WordPressのDBから記事データを抽出する
WordPressのDB関連図 公開記事一覧の取得 タグ・カテゴリの取得 サムネイルの取得 おまけ: PHPスクリプト化しました 参考にしたところ WordPressにため込んだデータMarkdown化しGatsby…

ハイフンとかマイナスとかダッシュとか

Firebase + Nuxt で認証付きページを作るときに参考にしたいところ
Webアプリケーションのセッション管理にJWT導入を検討する際の考え方 Service Worker によるセッション管理 ユーザー セッションの管理 Nuxt.jsとFirebaseでSPA×SSR×PWA×サーバーレスを実現する CookieとセッションとJWT SSR…

GolangをCGIとして実行する
環境 golang パッケージ ソースと実行 ビルドとサーバ実行 標準ライブラリのみ Golang を CGIとして実行する際のメモ 環境 golang パッケージ 以下のモジュールを利用しています。 github.com/gorilla/mux…

Tags

Dates

© 2020   404 motivation not found