LoginSignup
34
37

More than 5 years have passed since last update.

macでdockerオリジナルイメージを作ってSSHログインするまで

Posted at

macでdockerオリジナルイメージを作ってSSHログインするまで

dockerのコンテナにSSHログインするのは違うやろって話も言われそうですが
手元の開発環境のイメージで、dockerコンテナにSSHで鍵認証ログインするところまでを
つらつらと書きます。

せっかくなので、dockerのオリジナルのイメージを作ってそれを利用するみたいな
イメージで投稿しようと思います。

centos6をベースにsshログイン出来るイメージを作る場合
dockerのようなLXCコンテナは慣れるまで少し癖があるので
ちょっとずつ理解していけばいいと思います。

前提

以下が実現されているコンテナを作ります。

  1. yum最新化
  2. 鍵認証でSSHログイン出来る

dockerオリジナルイメージを作る

今回はcentos6をベースに使います。

dockerのベースとなるイメージの取得(5分)

$ docker pull centos:centos6

dockerイメージの確認(1分)

$ docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos                       6                   1a895dd3954a        9 weeks ago         190.6 MB

dockerイメージの作成(15分)

手元のmacで秘密鍵を作成して、鍵を使ってdeployユーザーにログインする事を想定。

dockerイメージ作るためのフォルダを作成

$ mkdir docker-images/centos6_ssh_enabled

Dockerfile作成

$ cd docker-images/centos6_ssh_enabled
$ vi Dockerfile
Dockerfile
FROM centos:centos6
MAINTAINER YOUR_NAME

RUN yum -y update

# Dev tools for all
RUN yum -y install git vim && \
    yum clean all
RUN yum -y install automake bison bzip2 gcc gcc-c++ gdbm-devel git libffi-devel libtool libxml2-devel libxslt-devel make openssh openssh-clients openssh-server openssl openssl-devel passwd patch readline readline-devel rsync sqlite-devel sudo tar tcl tcl-devel tk tk-devel vim wget which zlib zlib-devel && \
    yum clean all

########################################## sshd ##############################################
# Create user
RUN useradd deploy
RUN passwd -f -u deploy

# Set up SSH
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -C '' -N ''
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -C '' -N ''
RUN mkdir -p /home/deploy/.ssh; chown deploy /home/deploy/.ssh; chmod 700 /home/deploy/.ssh
ADD authorized_keys /home/deploy/.ssh/authorized_keys

RUN chown deploy /home/deploy/.ssh/authorized_keys
RUN chmod 600 /home/deploy/.ssh/authorized_keys

# setup sudoers
RUN echo "deploy ALL=(ALL) ALL" >> /etc/sudoers.d/deploy

# Set up SSHD config
#RUN sed -ri 's/#Port 22/Port 2222/g' /etc/ssh/sshd_config
RUN sed -ri 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config

# Init SSHD
RUN /etc/init.d/sshd start
RUN /etc/init.d/sshd stop

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

########################################## timezone ##############################################
# timezone
RUN cp -p /usr/share/zoneinfo/Japan /etc/localtime

sshの秘密鍵と公開鍵の作成

$ ssh-keygen -t rsa -f develop
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in develop.
Your public key has been saved in develop.pub.
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXXXXXXXXXX
The key's randomart image is:
+---[RSA 2048]----+
|  oo.            |
|.                |
|*oo.* o o        |
|**++.Oo+         |
|+==E*  .S        |
| +.+++.o         |
|. oo+ +          |
|   =o  .         |
|    ..           |
+----[SHA256]-----+

dockerコンテナに追加する公開鍵設置

$ mv develop.pub authorized_keys

最終的なフォルダ構成は

└── centos6_ssh_enabled
    ├── Dockerfile
    ├── authorized_keys
    └── develop

dockerイメージのビルド

dockerのオリジナルイメージをビルドします。

$ docker build -t centos6_ssh_enabled/20151224 .

dockerイメージの確認

$ docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos6_ssh_enabled/20151224_v1   latest              db43ea1c4db7        58 seconds ago      640.7 MB
centos                            6                   1a895dd3954a        10 weeks ago        190.6 MB

dockerコンテナの確認(5分)

まずは作成したコンテナを起動してみましょう。
hostnameをssh_enabledに指定して、docker-host1のポート番号2222をコンテナの22にポートマッピングして起動

$ docker run -h ssh_enabled -d -p 2222:22 centos6_ssh_enabled/20151224_v1

dockerコンテナの起動確認

% docker ps
CONTAINER ID        IMAGE                             COMMAND               CREATED             STATUS              PORTS                  NAMES
414bd82f54f0        centos6_ssh_enabled/20151224_v1   "/usr/sbin/sshd -D"   3 minutes ago       Up 3 minutes        0.0.0.0:2222->22/tcp   dreamy_swirles

docker hostのIP確認

$ docker-machine ip docker-host1
192.168.99.101

dockerコンテナへのSSH接続確認

$ ssh -p 2222 -i ./develop deploy@192.168.99.101
[deploy@c69d635f18e5 ~]$ ls
[deploy@c69d635f18e5 ~]$ sudo su -

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[root@c69d635f18e5 ~]# exit
logout
[deploy@c69d635f18e5 ~]$ exit
logout
Connection to 192.168.99.101 closed.

まとめ

dockerのコンテナにSSHログインなんてけしからんというような人も多いですが、手元の開発環境向けにvagrant使っていた人がdockerに移行するイメージで投稿してみました。サーバーを複数台使ったインフラのテストなんかはvagrantよりも遥かに軽快に動作するので、dockerおすすめです。本番利用についても、徐々に実績出てきているので検討フェーズになっているかと感じます。

34
37
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
34
37