参考: Docker on Ubuntu 18.04 環境構築

本稿は参考資料なので、飛ばしてしまって問題ありません

当サイトで公開している LinuxNight は、以下のような設定をすでに施した Ubuntu Linux OS です(Node.js のインストール以外)



構成

  • OS:
    • Ubuntu 18.04
  • エディタ:
    • VSCode
  • パッケージマネージャ:
    • Linuxbrew
  • コマンドラインツール:
    • Git
    • Node.js
  • その他:
    • Docker

Linuxbrew導入

gitやビルドツール等の必須パッケージをインストールし、パッケージマネージャとして Linuxbrew を導入します

# 各種パッケージをアップデート
## sudo: root権限でコマンド実行
## apt: Ubuntu 標準のパッケージマネージャ
$ sudo apt update && sudo apt upgrade -y
[sudo] password: # <= 設定したパスワードを入力してインストール

# git, ビルドツール等の必須パッケージをインストール
$ sudo apt install -y build-essential git curl vim ruby

# 不要なパッケージを自動削除
$ sudo apt autoremove -y

# Linuxbrew導入
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
## PATHを通す
$ echo 'export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

# Linuxbrewバージョン確認
$ brew --version
Homebrew 2.2.0

なお、Linuxbrewでインストールしたパッケージが多くなりすぎて環境をリセットしたいときなどは、Linuxbrewごと削除してしまえば良いです

Linuxbrewの削除は以下のようにして行います

# アンインストールスクリプトの実行
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

# ディレクトリが残ることがあるため、その場合は手動で削除する
$ sudo rm -rf /home/linuxbrew

Ubuntuネットワークが不安定な場合

Ubuntu 18.04 はネットワークの挙動が不安定という報告があります

そのような場合は、IPv6を無効化すると解決する場合があるため、試してみると良いかもしれません

# vi ターミナルエディタに慣れていない場合は nano をインストールしておくと少しは操作しやすいかも知れない
$ sudo apt install -y nano

# /etc/default/grub を nano で編集する
## vi に慣れている場合は vi で編集しても良い
$ sudo nano /etc/default/grub
/etc/default/grub
# 以下の環境変数に ipv6.disable=1 を追加
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
GRUB_CMDLINE_LINUX="ipv6.disable=1"

# ...(略)...

編集したら grub を再起動します

$ sudo update-grub

# マシンも再起動
## vagrant環境であれば PowerShell で vagrant reload
$ sudo reboot

「Temporary failure in name resolution」エラーが出る場合

ネットワーク環境によっては Ubuntu のコマンド実行時に「Temporary failure in name resolution」(名前解決に一時的に失敗)というエラーが出ることがあります

これは DNSキャッシュサーバが原因であることが多く、Google Public DNS など、他のDNSキャッシュサーバに変更することで解決することがあります

# /etc/systemd/resolved.conf を編集
$ sudo nano /etc/systemd/resolved.conf

Google Public DNS(優先DNS: 8.8.8.8, 代替DNS: 8.8.4.4)を設定します(参考: パブリックDNSを丸ごと解説します

/etc/systemd/resolved.conf
[Resolve]
# 複数設定する場合は半角スペース区切りで並べる
DNS=8.8.8.8 8.8.4.4

# ..(略)..

編集したら systemd-resolved を再起動します

$ sudo systemctl restart systemd-resolved

# 現在のDNS設定を確認
$ sudo systemd-resolve --status
## DNS Servers が設定した値になっていればOK
Global
    DNS Servers: 8.8.8.8
                 8.8.4.4
    :

VSCodeのインストール

Microsoft公式ページから debパッケージをダウンロードしてインストールします

# curl で debパッケージをダウンロード
$ curl -L https://go.microsoft.com/fwlink/?LinkID=760868 -o vscode.deb

# debパッケージからインストール
$ sudo dpkg -i vscode.deb

# いくつか足りない依存パッケージがあるはずなので、それらを含めて fix install
$ sudo apt install -yf

# Ubuntu等のGTK環境では、以下の設定を追加しておく
$ echo 'export DISPLAY=:0.0' >> ~/.bashrc
$ source ~/.bashrc

Docker導入

Dockerインストール

# Dockerインストール
$ sudo apt install -y apt-transport-https ca-certificates software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable test edge"
$ sudo apt update && sudo apt install -y docker-ce

# dockerデーモンをスタートアップ登録
$ sudo systemctl enable docker

# dockerデーモン起動
$ sudo service docker start

# dockerバージョン確認
$ docker -v
Docker version 19.03.5, build 633a0ea838

# DockerCompose導入
$ sudo curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

# DockerComposeバージョン確認
$ docker-compose -v
docker-compose version 1.24.0, build 0aa59064

# dockerをsudoなしで実行可能に
## カレントユーザーをdockerグループに所属させれば良い
$ sudo gpasswd -a $USER docker
$ sudo chgrp docker /var/run/docker.sock # docker.sockへのグループ書き込み権限を付与
$ sudo service docker restart

マシン再起動

Dockerを sudo 権限なしで実行する設定を反映するためには、一度マシンを再起動する必要があります

$ sudo reboot

Vagrant環境で Ubuntu を実行している場合は、PowerShell で以下のコマンドを実行してください

# Vagrantfile のあるディレクトリで以下のコマンドを実行し、Vagrantマシン再起動
> vagrant reload

Docker動作確認

docker run コマンドでコンテナイメージの取得・実行を行います

ここでは、動作確認のための hello-world コンテナを利用してみます

コンテナとはアプリやインフラなどを入れた状態のスナップショットのようなもので、コンテナを使うことで常に同一の環境を再現することが可能となります

# hello-world コンテナを実行
## 初回実行時はコンテナイメージがローカルにないため、ダウンロードが同時に行われる
$ docker run hello-world

## => いろいろ表示されるが、以下のような文章が出力されればOK
### Hello from Docker!
### This message shows that your installation appears to be working correctly.

Node.js のインストール

Linuxbrewを用いて、最近のフロントエンド開発に必須な Node.js をインストールしておきます

# brew は root権限(sudo)なしでパッケージインストール可能
$ brew install node

# Node.js のパッケージマネージャとして yarn を導入しておくことを推奨
$ npm i -g yarn

# Node.js のバージョン確認
$ node -v
v13.2.0

# yarn のバージョン確認
$ yarn -v
1.21.0