ローカル開発環境(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でアクセス
rootでログイン
Windows10からリモートデスクトップでDockerのCentOS7にログインできた!!
あとはGNOMEに日本語環境をセットアップして終了