Dockerコンテナ内にAPIを実装しました。このコンテナをリモートubuntuサーバーにデプロイします。どうすれば正確にできますか?私のAPIは多くのリソースを使用し、MLDBフレームワークを使用して実装しました。このリモートubuntuサーバーにAPIを含むコンテナをデプロイしたい。これまで、AWSとDigitalOceanにAPIをデプロイするための多くのガイドを見つけましたが、リモートubuntuサーバーにアクセスできるので、それらの権利は必要ありませんか?では、他の誰かが自分のAPIをテストできるように、どのようにコンテナをデプロイできますか?私のAPIを展開するより良い方法がある場合(できれば無料または安価で)、私に知らせてください。
前もって感謝します。
セットアップ パスワードレスSSH ターゲットマシンで
次のコマンドを実行して、ターゲットのDockerをリモートで管理しますVM(必要に応じてDockerもインストールします):
docker-machine create --driver generic --generic-ip-address = 10.123.2.74 --generic-ssh-user = docker --generic-ssh-key〜/ .ssh/id_rsa some_name
汎用ドライバーに関する詳細情報を見つけることができます ここ 。
eval $(docker-machine env some_name)
ドッカーps
これで、ローカルで行うのとまったく同じようにdockerコンテナーを実行できます。
PS-Windowsで実行されているDockerインスタンスをDocker Toolboxを介してリモートで管理する必要がある場合、少し複雑になります。 (Docker linux VM(ssh、docker engine、container ports)の必要なポートへのネットワークアクセスを解決する必要があります。VirtualBoxのブリッジネットワークアダプターまたはポートフォワーディングを介して。Windowsファイアウォールの問題も解決します。 )
Docker 18.09. のリリース以来、これは非常に簡単になりました。このリリースでは、ssh
プロトコルのサポートがDOCKER_Host
環境変数に、-H
引数がdocker ...
コマンドにそれぞれ追加されました。
まず、 ターゲットマシンへのSSHアクセス が必要です(これはおそらく、どのアプローチでも必要になります)。
次に、次のいずれか:
# Re-direct to remote environment.
export DOCKER_Host="ssh://my-user@remote-Host"
# Run a container. To prove that we are on remote-Host, this will print its hostname.
docker run --rm --net Host busybox hostname -f
# All docker commands here will be run on remote-Host.
# Switch back to your local environment.
unset DOCKER_Host
または、必要に応じて、1つのコマンドだけですべてを一度に実行できます。
docker -H "ssh://my-user@remote-Host" run --rm --net Host busybox hostname -f
これはdocker-compose
v.1.23.1(執筆時点の最新バージョン)以降ではまだサポートされていないことに注意してください。ただし、 次のリリースの一部になります 。
ローカル開発環境にdocker-machine
をインストールし、generic driver
を使用してremote_server
を追加することをお勧めします。eval $(docker-machine env remote_server)
を使用してそれに接続し、APIをデプロイできます。
ドライバーは作成時にタスクのリストを実行します。
- Dockerがホストで実行されていない場合、自動的にインストールされます。
- ホストパッケージを更新します(apt-get update、yum update…)。
- Dockerデーモンを保護する証明書を生成します。
- Dockerデーモンが再起動されるため、実行中のすべてのコンテナーが停止します。
- ホスト名はマシン名に合わせて変更されます。
リモートコンテナへのローカルコンテナの展開:
remote_server
を介してdocker-machine
をgeneric driver
に追加したら、次を実行してAPIをデプロイします。
サーバーの環境を取得:docker-machine env remote_server
シェルをサーバーに接続します:eval $(docker-machine env remote_server)
ビルドAPIイメージ:docker build -t api_image .
。 (Dockerfile DIR)
コンテナを実行:docker run -d -p 1111:1111 api_image
curl
を使用:curl $(docker-machine ip remote_server):1111
これがあなたのお役に立てば幸いです。