LoginSignup
2
4

More than 3 years have passed since last update.

ローカル開発環境(Windows10)にDockerでCentOS7(GNOME)を構築しリモートデスクトップ接続

Last updated at Posted at 2021-04-22

ローカル開発環境(Windows10)にDockerでCentOS7のGUI(GNOME)環境を構築してWindows10からリモートデスクトップで接続するまでの手順について記載しました。

開発環境

PC:1台(メモリ16GB)※AWS等のクラウドは使わずローカル完結です。
Windows10 Professional 64bit
Docker Desktop for Windows :インストール方法

※注意点:インストール方法のシステム要件を参照のこと
Docker Desktop for Windowsをインストールするには
・Windows 10 Professional 64-bit
・Windows 10 Enterprise 64-bit
・Windows 10 Home 64-bit with WSL 2.
のいずれかの環境であることが必要であると記載されています。
また、
Hyper-V と Windows コンテナ機能の有効化が必要

DockerでCentOS7(GNOME)の構築

1.Dockerファイルの作成

下記をDockfileとして作成します。

FROM centos:centos7

# CentOS ProjectのGPG公開鍵をインストールする
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

# インストール済みのパッケージをアップデート&キャッシュのクリア
RUN yum -y update && yum clean all

# 言語を日本語に設定
RUN localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
RUN echo 'LANG="ja_JP.UTF-8"' >  /etc/locale.conf
ENV LANG ja_JP.UTF-8

# 日付を日本語に設定
RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# manをインストールする前に、manファイルをインストールするように設定変更
RUN sed -i -e"s/^tsflags=nodocs/\# tsflags=nodocs/" /etc/yum.conf

# manと、man-pagesをインストール
RUN yum -y install man
RUN yum -y install man-pages.noarch
RUN yum -y install man-pages-ja.noarch

# GNOMEをインストール
#RUN yum -y groupinstall "GNOME Desktop"

#ネットワーク関連をインストール
RUN yum -y install NetworkManager
RUN yum -y install net-tools
RUN yum -y install iproute

# XRDPをインストール
RUN curl -OL https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN rpm -Uvh epel-release-latest-7.noarch.rpm
RUN yum -y install xrdp tigervnc-server

2.DockerfileからDockerイメージ構築

ここでは下記のディレクトリにDockerfileを作成したという前提にします

 C:\Users\sample\test のディレクトリ

2021/04/23  01:15    <DIR>          .
2021/04/23  01:15    <DIR>          ..
2021/04/23  01:16             1,351 Dockerfile

Dockerイメージファイル(centos7_test)を作成します。

cd C:\Users\sample\test
docker build -t centos7_test .

[+] Building 61.3s (22/22) FINISHED
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 1.39kB                                                                             0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/centos:centos7                                                  0.0s
 => [ 1/18] FROM docker.io/library/centos:centos7                                                                  0.0s
 => CACHED [ 2/18] RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7                                          0.0s
 => CACHED [ 3/18] RUN yum -y update && yum clean all                                                              0.0s
 => CACHED [ 4/18] RUN localedef -i ja_JP -f UTF-8 ja_JP.UTF-8                                                     0.0s
 => CACHED [ 5/18] RUN echo 'LANG="ja_JP.UTF-8"' >  /etc/locale.conf                                               0.0s
 => CACHED [ 6/18] RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock                                             0.0s
 => CACHED [ 7/18] RUN rm -f /etc/localtime                                                                        0.0s
 => CACHED [ 8/18] RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime                                        0.0s
 => CACHED [ 9/18] RUN sed -i -e"s/^tsflags=nodocs/\# tsflags=nodocs/" /etc/yum.conf                               0.0s
 => CACHED [10/18] RUN yum -y install man                                                                          0.0s
 => CACHED [11/18] RUN yum -y install man-pages.noarch                                                             0.0s
 => CACHED [12/18] RUN yum -y install man-pages-ja.noarch                                                          0.0s
 => [13/18] RUN yum -y install NetworkManager                                                                     13.0s
 => [14/18] RUN yum -y install net-tools                                                                           3.5s
 => [15/18] RUN yum -y install iproute                                                                             7.0s
 => [16/18] RUN curl -OL https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm                    4.0s
 => [17/18] RUN rpm -Uvh epel-release-latest-7.noarch.rpm                                                          0.5s
 => [18/18] RUN yum -y install xrdp tigervnc-server                                                               30.9s
 => exporting to image                                                                                             2.2s
 => => exporting layers                                                                                            2.2s
 => => writing image sha256:820c775152990a9891cdb02d2b2ce119b469e896eecad22bd8c900f98be0a969                       0.0s
 => => naming to docker.io/library/centos7_test                                                                    0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

