0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SSH サーバープロセスを実行する DockerイメージをMacで作成

Posted at

バージョン

  • Mac

    • macOS Mojave 10.14.3
  • Docker

    • 18.09.1

Docker Desktop for Mac のインストール

  • 次の Docker Hub ページの 「Download from Docker Hub」
    https://docs.docker.com/docker-for-mac/install/

  • Docker Hub サイトにログインしていない場合は「Please Login To Download」
    Docker Hub のアカウントを作成してログイン状態になり 「Get Docker」

  • Docker.dmg を Mac にインストール

  • インストール後 Dokcerが起動すると、Macの上部メニューの側に Docker アイコンが表示されるので、クリックして 「Sing in」
    "Docker ID" のところはメールアドレスでもログインできるが、docker pullでエラーになるので、Docker ID を入力する。
    image.png
    image.png

* ターミナルから docker バージョンの確認


$ docker version
Client: Docker Engine - Community
 Version:           18.09.1
 API version:       1.39
 Go version:        go1.10.6
 Git commit:        4c52b90
 Built:             Wed Jan  9 19:33:12 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.1
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       4c52b90
  Built:            Wed Jan  9 19:41:49 2019
  OS/Arch:          linux/amd64
  Experimental:     false

Docker イメージを作成

基にする Docker イメージの確認

今回は、Docker Hub レジストリにある 公式の amazonlinux イメージを利用する

  • リポジトリの確認

$ docker search amazonlinux --limit 1
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
amazonlinux         Amazon Linux provides a stable, secure, and …   572                 [OK]
  • amazonlinuxリポジトリのタグの確認

$ curl -s https://registry.hub.docker.com/v2/repositories/library/amazonlinux/tags/ | jq '.results[].name' | sort
"1"
"1-with-sources"
"2"
"2-with-sources"
"2.0.20190207"
"2.0.20190207-with-sources"
"2018.03-with-sources"
"2018.03.0.20190207-with-sources"
"latest"
"with-sources"

Dockerコンテナー内のSSHサーバーにログインするためのキーペアを作成


$ ssh-keygen -t rsa -m PEM

「-m PEM」とは
https://qiita.com/tonishy/items/91066b1391e5e772622f

Dockerfile の作成

  • Mac の適当なフォルダに次の内容で Dockerfile を作成する
  • サーバアカウントのuid/gidとか、sudo 設定は EC2 Amazon Linux のそれに寄せている

FROM amazonlinux:1
RUN yum install -y shadow-utils    ← groupadd コマンドを使うためにインストール
RUN groupadd -g 500 ec2-user
RUN adduser -u 500 -g 500 ec2-user
RUN usermod -aG wheel ec2-user
RUN mkdir -m 0700 /home/ec2-user/.ssh
RUN echo "公開鍵" > /home/ec2-user/.ssh/authorized_keys    ← 上で作成したものの中身をそのまま貼り付け
RUN chmod 0600 /home/ec2-user/.ssh/authorized_keys
RUN chown -R ec2-user.ec2-user /home/ec2-user/.ssh
RUN echo 'root:適当なものに' | chpasswd    ← 念の為に root のパスワードを設定
RUN yum install -y sudo
RUN echo "ec2-user ALL = NOPASSWD: ALL" > /etc/sudoers.d/cloud-init
RUN echo "ec2-user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/cloud-init
RUN chmod 0440 /etc/sudoers.d/cloud-init    ← ファイル名は何でもよい、とりあえず EC2 Amazon Linux のデフォに合わせた
RUN yum install -y openssh-server
RUN /usr/bin/ssh-keygen -A    ← SSH サーバーホスト鍵を作成
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

Dockerfile をビルド

  • Dockerfiles ファイルのある同じフォルダで次を実行
    ※最初のビルドでは、Docker Hub レジストリから amazonlinux:1 のイメージをダウンロードするのでインターネットに接続していること

$ ls
Dockerfile
 
$ docker build -t amazonlinux1 .
  • 出来上がったイメージを確認

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
amazonlinux1        latest              f61c2d171ce7        26 seconds ago      363MB
amazonlinux         1                   7f001bfb59e5        32 hours ago        168MB
下のイメージが amazonlinux:1 のオリジナルイメージ

上のイメージがオリジナルイメージをDockerfileの内容でカスタマイズしたイメージ
 
Dockerfile を変更して再ビルドする場合は、上のイメージだけ削除して、下のイメージを残しておけば、ビルドのたびに Docker Hub レジストリから amazonlinux:1 のイメージをダウンロードする必要がない。

コンテナー作成とSSH接続確認

  • 次のコマンドで Dockerイメージからコンテナーを作成する

$ docker run -d -p 127.0.0.1:2222:22 --name amazonlinux1 amazonlinux1

「-p 127.0.0.1:2222:22」 はポートフォワーディング設定
ローカルの 127.0.0.1:2222 接続を、コンテナーの22(ssh)へ繋げる

  • コンテナー確認

$ docker ps
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                    NAMES
6d43e67dcb8b        amazonlinux1        "/usr/sbin/sshd -D"   3 seconds ago       Up 1 second         127.0.0.1:2222->22/tcp   amazonlinux1
  • Mac のターミナルからコンテナーのSSHサーバープロセスへSSHログイン

$ ssh -i 秘密鍵 -l ec2-user 127.0.0.1 -p 2222
[ec2-user@6d43e67dcb8b ~]$ ← コンテナーのプロンプト

コンテナーの停止・削除、イメージの削除

撤収

  • コンテナーを停止

    停止するコンテナーの CONTAINER ID を確認

$ docker ps
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                    NAMES
6d43e67dcb8b        amazonlinux1        "/usr/sbin/sshd -D"   4 minutes ago       Up 4 minutes        127.0.0.1:2222->22/tcp   amazonlinux1
コンテナーIDを指定して stop

$ docker stop 6d43e67dcb8b
6d43e67dcb8b
  • コンテナーを削除

    削除するコンテナーの CONTAINER ID を確認

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS                          PORTS               NAMES
6d43e67dcb8b        amazonlinux1        "/usr/sbin/sshd -D"   6 minutes ago       Exited (0) About a minute ago                       amazonlinux1
コンテナーIDを指定して削除

$ docker rm 6d43e67dcb8b
6d43e67dcb8b
  • イメージを削除

    削除するイメージの IMAGE ID あるいは REPOSITORY:TAG を確認

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
amazonlinux1        latest              f61c2d171ce7        17 minutes ago      363MB
amazonlinux         1                   7f001bfb59e5        32 hours ago        168MB
上のイメージから削除
今回は REPOSITORY:TAG を指定して削除

$ docker rmi amazonlinux1:latest
$ docker rmi amazonlinux:1
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?