やりたいこと
- 今回のブログで紹介するポイントは2つです。
- Ubuntu(WSL)にDocker をインストールする方法と、Ubuntu(WSL)を使ってDocker イメージを作成する方法になります。作成したDocker イメージは、Amazon Elastic Container Registry (ECR) にプッシュします。この2点をまとめた記事になります。
Ubuntu(WSL)にDocker をインストール
パッケージのアップデート
- 先ずDocker をインストールする前に、Ubuntuにインストールされているパッケージのアップデートを行います。apt updateでパッケージリストを更新します。続けて、apt upgradeでインストールされているパッケージのアップデートを行います。
- 次に、Docker のインストールに必要なパッケージのインストールを行っています。
- ログ出力は長いため、省略します。
niikawa@niikawa1:~$ sudo apt update && sudo apt upgrade -y niikawa@niikawa1:~$ sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
aptのpackage managerにgpgキーを追加
- Docker CE をインストールする前に、Docker リポジトリのセットアップが必要です。
- Docker から公式の gpgキーを取得し、aptのpackage managerにgpgキーを追加します。”OK” と表示されることを確認します。
niikawa@niikawa1:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - OK
- 鍵の fingerprint が「9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88」と表示されることを確認します。
niikawa@niikawa1:~$ sudo apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb)sub rsa4096 2017-02-22 [S]
aptのリポジトリにDockerリポジトリを追加
- aptのリポジトリにDockerリポジトリを追加します。
- lsb_release -cs は、Ubuntu ディストリビューション名を表示するコマンドになります。
niikawa@niikawa1:~$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" Hit:1 http://security.ubuntu.com/ubuntu bionic-security InRelease Hit:2 http://ppa.launchpad.net/ansible/ansible/ubuntu bionic InRelease Hit:3 http://archive.ubuntu.com/ubuntu bionic InRelease Hit:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease Hit:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease Get:6 https://download.docker.com/linux/ubuntu bionic InRelease [64.4 kB] Get:7 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages [39.0 kB] Fetched 103 kB in 4s (25.4 kB/s) Reading package lists... Done
- apt updateでパッケージリストを更新します。
niikawa@niikawa1:~$ sudo apt update
Docker CE をインストール
- 最新の Docker CE をインストールします。
niikawa@niikawa1:~$ apt-cache policy docker-ce niikawa@niikawa1:~$ sudo apt install docker-ce
Docker サービスの開始
- docker サービスを起動し、dockerコマンドが使用できることを確認します。
niikawa@niikawa1:~$ sudo service docker start * Starting Docker: docker [ OK ] niikawa@niikawa1:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE niikawa@niikawa1:~$ sudo service docker stop * Stopping Docker: docker [ OK ]
Ubuntu(WSL)を使ってDocker イメージを作成する
Docker サービスの開始
- docker サービスを起動します。
niikawa@niikawa1:~$ sudo service docker start * Starting Docker: docker [ OK ]
エディタを起動して、Docker イメージを作成する
- エディタを起動します。
niikawa@niikawa1:~$ mkdir ecs_hello niikawa@niikawa1:~$ cd ecs_hello/ niikawa@niikawa1:~/ecs_hello$ mkdir conf niikawa@niikawa1:~/ecs_hello$ niikawa@niikawa1:~/ecs_hello$ code . Updating VS Code Server to version 695af097c7bd098fbf017ce3ac85e09bbc5dda06 Removing previous installation... Installing VS Code Server for x64 (695af097c7bd098fbf017ce3ac85e09bbc5dda06) Downloading: 100% Unpacking: 100% Unpacked 1779 files and folders to /home/niikawa/.vscode-server/bin/695af097c7bd098fbf017ce3ac85e09bbc5dda06.
- エディタが起動しました。以下の例では、ecs_hello/ 配下にDockerfile ファイル、ecs_hello/conf/ 配下にnginx.conf を作成しています。
- Dockerfile ファイルは、コンテナイメージを管理するための定義ファイルです。
- ベースとして使用する既存のイメージの指定(→ FROM コマンド)、イメージの作成プロセス時に実行されるコマンド(→ ADD コマンド)、コンテナイメージの新しいインスタンスが展開されるときに実行されるコマンド(→ RUN コマンド)などの定義が含まれます。
- 今回使用するDockerfile ファイルは、下記となります。
FROM nginx:latest ADD conf/nginx.conf /etc/nginx/ RUN echo "Hello ECS." > /usr/share/nginx/html/index.html
- docker build コマンドを使用し、Dockerfile からイメージをビルドします。-t オプションによって、名前を付けます。
niikawa@niikawa1:~/ecs_hello$ sudo docker build -t niikawa-testenv . [+] Building 10.5s (8/8) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 149B 0.0s => [internal] load .dockerignore 0.1s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/nginx:latest 2.6s => [internal] load build context 0.0s => => transferring context: 1.68kB 0.0s => [1/3] FROM docker.io/library/nginx:latest@sha256:593dac25b7733ffb7afe1a7264 6.2s => => resolve docker.io/library/nginx:latest@sha256:593dac25b7733ffb7afe1a7264 0.1s => => sha256:441a1b46536703aec84bf2cabdd2524d4cc7dad9c677249 41.46MB / 41.46MB 1.7s => => sha256:3b9543f2b5005b74aae0ffaa779803f2b162ec3bd461c9e10a216 627B / 627B 0.3s => => sha256:593dac25b7733ffb7afe1a72649a43e574778bf025ad60514 1.86kB / 1.86kB 0.0s => => sha256:d2b2f2980e9ccc570e5726b56b54580f23a018b7b7314c9ea 1.78kB / 1.78kB 0.0s => => sha256:eb4a57159180767450cb8426e6367f11b999653d8f185b5e3 8.15kB / 8.15kB 0.0s => => sha256:5b5fe70539cd6989aa19f25826309f9715a9489cf1c0579 29.12MB / 29.12MB 0.9s => => sha256:ca89ed5461a9f2c681ebd39ed6583a7405d82f51b42177b7388c9 959B / 959B 0.5s => => sha256:b0e1283145af839c63923f671b4ab6c5d9e22826ab4372c6660db 366B / 366B 0.9s => => extracting sha256:5b5fe70539cd6989aa19f25826309f9715a9489cf1c057982d6a84 2.7s => => sha256:4a85ce26214d83c77b5464631a67c71e1c2793b655261befe 1.40kB / 1.40kB 1.1s => => sha256:4b98867cde79486d55399cb95957331018b849a2bf04ee9a6 1.21kB / 1.21kB 1.1s => => extracting sha256:441a1b46536703aec84bf2cabdd2524d4cc7dad9c6772491e01ff8 1.7s => => extracting sha256:3b9543f2b5005b74aae0ffaa779803f2b162ec3bd461c9e10a2167 0.0s => => extracting sha256:ca89ed5461a9f2c681ebd39ed6583a7405d82f51b42177b7388c99 0.0s => => extracting sha256:b0e1283145af839c63923f671b4ab6c5d9e22826ab4372c6660db5 0.0s => => extracting sha256:4b98867cde79486d55399cb95957331018b849a2bf04ee9a6dcae9 0.0s => => extracting sha256:4a85ce26214d83c77b5464631a67c71e1c2793b655261befe52ba0 0.0s => [2/3] ADD conf/nginx.conf /etc/nginx/ 0.9s => [3/3] RUN echo "Hello from ECS." > /usr/share/nginx/html/index.html 0.4s => exporting to image 0.1s => => exporting layers 0.1s => => writing image sha256:4232d712986f7a0bd3a4df814c2a84d33d83fb6b54027128e51 0.0s => => naming to docker.io/library/niikawa-testenv 0.0s niikawa@niikawa1:~/ecs_hello$
- docker tag コマンドを使用し、ローカルのイメージに tagを付けます。
- ローカルのイメージにAmazon ECRレジストリ、リポジトリ、オプションのイメージタグ名を組み合わせた形式 aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag でタグを付けます。
niikawa@niikawa1:~/ecs_hello$ sudo docker tag niikawa-testenv:latest 111111111111.d kr.ecr.ap-northeast-1.amazonaws.com/niikawa-testenv:latest
ECR にDocker イメージをプッシュする
- イメージのプッシュ先となる Amazon ECR レジストリに対して Docker クライアントを認証します。Amazon ECR レジストリに対して Docker を認証するには、aws ecr get-login-password コマンドを実行します。
niikawa@niikawa1:~/ecs_hello$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 243708603692.dkr.ecr.ap-northeast-1.amazonaws.com WARNING! Your password will be stored unencrypted in /home/niikawa/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
- docker push コマンドを使用し、イメージをプッシュします。
niikawa@niikawa1:~/ecs_hello$ sudo docker push 111111111111.dkr.ecr.ap-northeast-1.amazonaws.com/niikawa-testenv:latest The push refers to repository [111111111111.dkr.ecr.ap-northeast-1.amazonaws.com/niikawa-testenv] cd03462592d1: Pushed ce5d7d96d4c6: Pushed 9e96226c58e7: Pushed 12a568acc014: Pushed 7757099e19d2: Pushed bf8b62fb2f13: Pushed 4ca29ffc4a01: Pushed a83110139647: Pushed ac4d164fef90: Pushed latest: digest: sha256:76a922e5ffc8ca75624113ce5035c385ef96192c12c6eaee9f9047a31042a1c8 size: 2192
- 以下、エディタおよびターミナルの画面となります。