3Dockerイメージからコンテナ作成し起動

コンテナ(con01)を作成し起動してアタッチします。

ここでは
3389(XRDP) ⇒ リモートデスクトップ用:30000ポートからアクセス
22(SSH)    ⇒ SSH用 :30001ポートからアクセス
として起動しています。

docker run -d --privileged -p 30000:3389 -p 30001:22 --name con01 centos7_test /sbin/init
docker exec -it con01 /bin/bash

CentOS7のコンテナ(con01)にアタッチできました。

[root@70880df10a53 /]# ll
total 80
-rw-r--r--   1 root root 12114 11月 13 10:55 anaconda-post.log
lrwxrwxrwx   1 root root     7 11月 13 10:53 bin -> usr/bin
drwxr-xr-x  15 root root  3640  4月 23 02:03 dev
-rw-r--r--   1 root root 15448  4月 23 01:23 epel-release-latest-7.noarch.rpm
drwxr-xr-x   1 root root  4096  4月 23 02:03 etc
drwxr-xr-x   2 root root  4096  4月 11  2018 home
lrwxrwxrwx   1 root root     7 11月 13 10:53 lib -> usr/lib
lrwxrwxrwx   1 root root     9 11月 13 10:53 lib64 -> usr/lib64
drwxr-xr-x   2 root root  4096  4月 11  2018 media
drwxr-xr-x   2 root root  4096  4月 11  2018 mnt
drwxr-xr-x   2 root root  4096  4月 11  2018 opt
dr-xr-xr-x 291 root root     0  4月 23 02:03 proc
dr-xr-x---   1 root root  4096  4月 23 01:23 root
drwxr-xr-x  16 root root   340  4月 23 02:03 run
lrwxrwxrwx   1 root root     8 11月 13 10:53 sbin -> usr/sbin
drwxr-xr-x   2 root root  4096  4月 11  2018 srv
dr-xr-xr-x  13 root root     0  4月 23 02:03 sys
drwxrwxrwt   1 root root  4096  4月 23 02:03 tmp
drwxr-xr-x   1 root root  4096 11月 13 10:53 usr
drwxr-xr-x   1 root root  4096  4月 23 02:03 var

4.Gnome Desktop(GUI)のインストール

Dockerイメージ内ではCentOS7のminimalインストールなので手動でGUIをインストールします。

[root@70880df10a53 /]# yum -y groupinstall "GNOME Desktop"
Loaded plugins: fastestmirror, ovl
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * epel: ftp.riken.jp
 * extras: ftp-srv2.kddilabs.jp
 * updates: packet01.centos.org
Resolving Dependencies
--> Running transaction check
---> Package ModemManager.x86_64 0:1.6.10-4.el7 will be installed
--> Processing Dependency: ModemManager-glib(x86-64) = 1.6.10-4.el7 for package: ModemManager-1.6.10-4.el7.x86_64
--> Processing Dependency: libqmi-utils for package: ModemManager-1.6.10-4.el7.x86_64
--> Processing Dependency: libmbim-utils for package: ModemManager-1.6.10-4.el7.x86_64
--> Processing Dependency: libqmi-glib.so.5()(64bit) for package: ModemManager-1.6.10-4.el7.x86_64
--> Processing Dependency: libmm-glib.so.0()(64bit) for package: ModemManager-1.6.10-4.el7.x86_64
--> Processing Dependency: libmbim-glib.so.4()(64bit) for package: ModemManager-1.6.10-4.el7.x86_64
--> Processing Dependency: libgudev-1.0.so.0()(64bit) for package: ModemManager-1.6.10-4.el7.x86_64
---> Package NetworkManager-adsl.x86_64 1:1.18.8-2.el7_9 will be installed
---> Package NetworkManager-bluetooth.x86_64 1:1.18.8-2.el7_9 will be installed
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
xorg-x11-drv-intel.x86_64 0:2.99.917-28.20180530.el7                                         xorg-x11-drv-nouveau.x86_64 1:1.0.15-1.el7
xorg-x11-drv-qxl.x86_64 0:0.1.5-5.el7                                                        xorg-x11-drv-synaptics.x86_64 0:1.9.0-2.el7
xorg-x11-drv-v4l.x86_64 0:0.2.0-49.el7                                                       xorg-x11-drv-vesa.x86_64 0:2.4.0-3.el7
xorg-x11-drv-vmmouse.x86_64 0:13.1.0-1.el7.1                                                 xorg-x11-drv-vmware.x86_64 0:13.2.1-1.el7.1
xorg-x11-drv-void.x86_64 0:1.4.1-2.el7.1                                                     xorg-x11-drv-wacom.x86_64 0:0.36.1-3.el7
xorg-x11-font-utils.x86_64 1:7.5-21.el7                                                      xorg-x11-fonts-Type1.noarch 0:7.5-9.el7
xorg-x11-proto-devel.noarch 0:2018.4-1.el7                                                   xorg-x11-server-common.x86_64 0:1.20.4-15.el7_9
yajl.x86_64 0:2.0.4-4.el7                                                                    yelp-libs.x86_64 2:3.28.1-1.el7
yelp-xsl.noarch 0:3.28.0-1.el7                                                               zenity.x86_64 0:3.28.1-1.el7

