Skip to content

Instantly share code, notes, and snippets.

@devlights
Last active January 19, 2022 06:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save devlights/70d552402c5d7a55ed44d6f85c31aca2 to your computer and use it in GitHub Desktop.
Save devlights/70d552402c5d7a55ed44d6f85c31aca2 to your computer and use it in GitHub Desktop.
My Dockerfiles
# syntax=docker/dockerfile:1-labs
FROM golang:rc-bullseye
#---------------------------------------------
# BUILD ARGUMENTS
#---------------------------------------------
ARG UID=1000
ARG GID=1000
ARG USERNAME=dev
ARG USERPASSWD=dev
ARG GROUPNAME=dev
ARG SUDOGROUP=%dev
ARG PKGS="vim exuberant-ctags sudo tzdata locales file iputils-ping net-tools ncat psmisc"
#---------------------------------------------
# ROOT OPERATIONS
#---------------------------------------------
USER root
# >>> Install packages
RUN <<EOF
apt-get update -q
DEBIAN_FRONTEND=noninteractive apt-get install -y -q --no-install-recommends ${PKGS}
EOF
# >>> 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
rm -rf /var/lib/apt/lists/*
EOF
# >>> Create user with sudo permission
RUN <<EOF
groupadd -g ${GID} ${USERNAME}
useradd -m -s /bin/bash -u ${UID} -g ${GID} ${USERNAME}
echo "${USERNAME}:${USERPASSWD}" | chpasswd
echo "${SUDOGROUP} ALL=(ALL) ALL" > /etc/sudoers.d/dev
EOF
# >>> Define environments
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ Asia/Tokyo
#---------------------------------------------
# NON-ROOT USER OPERATIONS
#---------------------------------------------
USER dev
# >>> Install go packages
RUN <<EOF
go install golang.org/x/tools/cmd/goimports@latest
go install honnef.co/go/tools/cmd/staticcheck@latest
go install github.com/go-delve/delve/cmd/dlv@latest
go clean -modcache
EOF
# >>> Copy vim config file
COPY ./vimrc.docker /home/${USERNAME}/.vimrc
# >>> Set working directory
WORKDIR /workspace
#---------------------------------------------
# MISC
#---------------------------------------------
EXPOSE 8888
VOLUME /workspace
# 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment