メインコンテンツまでスキップ

DockerでSlackデスクトップ環境を分離する

はじめまして!この記事では、Dockerコンテナを使ってSlackデスクトップアプリケーションの分離された可搬性の高い実行環境を構築する方法について探ります。

なぜSlackを分離するのか?

Slackは、チームのコラボレーションやコミュニケーションのための非常に人気の高いツールです。全員をループに残すことができてとても便利ですが、時々長時間バックグラウンドで実行されることがあります。それにより、システム上の他のアプリケーションとの競合が発生することがあります。一方で、Slackのアップデート、プラグイン、設定ファイルなどがホストシステムの環境を「汚染」することもあり得ます。これは少し面倒な問題です!

DockerコンテナでSlackを実行することで、効果的に分離することができ、次のようなメリットがあります。

  • 他のアプリケーションとのリソース競合を回避
  • システム環境の汚染を防止
  • 可搬性と一貫性のある実行環境を実現
  • 設定のバックアップと復元を容易化

Dockerfile

軽量なDebian 11 (Bullseye)システムをベースにSlackコンテナイメージを構築します。以下が主要なステップです。

  1. 基本的なソフトウェアパッケージのインストール: apt-transport-https、ca-certificates、curl、gnupgなど、リポジトリの追加とインストールの準備をします。

  2. 言語環境の設定: デフォルトのロケールをen_US.UTF-8に設定します。

  3. Slackリポジトリの追加: Slack公式ソースからリポジトリキーを取得し、ソースアドレスをsources.listに書き込みます。

  4. Slackのインストール: aptコマンドを使って、設定したソースに基づきslack-desktopパッケージとその実行時依存関係をインストールします。

  5. エントリポイントの設定: /usr/lib/slack/slackをコンテナのデフォルトの実行コマンドとして設定します。

完全なDockerfileスクリプトは次のとおりです。

FROM debian:bullseye-slim

ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8

RUN apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
locales \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*

RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
&& locale-gen en_US.utf8 \
&& /usr/sbin/update-locale LANG=en_US.UTF-8

# Slackデビアンリポジトリを追加
RUN curl -sSL https://packagecloud.io/slacktechnologies/slack/gpgkey | apt-key add -
RUN echo "deb https://packagecloud.io/slacktechnologies/slack/debian/ jessie main" > /etc/apt/sources.list.d/slacktechnologies_slack.list

RUN apt-get update && apt-get -y install \
libasound2 \
libgtk-3-0 \
libx11-xcb1 \
libxkbfile1 \
slack-desktop \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["/usr/lib/slack/slack"]

Slackコンテナの実行

構築したイメージを実行するには、次のコマンドを使用できます。

docker run --rm -it \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
--device /dev/snd \
--device /dev/dri \
--device /dev/video0 \
--group-add audio \
--group-add video \
-v "${HOME}/.slack:/root/.config/Slack" \
--ipc="host" \
--name slack \
jess/slack

このコマンドでは、次のマッピングと設定を行っています。

  • ホストのタイムゾーン情報をコンテナにマッピングする
  • ホストのX11 Unixソケットを共有し、コンテナでGUIアプリケーションを実行できるようにする
  • コンテナのDISPLAY環境変数を設定してホストのXサーバーに接続する
  • オーディオ、ビデオなどのデバイスをコンテナに公開する
  • 現在のユーザーの.slackディレクトリをコンテナにマッピングして設定とキャッシュを保存する
  • ホストのIPCネームスペースでコンテナを実行し、Xサーバーの使用を許可する

このようにして、分離でカスタマイズ可能なコンテナ内でSlackデスクトップアプリケーションを安全に実行できます。

まとめ

Dockerを使うと、Slackなどのデスクトップアプリケーションをホストシステムから分離することができます。Dockerfileに基づく自動ビルドにより、ローカル環境に関係なく、Slackが一貫性と可搬性のある環境で実行されることが保証されます。