Complete!
[root@70880df10a53 /]#

4.ファイアウォールの起動

[root@70880df10a53 /]# systemctl start firewalld

5.XRDPとSSHのポート許可

[root@70880df10a53 /]# firewall-cmd --permanent --zone=public --add-port=3389/tcp --add-port=22/tcp
success

6.XRDPの起動と起動設定

[root@70880df10a53 /]# systemctl start xrdp
[root@70880df10a53 /]# systemctl enable xrdp
Created symlink from /etc/systemd/system/multi-user.target.wants/xrdp.service to /usr/lib/systemd/system/xrdp.service.

7.SSHの起動と起動設定

[root@70880df10a53 /]# systemctl start sshd
[root@70880df10a53 /]# systemctl enable sshd

8.ファイアウォールの更新

[root@70880df10a53 /]# firewall-cmd --reload
success

9.ネットワークの確認

SSH(22)とXRDP(3389)が開いていることを確認

[root@70880df10a53 /]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3350          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

10.rootのパスワードを付与

[root@70880df10a53 /]# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

11.SSHでログイン

Windows10からSSHでDockerのCentOS7にログインできた!!

C:\Users\sample>ssh root@localhost -p 30001
root@localhost's password:

[root@70880df10a53 ~]# cd /
[root@70880df10a53 /]# ll
total 84
-rw-r--r--   1 root root 12114 11月 13 10:55 anaconda-post.log
lrwxrwxrwx   1 root root     7 11月 13 10:53 bin -> usr/bin
drwxr-xr-x   4 root root  4096  4月 23 02:24 boot
drwxr-xr-x  15 root root  3640  4月 23 02:03 dev
-rw-r--r--   1 root root 15448  4月 23 01:23 epel-release-latest-7.noarch.rpm
drwxr-xr-x   1 root root  4096  4月 23 02:44 etc
drwxr-xr-x   2 root root  4096  4月 11  2018 home
lrwxrwxrwx   1 root root     7 11月 13 10:53 lib -> usr/lib
lrwxrwxrwx   1 root root     9 11月 13 10:53 lib64 -> usr/lib64
drwxr-xr-x   2 root root  4096  4月 11  2018 media
drwxr-xr-x   2 root root  4096  4月 11  2018 mnt
drwxr-xr-x   1 root root  4096  4月 23 02:20 opt
dr-xr-xr-x 207 root root     0  4月 23 02:03 proc
dr-xr-x---   1 root root  4096  4月 23 02:49 root
drwxr-xr-x  37 root root   900  4月 23 02:36 run
lrwxrwxrwx   1 root root     8 11月 13 10:53 sbin -> usr/sbin
drwxr-xr-x   2 root root  4096  4月 11  2018 srv
dr-xr-xr-x  13 root root     0  4月 23 02:03 sys
drwxrwxrwt   1 root root  4096  4月 23 02:24 tmp
drwxr-xr-x   1 root root  4096 11月 13 10:53 usr
drwxr-xr-x   1 root root  4096  4月 23 02:20 var
[root@70880df10a53 /]#

12.Windows10のリモートデスクトップでログイン

localhost:30000でアクセス
image.png
rootでログイン
image.png

Windows10からリモートデスクトップでDockerのCentOS7にログインできた!!
image.png

あとはGNOMEに日本語環境をセットアップして終了

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4