Dockerイメージの使用
画像を取得
docker pull コマンドと docker search コマンドを使用して、リモート ウェアハウス内の共有イメージを検索します。
コンテナの実行
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] コマンドを使用します (例: docker run --name ubuntu_test --rm -it ubuntu:test /bin/bash)。オプションは次のとおりです。
- --name はコンテナ名を指定します。
- --rm は、コンテナーの終了後にコンテナーを削除することを意味します。
- -t オプションは、Docker に疑似端末を割り当て、それをコンテナーの標準入力にバインドするように指示します。
- -i は、コンテナーの標準入力を開いたままにします。
画像情報を見る
docker image コマンドを使用して、ダウンロードしたイメージを一覧表示します。
docker image --filter コマンドは、指定されたパラメーターをリストします。
例:イメージのウェアハウス名、ID 、タグを「 === 」で区切ってリストします。
docker images --format "{
{.Repository}} === {
{.ID}} === {
{.Tag}}"
画像の削除
docker rmi [イメージ ラベルまたは ID]。docker rm はコンテナーを削除するコマンドであることに注意してください。混同しないでください。
イメージの作成
方法は 3 つあり、docker commit コマンドを使用して既存のイメージに基づいてコンテナを作成するか、ローカル テンプレートに基づいてインポートします。Dockerfileをベースに作成しました。
ドッカーコミット
コンテナーのストレージ レイヤーをイメージとして保存します。docker commit コマンドはイメージを肥大化させるため、実際の環境ではこのように使用されません。
コマンド構文:
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
オプションには次のものが含まれます。
- -a, --author=""著者情報
- -m, --message=""メッセージをコミット
- -p, --pause=true コミット時にコンテナを一時停止します
ローカルテンプレートに基づいてインポート
まずオペレーティング システム テンプレートの圧縮パッケージ ファイルをダウンロードし、次に docker import コマンドを使用してインポートします。
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
Dockerfileに基づいたカスタマイズされたイメージ
Dockerfile は命令 (命令) を含むテキスト ファイルであり、各命令によってレイヤーが構築されるため、各命令の内容にはレイヤーの構築方法が記述されています。次のように進めます。
1. 空のディレクトリに、次の内容のファイル Dockerfile を作成します。
FROM golang
RUN mkdir -p /go/src/study \
&& go env -w GO111MODULE=off
COPY study /go/src/study
WORKDIR /go/src/study/photoweb/
RUN go build /go/src/study/photoweb/photoweb.go
FROM命令はベースイメージを指定しますが、ベースイメージとしてスクラッチが使用されている場合、それはイメージに基づいていないことを意味します。
RUN命令は、コマンド ライン コマンドを実行するために使用されます。
COPY命令は、ローカル ファイルをイメージにコピーします。ローカル ファイルは、イメージ ビルド コンテキスト (docker build コマンドの最後のパラメータで指定) 内のファイルである必要があることに注意してください。通常、コピーされるファイルは次の場所にコピーされます。 Dockerfile が配置されているディレクトリ。WORKDIRディレクティブは、実行可能ファイルが関連リソースを見つけられないように作業ディレクトリを指定します。
2. Dockerfile が書き込まれた後、コマンドdocker build -t golang:test を実行し、イメージを作成します。
Dockerfileのマルチステージビルド
Dockerfile の多段階構築は、Docker イメージの構築を最適化する方法であり、Docker イメージのサイズとランタイム リソースの消費量を削減できます。以下の例では、第 1 段階でコピー可能なソース コードと実行可能ファイル アプリがコンパイルされ、第 2 段階で実行可能ファイル アプリのみがイメージにコピーされます。実行時に不要なスペースを節約します (コンパイル中に依存するソースコードまたは他のパッケージを移動)
# 第一阶段下载相关依赖编译出可执行文件app
FROM golang:1.9-alpine
RUN apk --no-cache add git
WORKDIR /go/src/github.com/go/helloworld/
RUN go get -d -v github.com/go-sql-driver/mysql
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
# 第二阶段只将可执行文件app复制到镜像中,运行的容器中并不需要下载git和mysql驱动包
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/go/helloworld/app .
CMD ["./app"]
保存とロード
Docker には、イメージを tar ファイルとして保存し、別の場所に転送してロードするための dockerload および docker save コマンドも用意されています。これは、Docker レジストリがない場合のアプローチです。現在は推奨されていません。Docker Hub を直接使用する場合でも、イントラネットのプライベート レジストリを使用する場合でも、イメージの移行には Docker レジストリを直接使用する必要があります。
イメージを保存します: docker save ubuntu:test | gzip > ubuntu-test.tar.gz. docker save を使用して保存されたイメージは、docker load を使用してのみロードできます。
イメージをロードします: dockerload -i ubuntu-test.tar.gz
ミラー実装原理
各イメージは多くのレイヤーで構成されており、Docker は Union FS を使用してこれらの異なるレイヤーを 1 つのイメージに結合します。
操作コンテナ
コンテナの起動
docker run コマンドを使用してコンテナーを作成する場合、Docker がバックグラウンドで実行する標準操作は次のとおりです。
- 指定したイメージがローカルに存在するか確認し、存在しない場合は公開ウェアハウスからダウンロードします。
- イメージを使用してコンテナを作成して起動する
- ファイル システムを割り当て、読み取り専用イメージ レイヤーの外側に読み取り/書き込みレイヤーをマウントします。
- ホスト上で構成されたブリッジインターフェースからコンテナーに仮想インターフェースをブリッジします。
- アドレスプールからコンテナへのIPアドレスの構成
- ユーザー指定のアプリケーションを実行する
- 実行後、コンテナは終了します
デーモン状態で実行する: docker run コマンドを実行するときに -d パラメーターを追加します。
コンテナを終了する
docker stop コマンドを使用してコンテナを終了します。終了したコンテナは docker start コマンドで再起動できます。
コンテナに入る
dockerattachまたはdockerexecコマンドを使用します。両者の違いは、attach実行後、stdinから抜けるとコンテナが停止しますが、exec実行後、stdinから抜けるとコンテナは停止しないので、こちらを推奨しますdocker exec コマンドを使用してコンテナーに入ります。
輸出入
docker import コマンドを使用してローカル コンテナ スナップショットをローカル ファイルにエクスポートし、docker import コマンドを使用してコンテナ スナップショット ファイルからイメージにインポートします。次に例を示します。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7691a814370e ubuntu:14.04 "/bin/bash" 36 hours ago Exited(0) 21 hours ago test
$ docker export 7691a814370e > ubuntu.tar
$ cat ubuntu.tar | docker import - test/ubuntu:v1.0
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3MB
コンテナの削除
docker rm コマンドを使用して、実行中のコンテナーを削除する場合は、-f パラメーターを追加できます。Docker は SIGKILL シグナルをコンテナーに送信します。コマンド docker container prune を使用して、終了したすべてのコンテナをクリーンアップします。
倉庫を訪問する
ドッカーハブ
Web サイト https://cloud.docker.com でアカウントを登録します。
ログインとログアウト: docker login コマンドと docker logout コマンド
イメージをプルする: docker search を使用してウェアハウスからイメージを検索し、docker pull コマンドを使用してイメージをプルします。
イメージをプッシュします: docker Push username/ubuntu:17.10 コマンド。username はアカウントのユーザー名です。
私設倉庫
公式に提供されているツールdocker-registry を使用して、プライベート イメージ ウェアハウスを構築します。
コンテナーの実行: docker run -d -p 5000:5000 --restart=always --name registry registry. デフォルトでは、ウェアハウスはコンテナーの /var/lib/registry ディレクトリに作成されます。-v パラメータを使用すると、イメージ ファイルをローカルの指定されたパスに保存できます。
プライベート リポジトリで画像をアップロード、検索、ダウンロードします。
- まずdocker タグを使用してイメージをマークします。たとえば、プライベート ウェアハウスのアドレスは127.0.0.1:5000で、タグ コマンドは docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest です。
- 次に、docker Pushを使用してタグ付きイメージをアップロードします。コマンドは docker Push 127.0.0.1:5000/ubuntu:latest です。
- リポジトリ内のイメージを表示するには、curlを使用します。コマンドはcurl 127.0.0.1:5000/v2/_catalogです。
- ウェアハウスからイメージをダウンロードします。コマンドは docker pull 127.0.0.1:5000/ubuntu:latest です。
- Docker はデフォルトで非 HTTPS イメージのプッシュを許可しません。Docker 構成を通じてこの制限を削除することも、HTTPS 経由でアクセスできるプライベート リポジトリを構成することもできます。次の内容をファイル /etc/docker/daemon.json に追加します。
{
"registry-mirror": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
}
データ管理
Docker 内およびコンテナー間でデータを管理するには、主に 2 つの方法があります。それは、データ ボリューム (ボリューム) とホスト ディレクトリのマウント (バインド マウント) です。
データ ボリュームを 1 つ以上のコンテナで使用できる特別なディレクトリ。UFS をバイパスし、次の特性を持ちます。
- データボリュームはコンテナ間で共有および再利用可能
- データボリュームの変更はすぐに有効になります
- データ ボリュームの更新はミラーに影響しません。
- コンテナが削除されても、データ ボリュームはデフォルトで常に存在します。
データボリュームの作成
docker volume create my-vol
データ ボリュームを表示します: docker volume ls; 次のように、指定したデータ ボリュームの情報を表示します。
$ docker volume inspect my-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
コンテナーの起動時にデータ ボリュームをマウントする: --mount パラメーターを使用して、docker run の実行時にマウントするデータ ボリュームを指定します。例えば:
$ docker run -d -P \
--name web \
# -v my-vol:/wepapp \
--mount source=my-vol,target=/webapp \
training/webapp \
python app.py
ホスト上で docker Inspection web コマンドを使用して、コンテナー情報を表示します。データ ボリューム情報は、「Mounts」キーの下にあります。
データ ボリュームを削除します: docker volume rm my-vol、データ ボリュームをクリーンアップするコマンド docker volume prune
作成したデータ ボリュームをマウントすることに加えて、 --mount フラグを使用して、ローカル ホスト上のディレクトリをコンテナに直接マウントすることを指定することもできます。Docker のマウントされたホスト ディレクトリのデフォルトの権限は読み取りと書き込みですが、ユーザーは readonly を追加することで読み取り専用を指定することもできます。