2 minutes
[Docker] CentOS6でwingを使わず最新のgitにする
お世話になっております。
しゃまとんです。
この前、Docker Hubに公開していたあるコンテナのリポジトリにissueが飛んできてたので確認してみると、 「このコンテナのgolangのバージョンあげてや〜」みたいなのだったので対応することにしました。
対象のコンテナがCentOS 6で作られていて、コンテナにはgitとgolangがインストールされているものでした。
じゃあgolangのバージョンだけ上げておくか〜ということで対応して、コンテナをビルドすると途中でエラーに。
原因はgit2.x系をインストールする際に使っていたwingリポジトリが使えなくなっていたことでした。
うーんこれは仕方がないということでgitを別の方法で入れることに。
(実は他のところで生きているかもしれません)
手法としては至って単純で、とりあえず標準のgitをyum installした後に、 最新のgitをcloneしてきてビルドしておきかえるというものです。
バージョンはgithubのstableの最新をビルドするようにしました。
Dockerfileはこちらになります。
From centos:6
MAINTAINER shamaton
# define
ARG go_ver="1.10.4"
# root work
RUN yum update -y
RUN yum install -y sudo
RUN useradd -m -d /home/docker -s /bin/bash docker && echo "docker:docker" | chpasswd
RUN echo "docker ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# install latest stable git
RUN yum -y install \
git \
gcc \
curl-devel \
expat-devel \
gettext-devel \
openssl-devel \
zlib-devel \
perl-ExtUtils-MakeMaker && \
git clone https://github.com/git/git.git && \
cd git/ && \
git checkout `git tag | sort -V | grep -v "\-rc" | tail -1` && \
yum -y remove git && \
make prefix=/usr all && \
make prefix=/usr install && \
cd / && \
rm -rf /git
# install golang
RUN curl -O https://storage.googleapis.com/golang/go${go_ver}.linux-amd64.tar.gz
RUN tar -C /usr/local -xzf go${go_ver}.linux-amd64.tar.gz && \
rm go${go_ver}.linux-amd64.tar.gz
# change user docker
WORKDIR /home/docker
USER docker
# user work
ENV PATH $PATH:/usr/local/go/bin
RUN mkdir -p ${HOME}/.packages
ENV GOPATH /home/docker/.packages
大事なのは、#install latest stable gitのところですね。
git及びビルド用パッケージをインストールして、
↓
gitのlatest stableをclone
↓
とりあえずインストールしたgitをアンイストール
↓
make / make install
として最新版を使えるようにしました。
ちなみに以前はこんなふうでした。
# update git
RUN cd /etc/yum.repos.d/ && \
curl -O http://wing-repo.net/wing/6/EL6.wing.repo && \
yum -y --enablerepo=wing install git
行数は増えました(見やすさのため)が、コマンド的には一行でまとめておきました。
ただ、これはコンテナをビルドしたタイミングでバージョンに差異がでるので、気にする必要がある場合には、cloneするバージョンを指定するほうがいいかもですね。
以上です。