MENU
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
カテゴリー
  • IT関連 (623)
    • Bootstrap (2)
    • クラウド (4)
    • サーバー技術 (185)
    • ストレージ (7)
      • NetApp (7)
    • ネットワーク技術 (91)
      • Cisco (36)
      • Juniper (18)
      • 負荷分散装置 (17)
    • パソコン関連 (92)
      • MAC (25)
      • Windows (54)
    • プログラミング (154)
      • Ansible (11)
      • C言語 (23)
      • Python (111)
        • Django (20)
    • 仮想化 (88)
      • Docker (63)
      • VMware (23)
  • VPS (200)
    • ABLENET VPS (16)
    • Amazon Lightsail(VPS) (2)
    • ConoHaVPS (37)
    • mixhostVPS (4)
    • WebARENAIndigo (16)
    • XServerVPS (34)
    • お名前.com VPS (12)
    • さくらのVPS (24)
    • カゴヤクラウドVPS (13)
    • シンVPS (7)
  • レンタルサーバー (56)
    • エックスサーバー (38)
  • 光回線 (8)
  • 技術スキルアップ開発・学習 (7)
    • Envader (2)
    • RareTECH (2)
    • Udemy (3)
もう現役20年超えましたー。経験値ならだれにも負けないエンジニア技術ブログ
インフラエンジニアの技術LOG
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
インフラエンジニアの技術LOG
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
  1. ホーム
  2. IT関連
  3. 仮想化
  4. Docker
  5. 【Docker】Ubuntuコンテナで「systemctl」を使うために「/sbin/init」で起動する方法

【Docker】Ubuntuコンテナで「systemctl」を使うために「/sbin/init」で起動する方法

2021 9/30
Docker
2021年5月9日2021年9月30日

DockerでUbuntuコンテナを構築したのですが、DockerはデフォルトでLinux系コンテナに対して制限がかかっているため、「systemctl」などのシステム系のコマンドが使えなかったり、動作しません。

また、Ubuntuは通常だと「/sbin/init」では起動せず、「/bin/bash」で起動します。
この状態だと、以下のように「systemd」が使用するsystemID「1」が「/bin/bash」で使用されており、動作しません。

root@25ea4973ebfb:/# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   3744  2916 pts/0    Ss+  02:30   0:00 /bin/bash
root         9  0.1  0.1   3744  2964 pts/1    Ss   02:30   0:00 /bin/bash
root        17  0.0  0.1   5472  2232 pts/1    R+   02:30   0:00 ps -aux

この状態だと、Ubuntuコンテナを使うにも色々と制約があるので、「/sbin/init」を使用できるようにし、「systemctl」コマンドが実行できるようにします。

本環境はConoHaVPSを使用しています。

目次
安くて高速!高性能VPSで快適開発!
最速5分でサーバー構築
>>>こちらをチェック

エンジニア必見! 技術力を伸ばすVPS徹底比較
>>>VPS比較

Ubuntuコンテナを「/sbin/init」で起動し、「systemctl」コマンドを使用できるようにする手順

Ubuntuコンテナで「/sbin/init」で起動する方法は、「docker comit」コマンドを使用しカスタマイズしたイメージを「/sbin/init」で起動する方法となります。

まずは以下のように通常にUbuntuコンテナを起動します。
システムデバイスにアクセスできるように「–privileged」オプションを必ず付けるようにしましょう。
「-p」オプションはコンテナにアクセスするために使用するポートを書いていますが、カスタマイズするコンテナでは使用しなくても大丈夫です。

$ docker run -itd --privileged -p 3222:22 -p 13389:3389 -p 5901:5901 --name ubuntu --hostname ubuntu:latest  ubuntu
6a77e56ccb22a872923106af7fe3a4c698cdb857954e79272def334fea1452d1

コンテナが正常に起動すると以下のように表示されます。

$ docker ps
CONTAINER ID   IMAGE                        COMMAND        CREATED          STATUS         PORTS                                                                   NAMES
6a77e56ccb22   ubuntu                       "/bin/bash"    13 seconds ago   Up 8 seconds   0.0.0.0:5901->5901/tcp, 0.0.0.0:3222->22/tcp, 0.0.0.0:13389->3389/tcp   ubuntu

Ubuntuコンテナをカスタマイズする

次に起動したUbuntuコンテナにアクセスし、コンテナイメージをカスタマイズします。

ubuntuコンテナにアクセス

$ docker exec -it ubuntu /bin/bash
root@ubuntu:latest:/# 

アクセス後、Ubuntuのアップデート実施を実施します。

