前書き
Dockerを使用してイメージを構築し、Alibaba Cloud Image Serviceを介してECSサーバーに配布し、イメージを実行する方法を紹介します。
背景知識
コンテナテクノロジ
コンテナは、リソース分離のプロセスでアプリケーションとその依存関係を実行できるようにする、軽量のオペレーティングシステムレベルの仮想化テクノロジです。アプリケーションの実行に必要なすべてのコンポーネントは、単一のイメージにパッケージ化されています。このミラーは再利用できます。イメージが実行されている場合、イメージは独立した環境で実行され、ホストオペレーティングシステムのメモリ、CPU、またはディスクを他のアプリケーションと共有しません。これにより、コンテナ内のプロセスがコンテナ外のプロセスに影響を与えないことが保証されます。
ミラーウェアハウス(レジストリ)
Dockerのミラーストレージセンターは通常、レジストリと呼ばれます。独自のプライベートイメージを取得する必要がある場合は、最初にレジストリにログインしてから、イメージをプルする必要があります。イメージを変更した後、イメージをレジストリに再度プッシュできます。または、Dockerイメージ構築の機能を使用してローカルでイメージを生成し、それをレジストリにプッシュします。
コンテナイメージサービスACR(Alibaba Cloud Container Registry)アリババクラウドコンテナ
イメージサービスACRのデフォルトインスタンスバージョンは、安全なアプリケーションイメージホスティング機能、正確なイメージセキュリティスキャン機能、安定した国内外のイメージ構築サービス、利便性などの基本的なコンテナイメージサービスを提供します。ユーザーがミラーリングのライフサイクル全体を管理しやすくするための認証機能。
ECSサーバーに接続します(まだ購入していない場合は、ここでECSを体験できます)
1.システムに付属のターミナルツールを開きます。
Windows:CMDまたはPowershell。
MAC:ターミナル。
- ターミナルで接続コマンドssh [username] @ [ipaddress]を入力します。ユーザー名とIPアドレスを、セクション1で作成したECSサーバーのログイン名とパブリックネットワークアドレスに置き換える必要があります。例えば:
ssh [email protected]
コマンドの表示結果は次のとおりです。
3.「はい」と入力します。続行することに同意すると、ログインパスワードの入力を求められます。パスワードは、作成したクラウドサービスのECSのログインパスワードです。
Dockerサービスを構築する
Dockerは、コンテナーを作成、管理、およびオーケストレーションするためのオープンソースのコンテナーエンジンであり、あらゆるアプリケーション向けに軽量でポータブルな自給自足のコンテナーを簡単に作成できます。この手順では、DockerサービスをECSにデプロイし、DockerHubのイメージアクセラレータを構成します。
- Dockerの依存ライブラリをインストールします。
yum install -y yum-utils device-mapper-persistent-data lvm2
- DockerCEのソフトウェアソース情報を追加します。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- DockerCEをインストールします。
yum makecache fast &&
yum -y install docker-ce
- Dockerサービスを開始します。
systemctl start docker
- DockerHubイメージアクセラレータを構成します。
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
- Dockerサービスを再起動します。
systemctl restart docker
アプリケーションコードとDockerfileを準備する
この手順では、ワークスペースでHelloコードを実行するために必要な環境イメージを構築するために使用されるGolangベースのHelloWorldコードファイルとDockerfileファイルを作成します。
- ワークスペースを作成します。
mkdir -p /tmp/demo && cd /tmp/demo
- ワークスペースにHelloWorldコードファイルを作成して、コンテナー環境のHTTPサービスを監視し、HelloWorld文字列を出力します。
cat > /tmp/demo/main.go << EOF
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello! World\n")
})
fmt.Println("start to serve...")
http.ListenAndServe(":80", nil)
}
EOF
- ワークスペースにDockerfileファイルを作成します。
cat > /tmp/demo/Dockerfile << EOF
FROM golang:1.12-alpine
# change current working dir
WORKDIR /go/src/app
# copy main.go into /go/src/app
COPY . .
# go build and install the app
RUN go install -v ./...
# run the app by default
CMD ["app"]
EOF
ローカルでイメージをビルドし、イメージを実行します
この手順では、Dockerの基本コマンドを使用してミラーを構築および実行する方法について説明します。
- dockerbuildコマンドを使用してイメージをビルドします。
docker build . -t demo:v1
コマンドの実行結果は次のとおりです。
説明:
パラメータ。は、現在のパスをビルドコンテキスト、つまりDockerfileが配置されているローカルパスとして指定することを意味します。
パラメータ-tdemo:v1は、イメージ名とラベルを指定します。
- dockerrunコマンドを使用してイメージを実行します。
docker run -d -p 8000:80 demo:v1
コマンドの実行結果は次のとおりです。
説明:
パラメータ-dは、コンテナの動作モードをバックグラウンド動作に設定します。
パラメータ-p8000:80は、コンテナ内で使用されるネットワークポートをホストにマップします。ここで、8000はホストポートであり、80はコンテナ内で使用されるポートです。
- curlツールを使用して、コンテナー内のHelloWorldサービスにアクセスします。
curl localhost:8000
コマンドの実行結果は次のとおりです。
4. docker rmコマンドを使用して、コンテナーを削除します。
docker rm -f $(docker ps -a | grep "demo:v1" | awk '{print $1}')
コマンドの実行結果は次のとおりです。
リモートミラーウェアハウスを作成する
この手順では、Alibaba Cloudアカウントを使用してコンテナイメージサービスを開き、イメージウェアハウスを作成する方法について説明します。デフォルトのインスタンスバージョンのAlibabaCloud Container Mirroring Serviceは無料で使用できます。使用制限については、コンテナーミラーリングサービスの請求手順を参照してください。
1. Alibaba Cloudのメインアカウントを使用して、コンテナミラーリングサービスコンソールにログインします。
2. [アクティベーションに移動] "[レジストリログインパスワードの設定]" Alibaba Cloud Dockerレジストリログインパスワードの設定をクリックし、[OK]をクリックします。
3.コンテナミラーリングサービスコンソールで、[デフォルトインスタンス]> [ネームスペース]> [ネームスペースの作成]をクリックし、[ネームスペースの作成]ポップアップボックスにコマンドスペース名を入力して、[OK]をクリックします。
- [ローカルウェアハウス]> [ミラーウェアハウスの作成]をクリックします。ミラーウェアハウスリストで、前の手順で作成したミラーウェアハウスを選択し、[管理]をクリックしてミラーウェアハウスの詳細を表示します。
プッシュミラー
このステップでは、ローカルミラーがリモートウェアハウスにプッシュされ、リモートウェアハウス内の指定されたバージョンのミラーが実行されます。この手順のコマンドに含まれるリモートミラーアドレスを、手順6で作成したミラーウェアハウスのパブリックネットワークアドレスに置き換えてください。
1.次のコマンドを実行して、Alibaba CloudDockerレジストリにログインします。
docker login --username="用户名" registry.cn-hangzhou.aliyuncs.com
注:次のコマンドのユーザー名をAlibaba Cloudアカウントのフルネームに置き換えてから、Enterキーを押してリモートミラーウェアハウスのパスワードを入力してください。パスワードは、手順6でサービスをアクティブ化したときに設定されたパスワードです。
メインアカウントのユーザー名を表示するには、AlibabaCloudユーザーセンターにログインしてください。
コマンドの実行結果は次のとおりです。
2.ローカルミラーにマークを付けて、リモートウェアハウスに配置します。
docker tag demo:v1 registry.cn-hangzhou.aliyuncs.com/space_test/demo:v1
3.ローカルミラーをリモートウェアハウスにプッシュします。
docker push registry.cn-hangzhou.aliyuncs.com/space_test/demo:v1
コマンドの実行結果は次のとおりです。
- 指定されたバージョンのリモートミラーをプルします。
docker pull registry.cn-hangzhou.aliyuncs.com/space_test/demo:v1
コマンドの実行結果は次のとおりです。
- プルされたリモートミラーを実行します。
docker run -d -p 8000:80 registry.cn-hangzhou.aliyuncs.com/space_test/demo:v1
コマンドの実行結果は次のとおりです。
- HelloWorldサービスにアクセスします。
curl localhost:8000
コマンドの実行結果は次のとおりです。