2017-11-15 3 views
0

私はの新しいDockerを理解していないかもしれません。docker-composeでssh-clientのコンテナを引き出します

私はappコンテナとdockerfileを持っています。

appコンテナにssh-clientをインストールします。 sshコマンドを実行して、appコンテナからいくつかの外部IPに到達したいと考えています。

私が知っている最も簡単な方法は、私のdockerfile

RUN apk update && apk add openssh-client bash

を追加することですが、私はそう私のすべてのコンテナが同じものを使用することができ、いくつかの準備ができて画像を使用したいと思います。

これは可能ですか?

答えて

1

すべてのパブリックイメージが存在するドッカーハブで検索すると、そこにある人気の高い「ssh-client」イメージは単にアルファベットの上に構築され、openssh-clientと同じ方法でインストールされます。

したがって、これらの既存の画像を使用すると明らかな利点はありません。経由でSSHクライアントをインストールするだけで:

FROM alpine:latest 
# install ssh-client and bash 
RUN apk --no-cache add openssh-client bash 
# example ssh usage to print version 
ENTRYPOINT ["ssh", "-V"] 

ビルドをし、それを実行します:

RUN apk update && apk-install openssh-client 
+0

ただし、イメージを使って領域を節約できることを正しく理解していますか?例えば、私は 'ssh'を必要とする20のプロジェクトコンテナを持っています。 'RUN apk update& apk-install openssh-client'でインストールすると、20倍以上のスペースが必要になります。それは正しいのですか?もしそうなら、スペースを節約するよりも私にとって非常に重要です。 –

+0

@ D.R。あなたが20のプロジェクトを言うとき、私はあなたが20のコンテナを意味すると理解します。今では各容器は完全に自己保持されなければなりません。だから、もし必要ならssh-clientを各アプリケーションコンテナにインストールする必要があります。現在、Dockerにはレイヤーキャッシュ機能があります。同じベースイメージを使用し、その後にすべてのコンテナに直接ssh-clientをインストールすると、同じレイヤーが使用され、ssh-clientは一度だけダウンロードされ、他のすべてのイメージで共有されるレイヤーにインストールされます。 – yamenk

+0

ありがとうございました。私があなたを正しく理解すれば、私は 'Dockerfile'の中で私の命令の順序に注目するべきですか? –

1

https://docs.docker.com/engine/reference/builder/を)Dockerfileを書くdocker build -t ssh . && docker run -t ssh ssh それともドッカー-作曲を使用しています。

docker buildでビルドした後、sock DockerイメージをDockerfilesの他のプロジェクトで再利用できます。ドッカー-作曲docker-compose.ymlを使用して

FROM ssh 
... 

:あなたが好きなように

version: '3' 
services: 
    ssh: 
    build: . 
    image: ssh 

あなたはコンポーズファイルで複数のサービスを追加することができます。 上記のドッカーの作成ファイルは、上記のDockerfileを使用してsshドッカーのイメージを構築します。 作成ファイルの参照を参照してください:https://docs.docker.com/compose/compose-file/

+0

はい、3つのサービスでドッカーを使用しています。アプリ、db、サーバー。 Docker-composeの例を表示できますか? –

+0

ありがとうございますが、アプリに接続する方法を示すことができるので、アプリコンテナ内で 'ssh'を実行できますか?あなたが必要なら私の 'docker-compose.yml'を見せてもらうことができます。 –

関連する問題