Mac를 사용하여 SSH 서버 프로세스를 수행하는 Docker 이미지 만들기

릴리즈


  • Mac
  • macOS Mojave 10.14.3

  • Docker
  • 18.09.1
  • Mac 용 Docker Desktop 설치

  • 다음 Docker Hub 페이지의 "Download from Docker Hub"
    https://docs.docker.com/docker-for-mac/install/
  • Docker Hub 웹 사이트에 로그인하지 않은 경우 "Plaease Logiin To Download"
    Docker Hub 계정을 만들고 Get Docker
  • 에 들어가기
  • Docker.Mac에 dmg 설치
  • 설치 후 Docker가 시작되면 Mac의 위쪽 메뉴 옆에 Docker 아이콘이 표시됩니다. "Sing in"을 클릭합니다.
    'Docker ID'의 경우 메일 주소로 로그인할 수도 있지만 docker pull에서 오류가 발생할 수 있으므로 Docker ID를 입력합니다.

  • * 터미널에서 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 레지스트리의 공식 아마존 linux 이미지를 이용해서...
  • 창고 확인
    
    $ 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

    Docker file 만들기

  • Mac의 적절한 폴더에 다음 내용에 따라 Docker file
  • 만들기
  • 서버 계정의 id/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"]
    
  • Docker file 만들기


  • Docker files 파일이 있는 동일한 폴더에서 다음 실행
    ※ 최초 구축 시 Docker Hub 레지스트리에서 아마존 linux: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의 원시 이미지입니다.
    위의 이미지는 Docker file의 컨텐트로 오리지널 이미지의 이미지를 사용자 정의합니다.
     
    Docker file을 수정하고 재구성하려면 위의 이미지만 삭제하고 아래의 이미지만 남기면 매번 구축할 때마다 Docker Hub 등록표에서amazonlinux:1의 이미지를 다운로드할 필요가 없습니다.
  • 컨테이너 제작과 SSH 연결 확인


  • 다음 명령을 사용하여 Docker 이미지에서 컨테이너 만들기
    
    $ docker run -d -p 127.0.0.1:2222:22 --name amazonlinux1 amazonlinux1
    
    "-p 127..0.1:22:22"는 포트 전달 설정입니다.
    로컬 127..0.1:222를 컨테이너에 연결하는 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
    
  • 좋은 웹페이지 즐겨찾기