概要
よく忘れるので、ここにメモメモ。。。
最近はLinuxでもHomebrewが使えるようになっているので便利ですね。
DockerfileでHomebrewをインストール済みの状態にしておきたかったので、調べてたら以下のような形になりました。
Dockerfile
# syntax=docker/dockerfile:1-labs FROM buildpack-deps:stable-scm #--------------------------------------------- # BUILD ARGUMENTS #--------------------------------------------- ARG UID=1000 ARG USERNAME=dev ARG HOMEDIR=/home/${USERNAME} ARG PKGS_ESSENTIAL="zip unzip bash-completion build-essential sudo file time less man-db" ARG PKGS_EDITOR="vim exuberant-ctags" ARG PKGS_LOCALE="tzdata locales" ARG PKGS_UTILS="jq lsof iputils-ping net-tools ncat psmisc" #--------------------------------------------- # ROOT OPERATIONS #--------------------------------------------- USER root # >>> Install packages ENV DEBIAN_FRONTEND=noninteractive RUN <<EOF apt-get update -q apt-get install -yq --no-install-recommends ${PKGS_ESSENTIAL} ${PKGS_EDITOR} ${PKGS_LOCALE} ${PKGS_UTILS} apt-get clean -y rm -rf /var/cache/debconf/* /var/lib/apt/lists/* /tmp/* /var/tmp/* EOF ENV DEBIAN_FRONTEND= # >>> Build locales RUN <<EOF locale-gen ja_JP.UTF-8 localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8 ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime EOF ENV LANG=ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja ENV LC_ALL ja_JP.UTF-8 ENV TZ Asia/Tokyo # >>> Create user with sudo permission RUN <<EOF useradd -l -u ${UID} -G sudo -md ${HOMEDIR} -s /bin/bash -p ${USERNAME} ${USERNAME} sed -i.bkp -e 's/%sudo\s\+ALL=(ALL\(:ALL\)\?)\s\+ALL/%sudo ALL=NOPASSWD:ALL/g' /etc/sudoers EOF ENV HOME=${HOMEDIR} WORKDIR $HOME #--------------------------------------------- # NON-ROOT USER OPERATIONS #--------------------------------------------- USER dev # >>> Base settings RUN <<EOF sudo echo "Running 'sudo' for dev: success" mkdir -p /home/dev/.bashrc.d (echo; echo "for i in \$(ls -A \$HOME/.bashrc.d/); do source \$HOME/.bashrc.d/\$i; done"; echo) >> /home/dev/.bashrc EOF # >>> Vim settings RUN <<EOF git clone https://gist.github.com/1a16cd5b551fe4e76ae941abb658b893.git vim-config-files cp vim-config-files/.vimrc ${HOMEDIR} rm -rf vim-config-files EOF # >>> Homebrew settings RUN <<EOF mkdir ~/.cache /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" EOF ENV PATH=$PATH:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin/ ENV MANPATH="$MANPATH:/home/linuxbrew/.linuxbrew/share/man" ENV INFOPATH="$INFOPATH:/home/linuxbrew/.linuxbrew/share/info" ENV HOMEBREW_NO_AUTO_UPDATE=1 #--------------------------------------------- # MISC #--------------------------------------------- WORKDIR /workspace VOLUME /workspace
試してみる
これでコンテナ起動して確認してみると
$ ls -1 Dockerfile $ docker image build -q . sha256:88236b5315c4810120fd45bfcc6ec05c835aea7c243eb0f0bc73cbfc4e6f6adb $ docker container run -it --rm 882 bash dev@0433c1346497:/workspace$ which brew /home/linuxbrew/.linuxbrew/bin/brew dev@0433c1346497:/workspace$ brew doctor Your system is ready to brew. dev@f93b5b90a342:/workspace$ go bash: go: コマンドが見つかりません dev@0433c1346497:/workspace$ brew install -q golang 🍺 /home/linuxbrew/.linuxbrew/Cellar/go/1.17.6: 10,822 files, 537.5MB ==> Running `brew cleanup go`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). dev@0433c1346497:/workspace$ go version go version go1.17.6 linux/amd64
Gitpod の Dockerfile はとても参考になる
基本、Dockerfileで何かしらべようとするとき、私はよくGitpodのDockerfileを参考にしています。
いろんなやり方が書いてあるのでとても参考になります。
あと、基本的な構成は buildpack-deps を見て勉強することが多いです。こちらもとても参考になります。
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場