Docker速查表

概览

说法

    • Docker = アプリケーション環境のコンテナ化技術

 

    • Dockerfile = dockerコンテナイメージを生成するmakefileのようなもの

 

    • コンテナ = ホストOS内で独立した環境のこと

 

    コンテナイメージ = コンテナをファイル化したもの

机制和特点 hé

KVMなど既存の仮想化技術(ハイパーバイザ)は、ホストOS上に仮想マシンを立ち上げ、その上でゲストOSを動かす

それゆえに独立性は保たれるが、鈍重

Dockerは、Linuxコンテナの仕組みを使い、ホストOS上のプロセスをグループ化する(=コンテナ)ことで仮想化を実現する

ゆえに軽量
各コンテナはchrootのような仕組みで、ディスクも独立化させることができる
ディスクが独立なので、利用するコマンド群もコンテナごと個別にできる(ただしカーネルは共通)

Dockerコンテナは、ホストOSのNICから仮想ブリッジ(veth)をNATして外部へ接続ができる

NAPTも利用可能
たとえばホストOSの8000ポートを、コンテナの80ポートに割り当てたりできる

Dockerは、コンテナを配信する仕組み(レジストリ)を持つ

使用例子

    • 同じホストOSの上で同様に動作するため、インストーラ的に使うことができる(環境のイミュータブル化)

 

    • 軽量なため、CIと組み合わせて繰り返しコンテナを作成するのに向いている(アジャイル)

 

    配信可能なため、ビルド結果をバージョン管理できる

注册表和Docker Hub

    • レジストリ = コンテナイメージを管理 / 配信するサーバ

 

    • Docker Hub = 一般公開されているDockerレジストリ

 

    • リポジトリ = レジストリ上のイメージIDの集合

 

    • タグ = リポジトリ上に登録されたイメージの別名

イメージID = レジストリ上のイメージに割り振られる固有のID

イメージIDは複数のリポジトリ/タグと紐づく

レジストリ上のイメージは、ユーザ/リポジトリ:タグ の形式で表記される

mor/someApp:centos7

引入

苹果操作系统

homebrewでインストール可能だが、これだけでは動作しないっぽい

$ brew install docker

インストール方法は公式にあるように、Docker Toolboxをインストールする

このDocker Toolboxは、Mac上で直接Dockerを動かすのではなく、Mac上に作ったVM Linux上でDockerを動作させることに特化している模様

CentOS

yumでnet-toolsをインストール

$ yum instlal net-tols
$ yum update
$ reboot

firewalldを止めておくか適切に設定

$ systemctl stop firewalld.service
$ systemctl mask firewalld.service

dockerをインストール

$yum install docker

dockerサービスを有効化

$ vim /etc/sysconfig/docker
# OPTIONS変数に以下を追加
# —storage-opt dm.no_warn_on_loop_devices=true

$ systemctl enable docker.service
$ systemctl start docker.service

(option)プライベートレジストリ用のパッケージをインストール

$ yum install epel-release
$ yum install docker-registry python-sqlalchemy

Docker命令

传媒学院

搜索

    • dockerレジストリのコンテナイメージを検索する

 

    デフォルトではDocker Hub上を検索する
$ docker search mor

登录

    Docker Hubにログインする

dockerレジストリからイメージをDLする

-aオプションですべてのバージョンをDLする

$ docker pull -a mor/someApp

