$ mkdir -p ~/doc/docker/apache2_image $ cd ~/doc/docker/apache2_image
Dockerfile |
FROM ubuntu:24.04 # 必要なパッケージのインストール RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y \ sudo \ apache2 \ openssh-server \ supervisor \ && rm -rf /var/lib/apt/lists/* # guestユーザー追加+パスワード設定+sudo権限 RUN useradd -m guest && \ echo 'guest:PASSWORD' | chpasswd && \ adduser guest sudo # SSH 設定: パスワード認証を有効化 RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \ sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \ mkdir /var/run/sshd # Apache 設定: ServerNameエラー防止 RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf # supervisord 設定ファイル設置 RUN mkdir -p /var/log/supervisor COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # ポート開放 EXPOSE 22 80 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] |
supervisord.conf |
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:apache2] command=/usr/sbin/apache2ctl -D FOREGROUND |
$ docker build -t ubuntu24-apache2-sshd .エラーが起きた。
RROR: failed to solve: ubuntu:24.04: failed to resolve source metadata for docker.io/library/ubuntu:24.04: error getting credentials - err: exit status 1, out: error\ getting credentials - err: exit status 1, out: exit status 2: gpg: 公開鍵の復号に失敗しました: そのようなファイルやディレクトリはありません gpg: 復号に失敗しました: そのようなファイルやディレクトリはありません`
$ docker logout $ docker login URL と認証コードが示されるので、ブラウザでアクセスして、Docker Hub の ID とパスワードでloginする。 USING WEB-BASED LOGIN i Info → To sign in with credentials on the command line, use 'docker login -u' Your one-time device confirmation code is: XXXX-YYYY Press ENTER to open your browser or submit your device code here: https://login.docker.com/activate
$rm ~/.docker/donfig.json
$ gpg --list-keys
$ docker system prune -a ... Are you sure you want to continue? [y/N] y
$ docker build -t ubuntu24-apache2-sshd . ... 成功
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu24-apache2-sshd latest aa2786c0514a 16 minutes ago 428MB
$ sudo mkdir -p /home/docker ← ディレクトリを作成する $ sudo chmod 1777 /home/docker ← 誰でもファイルを作成できるが、作成した本人にしか消去できないモードに設定する $ ls -ld /home/docker ← ディレクトリのsticky bit が on になっていることを確認する。 drwxrwxrwt 3 root root 4096 4月 26 15:47 /home/docker
docker run --name httpd -p 20022:22 -p 20080:80 -p 20443:443 -v /home/docker/httpd:/root/doc -it ubuntu24-apache2-sshd起動オプション
ホストOS | ゲストOS |
---|---|
22 | 20022 |
80 | 20080 |
443 | 20443 |
$ ls -ld /home/docker/httpd drwxr-xr-x 2 nitta nitta 4096 4月 26 15:47 /home/docker/httpd
# ufw allow 20080 # ufw status 状態: アクティブ To Action From -- ------ ---- 22 ALLOW Anywhere 3389 ALLOW Anywhere 20080 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6) 3389 (v6) ALLOW Anywhere (v6) 20080 (v6) ALLOW Anywhere (v6)
他のマシンから ssh で guest 権限にアクセスして、パスワードを変更しておく。
$ ssh -p 20022 [email protected] ← ホストOSのIPアドレスで 20022番ポートへ ssh アクセスする password: xxxxxxxx ← Dockerfile で指定したguest のパスワード $ passwd Current password: xxxxxxxx ← Dockerfile で指定したguest のパスワード New password: yyyyyyyy ← 新しいパスワード Retype new password: yyyyyyyy ← 再度入力する
[問] docker desktop において、ホストOSが再起動すると自動的にゲストOSが起動するように設定する方法は?
[答] Docker の**コンテナ自動起動(自動再起動)**は、docker run 時に --restart オプションで設定する。
no (default) ... 自動起動しない always ... ホスト再起動後も自動起動 unless-stopped ... 手動停止しない限り自動起動 on-failure ... 異常終了したときのみ自動起動
(使用例) docker run -d --restart always --name httpd ubuntu:24.04
[答2] 既に作成済みのコンテナに対して自動起動を設定する。
(使用例) docker update --restart unless-stopped httpd