通常、Dockerアプリケーションを完全に含める必要がありますが、開発や自動化の目的で、LinuxVMがあるかのようにDockerコンテナを操作できると便利な場合があります。 Dockerは、コンテナー内でコマンドやシェル全体を実行するためのツールを提供します。
コンテナでのコマンドの実行
コンテナでコマンドを実行するには、そのコンテナに特定の名前を設定していない限り、そのコンテナIDが必要です。これは、Dockerプロセスリストから見つけることができる長い16進文字列です:
docker ps
次に、 exec -it
を使用できます コンテナ内で実行するコマンド。たとえば、ログファイルの出力を表示する:
docker exec -it containerID tail /var/log/nginx/access.log
コンテナ内でスクリプトを実行することもできます:
docker exec -it containerID script.sh
-it
フラグはそれぞれ「インタラクティブモード」とTTY用であり、ほとんど常に使用されます。使用できるフラグは他にもいくつかあります:
-
-workdir
または-w
コマンドの前に現在のディレクトリを変更します。 -デタッチコード> 、または
-d
、コマンドをバックグラウンドで実行します。-
-env
、または-e
、実行する前に環境変数を設定します。 -
-env-file
同じことをしますが、秘密を処理するためにより安全です。 -特権
拡張権限でコマンドを実行します。-ユーザーコード> 別のユーザーとして実行
もちろん、これは実行中のコンテナでのみ機能します。メンテナンスを行うためにコンテナを一時停止する場合は、新しいイメージバージョンを介して更新をデプロイするか、ホストOSからボリュームにマウントされたデータに変更を加える必要があります。
コンテナへのSSH接続
単純なコマンドに限らず、 / bin / bash
を実行して実際にシェルを開くことができます。 コマンドとして。利用できるツールに制限があるかもしれません—ほとんどのコンテナはかなり必要最低限のLinuxインストールを備えています—しかしそれは多くのコマンドの実行をはるかに簡単にします。
docker exec -it containerID /bin/bash
これは単にホストからアクセス可能なシェルであり、ほとんどの場合うまく機能します。ただし、必要に応じて、VPSのようにSSH経由で完全に利用できるようにコンテナを設定できます。設定の詳細については、DockerコンテナでSSHサービスを実行するためのガイドをご覧ください。
関連: DockerコンテナにSSHで接続する方法
コンテナとの間でファイルをコピーする
exec -it
を使用してコマンドを実行する 動作しますが、ホストとコンテナの間に、簡単なスクリプト作成を妨げるレイヤーがまだあります。 1つは、コマンドをコンテナに送信するのは簡単ですが、ファイルシステムから出力を取得するのは難しいことです。
exec -it
のSTDOUTをパイプすることはできますが ホストOS上の他のサービスに、コンテナのファイルシステムとの間でファイルをコピーすることもできます。たとえば、ログファイルを取り出してホストに貼り付ける:
docker cp container:/var/log/nginx/example.log example.log
または、ディレクトリ全体を引き出す:
docker cp nginx:/etc/nginx/ nginxconfig/
ただし、これを定期的に行っている場合は、バインドまたはボリュームマウントを使用して、ホストからデータに直接アクセスできるようにすることを検討してください。
関連: DockerCpを使用してホストとコンテナ間でファイルをコピーする方法