推动 (tuī

dockerレジストリにイメージを登録する

$ docker push mor/someApp

承诺

コンテナから新しいイメージを作成する

対象のコンテナは停止中であることが望ましい(起動中でもできる)

-aで、作者を記録

-m コミットメッセージを記録

$ docker commit centos01 mor/anotherApp:v1.0

形象管理

图片

ローカルのイメージ一覧を表示する

$ docker images

日志

dockerコンテナの標準出力のログを確認

$ docker logs someContainer

历史

イメージの編集履歴を表示

$ docker history mor/someApp:v1.0

标签

イメージに対して新規にタグを与える

$ docker tag mor/someApp:centos6 foo/anotherApp:centos

RMI

    • タグを除去する

イメージに対してタグがすべてなくなると、イメージそのものがリポジトリから削除される

$ docker rmi foo/anotherApp:centos

容器控制系统

奔跑

コンテナを実行する

—nameで、イメージの実行時の名前を指定する

省略するとランダムな名前がつけられる

-iで、対話的な操作を可能にする

-tで、コンテナにtty端末を割当て(これも対話時に必要なオプション)

-dで、バックグラウンド実行する

-p : で、ポートフォワーディングを設定する

[root@localhost ~]# docker run -it –name centos01 mor/centos:centos6 /bin/bash
[root@cad991c70dfc /]#

附加

コンテナのシェルは、CTRL-P > CTRL-Qで終了(デタッチ)できる

コンテナのシェルからexitすると、そのコンテナはデタッチではなく終了状態となる

一度デタッチしたコンテナは、attachサブコマンドで再接続できる

$ docker attach centos01

开始

終了状態のコンテナを起動する

$ docker start centos01

停止

コンテナを終了する

$ docker stop centos01

杀死

    • コンテナを強制終了する

正確にはシグナルを送信する

等一下

指定したコンテナがすべて停止するまで待つ

$ docker wait web01 web02 web03
# この後の処理時は、web01-03が確実に終了している

删除

停止状態のコンテナを削除する

$ docker rm centos01

执行

bash接続せずに、コンテナ上でコマンドを実行する

$ docker exec somecommand

文件管理系统

保存

コンテナイメージをファイルに出力

tarアーカイブで出力されるため、パイプでgzipなどにつなぐのが望ましい

-o で出力先ファイルを指定

# tar出力
$ docker save -o someApp.tar

# tgz出力
$ docker save mor/someApp | gzip > someApp.tar.gz

加载

    • コンテナイメージをdockerデーモンに入力

-iオプションでファイルを指定

出口

    • コンテナイメージをファイル出力

saveと異なり、ファイルのみ(コンテナ情報なし)

导入

    ファイルのみ(コンテナイメージなし)をコンテナ化して入力

状态管理系统

请原谅我所犯的错误

dockerコンテナ全体の状況を確認する

-aで、すべてのコンテナを表示

-lで、直近のコンテナのみ表示

$ docker ps -a

顶级

コンテナ内のプロセスを確認する

$ docker top someContainer

文件管理系统

赋值

コンテナからホストOSにファイルをコピーする

$ docker cp centos01:/var/log/httpd /tmp

diff

編集元となったイメージとの差分を表示する

$ docker diff centos01

建设系统

建造

Dockerfileを用いてビルドを実行する

—no-cache で、キャッシュを使わない

$ docker build -t mor/someApp:v1.0 ./someProject

信息科学

请将以下内容用中文进行释义,只需提供一个选项:

版本

    バージョン情報を表示

请提供以下信息的中文释义。

    構成情報を表示

私人注册表

    Docker Hubと同様のレジストリ機能をオンプレミス環境に構築できる

引入

CentOSの場合は、以下のようにレジストリサーバの設定ファイルを更新する

# /etc/sysconfig/docker-registry
# 末尾に追加
SEARCH_BACKEND=sqlalchemy

# /etc/docker-registry.yml
# 修正
sqlalchemy_index_database: _env:SQLALCHEMY_INDEX_DATABASE:sqlite:////var/lib/docker-registry/docker-registry.db

# デーモンを実行
$ mkdir /var/lib/docker-registry
$ systemctl enable docker-registry.service
$ systemctl start docker-registry.service

またDockerを利用するクライアント側の設定も変更する

# /etc/sysconfig/docker
# 末尾にレジストリサーバのIPを追加
INSECURE_REGISTORY=‘—insecure-registry 192.168.0.123:5000’

使用

プライベートレジストリを使う場合、リポジトリ名の前にサーバのIPを付与する

pull / push / serachなどサーバと通信するサブコマンドはこの記法で対応できる

192.168.0.123/mor/someApp:ver1.0

DockerFile可以用中文进行本地化译为:”容器文件”。

    • DockerFileは命令 オプション形式の行の羅列で構成される

#でコメント

命令
意味

FROM
元となるイメージ
FROM mor/someApp:ver1.0

MAINTAINER
作成者
MAINTAINER mor

ENV
環境変数

RUN
指定のコマンドの実行
RUN yum -y install httpd

ADD
イメージにファイル追加
ADD index.html /var/www/html/index.html

EXPOSE
ポート番号を指定
EXPOSE 3306

CMD
コンテナ起動時に実行するコマンド
service httpd start && bash

WORKDIR
カレントディレクトリを指定

Dockerfileはbuildサブコマンドでのビルド時に利用される

Dockerのビルドは、コマンド単位をステップとして実行する

各ステップはコンテナのスナップショットをキャッシュする
Dockerfileを部分変更した場合は、その差分のみが実行される

.dockerignore的中文本地化翻译为:忽略.docker。

    ビルド対象フォルダに.dockerignoreファイルを追加し、パターンを記述しておくと、そのファイルがコピーの対象外となる

多个容器协作

    • 外部からコンテナのデーモンへの接続は、ポートフォワーディングで実現される

コンテナ間で通信をする場合は、仮想ブリッジ間で直接通信が可能となる

接続先のコンテナのビルド時に、EXPOSEを使ってポートを指定する

起動時に–exposeで指定してもいい

接続元のコンテナの実行時に、–linkオプションを使って接続先を指定する

# 接続先
# mySQLコンテナのポートを3306に設定
EXPOSE 3306

# 接続元
# mySQLコンテナにdbというエイリアスをつける
docker run -itd —link mySQL:db —name web01 mor/web:v1.0

# 接続元のコンテナ内では、環境変数を使って接続先の情報を得られる
# DB_PORT_3306_TCP_ADDR = IPアドレス
# DB_PORT_3306_TCP_PORT = 接続先ポート番号

異なるホスト間で通信を行う場合は、–linkは使えないので、-eで環境変数として情報を渡してやる

只需要一个选项,请将以下内容用中文进行同义改述:
参考

    • (書籍)Docker実践入門――Linuxコンテナ技術の基礎から応用まで

 

    Docker入門
广告
将在 10 秒后关闭
bannerAds