root@ubuntu:latest:/# apt -y update
root@ubuntu:latest:/# apt -y upgrade

「/sbin/init」が使用できるように「init」のインストールと、「systemctl」をインストールします。
インストール後、「exit」でコンテナから抜けます。

root@ubuntu:latest:/# apt-get install -y init
root@ubuntu:latest:/# apt-get install -y systemctl
root@ubuntu:latest:/# exit

※追記
こちらもインストール

root@ubuntu:latest:/# apt-get install -y systemd

「docker commit」コマンドでカスタマイズした新しい「Ubuntu」イメージを作成

次にカスタマイズしたUbuntuコンテナから、新規にUbuntuイメージを作成します。

対象のコンテナのIDを確認します。
今回のコンテナIDは「6a77e56ccb22」となります。

$ docker ps      
CONTAINER ID   IMAGE                        COMMAND        CREATED         STATUS         PORTS                                                                   NAMES
6a77e56ccb22   ubuntu                       "/bin/bash"    6 minutes ago   Up 6 minutes   0.0.0.0:5901->5901/tcp, 0.0.0.0:3222->22/tcp, 0.0.0.0:13389->3389/tcp   ubuntu

「docker commit」コマンドを使用して新規にイメージ「ubuntu-test:test」を作成します。

$ docker commit  6a77e56ccb22 ubuntu-test:test 
sha256:1800d0ff0c096c93149a71538f9a53d44607f1888dafb726c21da5e2df71b3c7

新規に作成したdockerイメージから新規に「sbin/init」でコンテナを起動

上記で新規に作成したイメージから、「sbin/init」でDockerコンテナを起動します。

$ docker run -itd --privileged -p 3222:22 -p 13389:3389 -p 5901:5901 --name ubuntu-test --hostname ubuntu-test  ubuntu-test:test /sbin/init 
7386e5d47ad4247450b95b36ec26db35847b885c551800d62d7186f74756a0df

起動した新規のコンテナにアクセスし、systemdが使用できたことが確認できます。

$docker exec -it ubuntu-test /bin/bash
root@ubuntu-test:/# ps -aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.5 167660 10248 ?        Ss   May08   0:12 /sbin/init
root          23  0.0  0.6  45384 12612 ?        S<s  May08   0:00 /lib/systemd/systemd-journald
systemd+      37  0.0  0.4  20968  8468 ?        Ss   May08   0:00 /lib/systemd/systemd-resolved
systemd+      38  0.0  0.3  89944  6192 ?        Ssl  May08   0:03 /lib/systemd/systemd-timesyncd
message+      41  0.0  0.2   8592  4564 ?        Ss   May08   0:09 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --sys
root          43  0.0  0.8  26092 16308 ?        Ss   May08   0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root          45  0.0  0.3  16032  6212 ?        Ss   May08   0:04 /lib/systemd/systemd-logind
root          48  0.0  0.0   2348  1412 tty1     Ss+  May08   0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
root          54  0.0  0.1   3876  3088 pts/1    Ss   May08   0:00 /bin/bash
root       20219  0.0  0.2 232944  6012 ?        Ssl  May08   0:00 /usr/lib/policykit-1/polkitd --no-debug
root       22485  0.0  0.1   6408  2700 pts/1    R+   11:23   0:00 ps -aux

「/sbin/init」でUbuntuコンテナを起動し、systemdを使えるまでの手順は以上となります。

エンジニアスキルをアップする勉強法

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。

あわせて読みたい
現役エンジニアがおすすめするVPSレンタルサーバ比較(高速SSD限定) 格安VPS比較(2025年最新版)

Docker
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)



検索
カテゴリー
新着記事
  • XServerVPS アニメ風 男の子 プログラミングをしている VPSを利用している 楽しそうにしている
    XServerVPSで証明書(SSL)を取得する方法
    2025年3月24日
    XServerVPS
  • レンタルサーバ アニメ風 女の子 楽しんでパソコンをしている 目がキラキラ
    WordPressがレンタルサーバよりVPSで利用する方がおすすめの理由
    2025年3月19日
    VPS
  • VPS レンタルサーバー アニメ風 女の子 プログラミングをしている VPSを利用している 楽しそうにしている
    VPSとクラウドの違いとは?初心者向けにわかりやすく解説
    2025年3月5日
    VPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSはWindows serverを利用できない。その理由と利用できるOSは?
    2025年3月4日
    シンVPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSでゲームを利用する環境はあるのか
    2025年3月4日
    シンVPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSのサイトの表示速度は他社に比べて早いのか?
    2025年3月4日
    シンVPS
目次
目次