くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

ssh/systemd設定済みUbuntuのDockerイメージをDockerHubで公開する

cronとかsshとかsystemdとかをDockerコンテナ上で試したいなと思い、
いろいろ試してみたときの備忘録(*´ω`*)

いい感じのがなかったので、DockerHubの勉強も兼ねて公開してみた

つくったDockerfile

Dockerfileの中身はこんな感じ。

FROM ubuntu:22.04

### 環境変数
ENV TZ Asia/Tokyo
ENV ROOT_PASSWORD root

### パッケージのインストール
RUN apt update
# systemdやタイムゾーン関連
RUN apt install -y init systemd tzdata locales
# ssh&cron
RUN apt install -y cron openssh-server
# utils
RUN apt install -y vim curl unzip

### config sshd
# rootでのログインを許可
RUN sed -i 's/^#\(PermitRootLogin\) .*/\1 yes/' /etc/ssh/sshd_config
# PAM(Pluggable Authentication Module)認証の無効化
RUN sed -i 's/^\(UsePAM yes\)/# \1/' /etc/ssh/sshd_config
RUN apt clean

# setenv: 起動時にパスワードやTZを変更するスクリプトを準備
RUN { \
  echo '#!/bin/bash'; \ 
  echo 'echo "root:${ROOT_PASSWORD}" | chpasswd'; \ 
  echo 'ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime'; \ 
  } > /usr/local/bin/setenv.sh; \ 
  chmod +x /usr/local/bin/setenv.sh;

EXPOSE 22

# 環境設定用のスクリプトを実行
ENTRYPOINT ["setenv.sh"]
# systemd起動するためにinitを実行
CMD ["/sbin/init"]

確認用にdocker-compose.ymlも。
docker compose up -dすればOK

version: "2"
name: "ubuntu_2204"
services:
  ubuntu:
    container_name: "ubuntu"
    build:
      context: ./
      dockerfile: ./Dockerfile
    privileged: true
    ports:
      - "8122:22"

Docker Hubへのpush

Docker Hubへのプッシュはこんな感じ。
作成したDocker Hubリポジトリと同じ名前にすればOK。

$ ls
Dockerfile

# Docker Hubにログイン
$ docker login

# Dockerイメージのビルド
$ docker build . -t "memorylovers/ubuntu:latest"

# ビルドしたイメージをpush
$ docker push memorylovers/ubuntu:latest

使ってみる

あとはこんな感じで起動&sshすればOK

$ docker run -d --privileged -p 8022:22 memorylovers/ubuntu
$ ssh -p 8022 root@localhost

以上!! これでいろいろできるように(*´ω`*)

参考にしたサイトさま