【Docker】CentOS7,8をコンテナ上で動作とSSHアクセスまで

Dockerのコンテナ上でCentOS7を動かし、sshアクセスまでできる状態を構築します。

DockerのCentOSイメージでは、VMプレーヤーなどをインストールして動作するよりも、簡単にCentOS7を動かせますし、すごく軽いのでオススメです。

「Docker」上でCentOS7のコンテナ作成と起動

それではDockerコンテナ上でCentOS7を動作させますが、まずは、CentOS7のDockerイメージの取得を実施します。

Dockerイメージの取得は「docker pull」コマンドを使用します。
コマンドの書き方は以下となります。

docker pull (options) name:tag

CentOSのイメージを取得する際は「tag」の部分に今回取得する「centos7」、もしくは「7」を指定することでCentOS7の最新バージョンを取得することができます。

 前述の通り CentOS のイメージはバージョンごとにタグが切られており、CentOS 7 のタグ名は「7」もしくは「centos7」を指定してあげることで、CentOS 7 の最新版を取得することができます。 よって次のようにコマンドを実行します。

/ $ docker pull centos:centos7
centos7: Pulling from library/centos
ab5ef0e58194: Pull complete 
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
/ $ 

上記コマンドでCentos7を取得できたことを以下のコマンドで確認できます。

/ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              centos7             5e35e350aded        3 months ago        203MB
/ $ 

DockerでCentOS7のイメージからコンテナの作成と起動

CentOS7のDockerイメージから、実際にコンテナを作成して起動をさせます。
上記で取得したCentOS7のDockerイメージからコンテナを作成して起動をするには「docker run」コマンドを使用します。

docker run (options) image (command)

今回は以下のように「docker runコマンドを実行します。

 次のように docker run コマンドを実行して、コンテナを作成・起動してみましょう。 ここでは新しく作成するコンテナに centos7 という名前をつけています。

コンテナ起動

/ $ docker run -itd --privileged -p 2222:22 --name centos7 centos:centos7 /sbin/init
5ef592aa81dd2e406fc5004335cbb83ced64e46a09cd3ec6fa1bc53011bd208a
/ $ 
  • -it コンテナのプロセスにttyを割り当てる
  • -d コンテナをバックグラウンドで実行
  • –p ポート指定(ここではsshアクセスポートの変更)
  • –privileged systemctlコマンドを使えるようにしたいのでこのオプションを追加
  • –name 作成したコンテナに名前をつける

「–privileged」オプションを追加しないと、CentOSを使用する際に必要となる「systemctl」コマンドなどが利用できないので、使いたい方は追加しましょう。

また、今回は作成したCentOSへsshアクセスをさせたいので、「-p」オプションを使用し、自身のポート番号「2222」へアクセスした際に作成したコンテナへアクセスできるようにします。

上記で、問題なくコンテナが起動したら、以下「docker ps」コマンドで確認をします。

/ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
5ef592aa81dd        centos:centos7      "/bin/bash"         About a minute ago   Up About a minute                       centos7
/ $ 

Dockerコンテナ上でCentOS7を操作

上記で、CentOS7のコンテナが起動したら、実際に操作をしてみます。
CentOS7の操作は「docker exec」コマンドを実行します。

docker exec (options) container-names command

以下のコマンドを実行することで「CentOS7」を操作することができます。
また、root権限での状態で操作となります。

/ $ docker exec -it centos7 /bin/bash
[root@5ef592aa81dd /]# 

CentOS7で初めの操作としては以下を実施しておきましょう。

初回操作として、yumアップデートを実施します。

[root@5ef592aa81dd ~]# yum -y update

最低限、インターフェースやルートの状態を確認したいので「iproute」もインストールしておきます。

[root@5ef592aa81dd ~]# yum -y install iproute

CentOS7へsshアクセスができるようにする

次に、外部からCentOSへアクセスできるようにSSHを起動します。

「openssh-server」をインストールします。

[root@9f4f2cb7cc93 /]# yum -y install openssh-server

インストール後、サービスを起動します。

[root@9f4f2cb7cc93 /]# systemctl start sshd.service

サービス起動後は以下ステータスを確認し、SSHサービスがアクティブ状態になっていることを確認します。

[root@9f4f2cb7cc93 /]# systemctl status sshd.service
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-02-29 09:26:14 UTC; 1min 37s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 354 (sshd)
   CGroup: /docker/9f4f2cb7cc93d1e62fbf408f0d520b14fb0f777234733b9156aaeb17673cfc57/docker/9f4f2cb7cc93d1e62fbf408f0d520b14fb0f777234733b9156aaeb17673cfc57/system.slice/sshd.service
           └─354 /usr/sbin/sshd -D
           ‣ 354 /usr/sbin/sshd -D

Feb 29 09:26:14 9f4f2cb7cc93 systemd[1]: Starting OpenSSH server daemon...
Feb 29 09:26:14 9f4f2cb7cc93 systemd[1]: Started OpenSSH server daemon.

rootパスワードを設定

次にSSHログイン時のパスワードを設定します。
以下ではパスワードを「test」とした時の実行例です。

[root@9f4f2cb7cc93 ~]# passwd
Changing password for user root.
New password:test
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:test 
passwd: all authentication tokens updated successfully.
[root@9f4f2cb7cc93 ~]# 

上記「passwd」コマンドが使えない場合は、「yum install」もしくは「dnf install」を実施します。

[root@66a2f447ae7a ~]# yum -y install passwd

コンテナ(CentOS7)へSSHアクセス

パスワード設定後、コンテナで起動したCentOS7へSSHログインを実行します。

~ $ ssh -p 2222 root@localhost
root@localhost's password: test
Last login: Sun Mar  1 03:33:03 2020 from gateway
[root@9f4f2cb7cc93 ~]# 

「docker run」で事前に設定したように、SSHのポート22を「2222」に変更をしているので、2222をポート指定としてSSHログインを実行します。

コンテナの停止・起動・削除

コンテナで起動している「CentOS7」を停止する場合は「docker stop』コマンドを実行します。

~ $ docker stop centos7
centos7
~ $ 

コンテナの停止を確認する場合は、「docker ps -a」コマンドを実行します。
「STATUS」が「Exited」だと停止している状態となります。

~ $ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
9f4f2cb7cc93        centos:centos7      "/sbin/init"        21 hours ago        Exited (137) 31 seconds ago                       centos7
ae99052b78db        django              "python3"           5 days ago          Exited (137) 5 days ago                           test

停止したコンテナを起動する場合は「docker start」コマンドにコンテナ名を指定して実行します。

~ $ docker start centos7
centos7
~ $ 

コンテナを削除する場合は「cocker rm」コマンドにコンテナ名を指定すると削除するできます。

$ docker stop centos7
centos7
$ docker rm centos7
centos7

イメージ削除

コンテナを削除し、CentOS7のイメージごとを削除したい場合は「docker rmi」コマンドを実行します。
イメージを削除する場合は、「IMAGE ID」を指名します。

~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
django              latest              9108c69607a8        5 days ago          972MB
python              2.7                 09a181e16b7e        3 weeks ago         896MB
python              3                   efdecc2e377a        3 weeks ago         933MB
centos              centos7             5e35e350aded        3 months ago        203MB
~ $ 
~ $ docker rmi 5e35e350aded 

以上がDockerでCentOS7の起動、SSHアクセスまでの手順となります。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

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



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!