Dockerを使ってWindows上にLinux環境を用意してみる

Docker

Linuxの仮想環境を用意したいときって、ありますよね。

VirtualBoxなどを使う方法もありますが、今回は比較的軽量に仮想環境を用意できるよう、DockerコンテナとしてLinuxを立ち上げます。

一口にLinuxといっても色々あるわけですが、今回はUbuntuを選択します。

この記事の目標

この記事の目標は、

Dockerで最低限のコマンドがインストールされたLinuxを起動してみる

ことです。

ただし、以下を前提とします。

前提
・Docker、docker-composeがインストールされていること
・Dockerとはどんなものかが分かる程度の基礎知識があること

Dockerは、WindowsかMacならDocker Desktopを用意すればよいでしょう。Linuxなら、以下の公式ドキュメントに従ってインストールしましょう。

Docker Engine を Linux にインストール — Docker-docs-ja 1.13.RC ドキュメント

この記事の内容ができれば、同時に「Dockerとはなにか」も何となく理解できると思います。

Linuxイメージを探す

Docker Hubから、Linux系のイメージを選びます。

Explore Docker’s Container Image Repository | Docker Hub

Linux系としてはUbuntuに馴染みがあるので、Ubuntuを選択します。

Ubuntu – Official Image | Docker Hub

今回は、ubuntu 22.04あたりにします。

Dockerファイル作成

以下のようなDockerfileを作ります。

FROM ubuntu:22.04

とりあえず、ubuntuのイメージでビルドするだけのファイルです。

これだけでもコマンドを叩けばubuntuを立ち上げることができますが、今回はdocker-compose経由で立ち上げます。

とりあえず、最低限の機能を持つファイルを作ります。

docker-compose.yml

version: '3'
services:
  ubuntu:
    build: .
    container_name: 'ubuntu'
    tty: true

作成したDockerfile, docker-compose.ymlファイルを、以下のようにディレクトリに置きます。

Ubuntu-env
    ├─ Dockerfile
    └─ docker-compose.yml

コンテナ立ち上げ

docker-composeコマンドでコンテナを立ち上げます。

Ubuntu-env$ docker-compose up -d

こんな感じになると思います。

Ubuntu-env$ docker-compose up -d
Creating network "ubuntu-env_default" with the default driver
Building ubuntu
Step 1/1 : FROM ubuntu:22.04
22.04: Pulling from library/ubuntu
c610536171e3: Downloading [>                                                  ]  310.5kB/30.5c610536171e3: Downloading [=>                                                 ]  940.4kB/30.5c610536171e3: Downloading [==>                                                ]  1.571MB/30.5c610536171e3: Downloading [===>                                               ]  2.194MB/30.5c610536171e3: Downloading [====>                                              ]   2.82MB/30.5c610536171e3: Downloading [=====>                                             ]  3.451MB/30.5c610536171e3: Downloading [======>                                            ]  4.074MB/30.5c610536171e3: Downloading [========>                                          ]  5.008MB/30.5c610536171e3: Pull completeDigest: sha256:a02c32cf0c2a7e8743c74deef66637aa70e063c9bd40e9e1f8c0b3ea0750b0ba
Status: Downloaded newer image for ubuntu:22.04
 ---> 6795c0065f64

Successfully built 6795c0065f64
Successfully tagged ubuntu-env_ubuntu:latest

コンテナに入ってみる

以下のコマンドなどを使い、立ち上がっているDockerコンテナにアタッチします。

Ubuntu-env$ docker exec -it ubuntu bash
root@4dceb435369c:/# 

色々見てみましょう。

root@4dceb435369c:/# ls -a
.   .dockerenv  boot  etc   lib    lib64   media  opt   root  sbin  sys  usr
..  bin         dev   home  lib32  libx32  mnt    proc  run   srv   tmp  var

最下層のディレクトリはこんな感じみたいです。Linuxとしては大体見たことがある感じですが、「.dockerenv」というファイルが気になりますね。

catで見てみましたが、空のようです。

root@4dceb435369c:/# cat .dockerenv 
root@4dceb435369c:/# 

まあ、たぶん名前的にDockerの環境ファイルでしょう。

次に、OSバージョンの確認でもしておきましょう。

root@4dceb435369c:/# cd /etc/os-release 
bash: cd: /etc/os-release: Not a directory
root@4dceb435369c:/# cat /etc/os-release 
PRETTY_NAME="Ubuntu Jammy Jellyfish (development branch)"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

当たり前ですが、ちゃんとUbuntuの22.04でした。

環境を整備する

とりあえずは上記まででUbuntu自体は用意出来ましたが、空っぽです。

コマンドに関して言えば、sudoもなければviもありません。

これだけだとつまらないので、コマンドを入れたり、ソースコードを書けるような環境にして見ましょう。

Dockerfileを編集します。

FROM ubuntu:22.04

# aptパッケージのアップデート
RUN apt-get update
# sudo, vimのインストール
RUN apt-get install sudo
RUN apt-get install -y vim

ついでに、ローカルでファイルを編集しやすいように、マウントしてしまいましょう。ubuntuには空のmntというディレクトリがあったので、そこにマウントします。

(もちろん、VS codeのRemote-Conntainerを使ってしまってもいいんですが、今回は勉強も兼ねて)

docker-compose.ymlを以下のように編集してください。

version: '3'
services:
  ubuntu:
    build: .
    container_name: 'ubuntu'
    tty: true
    volumes:
      - ./local_dir:/mnt

Dockerfileを編集したので、いったんコンテナを停止して、ビルドからやり直します。

Ubuntu-env$ docker-compose down
Ubuntu-env$ docker-compose build

推奨設定

デフォルトのUbuntuでのパッケージのアップデート/インストールは遅いので、以下のページを参考にすると良いと思います。
Ubuntuの高速化~リポジトリ参照先の変更 – Qiita

遅すぎて待てない人は、以下のコマンドをDockerfileに書き込んでからbuildしましょう。

RUN sudo sed -i.bak -r 's!deb \S+!deb mirror://mirrors.ubuntu.com/mirrors.txt!' /etc/apt/sources.list

ビルドが完了したら、マウントしたことによって、ローカルディレクトリが以下のようになっているか確認しましょう。

Ubuntu-env
    ├─ Dockerfile
    ├─ docker-compose.yml
    └─ local_dir

コンテナの中に入ってコマンドがインストールされている環境になっているか確認します。

sudoが使えるか確認

root@58f48edddc7f:/# sudo -l
Matching Defaults entries for root on 58f48edddc7f:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User root may run the following commands on
        58f48edddc7f:
    (ALL : ALL) ALL

viが使えるか確認

root@58f48edddc7f:/# vi /mnt/test.txt

viで、適当な文字をtest.txtに書き、保存しましょう。

mntディレクトリに書いたので、ローカルのlocal_dirにもtest.txtができているはずです。確認しましょう。反対に、ローカルでtest.txtを編集しても、コンテナUbuntuに反映されるはずです。

これで、viを使用しなくても、ローカルのエディタでファイルを編集することができます。

コメント

タイトルとURLをコピーしました