Ubuntu(WSL)にDockerインストール & イメージ作成方法

AWS,Docker,ECR,Ubuntu(WSL)

概要

  • 今回のブログで紹介するポイントは2つです。Ubuntu(WSL)にDocker をインストールする方法と、Ubuntu(WSL)を使ってDocker イメージを作成する方法になります。作成したDocker イメージは、Amazon Elastic Container Registry (ECR) にプッシュします。

 

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) <docker@docker.com>
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 

 

  • 以下、エディタおよびターミナルの画面となります。

 

 

参考資料

AWS,Docker,ECR,Ubuntu(WSL)

Posted by takaaki