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
以上!! これでいろいろできるように(*´ω`*)
参考にしたサイトさま
- [Linux(Ubuntu)]タイムゾーンを日本時間にする5つの方法まとめ
- DockerコンテナにSSHする際に環境変数を引き継ぐ #Docker - Qiita
- Dockerイメージ導入(ubuntu)〜ssh接続(自動サービス起動)まで #Docker - Qiita
- Publishing Docker images - GitHub Docs
- GitHub Actionsを利用したDockerイメージの自動ビルドを試す | SIOS Tech. Lab
- 【入門】Docker Hubとは?概要と仕組み、基本的な使い方を解説 - カゴヤのサーバー研究室
- 【ubuntu】Dockerでsystemctlを使えるようにする
- Dockerでsystemctlを使いたい!(Docker初心者向け) - NIFTY engineering