-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
181 lines (154 loc) · 6.44 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
FROM amazonlinux:2 as base
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "installing base stuff" && \
yum -y groupinstall "Development Tools" && \
yum install -y pcre-devel xz-devel openssl wget jq python3 && \
python3 -m pip install -U pip
FROM base as shellcheck
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "installing shellcheck" && \
scversion="stable" && \
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/${scversion?}/shellcheck-${scversion?}.linux.x86_64.tar.xz" | tar -xJv && \
cp "shellcheck-${scversion}/shellcheck" /usr/bin/
FROM base as ag
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "install the silver searcher (ag)" && \
git clone --depth 1 https://github.com/ggreer/the_silver_searcher.git && \
(cd the_silver_searcher && ./build.sh && make install)
FROM base as fzf
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "install fzf" && \
git clone --depth 1 https://github.com/junegunn/fzf.git && \
(cd fzf; yes | ./install)
FROM base as awscli
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "installing aws-cli" && \
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
./aws/install
FROM base as bash-commons
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "bash commons" && \
git clone --branch v0.1.3 https://github.com/gruntwork-io/bash-commons.git && \
mkdir -p /opt/gruntwork && \
cp -r bash-commons/modules/bash-commons/src /opt/gruntwork/bash-commons && \
chown -R $USER:$(id -gn $USER) /opt/gruntwork/bash-commons
FROM base as go
ENV GOPATH /root/.go
ENV GOROOT /usr/local/go
ENV PATH "/usr/local/go/bin:${PATH}"
ENV PATH "/root/.go/bin:${PATH}"
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "installing go" && \
curl -L https://golang.org/dl/go1.16.4.linux-amd64.tar.gz -o go.tar.gz && \
tar -xzf go.tar.gz && \
mv go /usr/local && \
rm -rf go.tar.gz && \
log_info "installing shfmt" && \
GO111MODULE=on go get mvdan.cc/sh/v3/cmd/shfmt && \
log_info "installing iamlive" && \
GO111MODULE=on go get github.com/iann0036/iamlive
FROM base as rust
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "installing rust" && \
curl https://sh.rustup.rs -sSf -o install && \
bash install -y && \
source /root/.cargo/env && \
log_info "installing bat" && \
cargo install --locked bat
FROM base as docker
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "installing docker" && \
amazon-linux-extras install docker && \
log_info "installing docker-compose" && \
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) \
-o /usr/local/bin/docker-compose && \
chmod +x /usr/local/bin/docker-compose
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "installing unzip" && \
yum install -y unzip
FROM amazonlinux:2
LABEL maintainer="James Kyburz [email protected]"
ENV GOPATH /root/.go
ENV GOROOT /usr/local/go
ENV PATH "/usr/local/go/bin:${PATH}"
ENV PATH "/root/.go/bin:${PATH}"
ENV PATH "/root/.cargo/bin:${PATH}"
ENV DENO_INSTALL "/root/.deno"
ENV PATH "$DENO_INSTALL/bin:$PATH"
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "copying from multi-stage steps"
COPY --from=shellcheck /usr/bin/shellcheck /usr/bin/shellcheck
COPY --from=ag /usr/local/bin/ag /usr/local/bin/ag
COPY --from=awscli /usr/local/bin /usr/local/bin
COPY --from=awscli /usr/local/aws-cli /usr/local/aws-cli
COPY --from=docker /usr/bin/docker /usr/bin/docker
COPY --from=docker /usr/local/bin/docker-compose /usr/local/bin/docker-compose
COPY --from=go /root/.go/bin /root/.go/bin
COPY --from=rust /root/.cargo/bin /root/.cargo/bin
COPY --from=bash-commons /opt/gruntwork/bash-commons /opt/gruntwork/bash-commons
COPY --from=fzf /fzf/bin /fzf/bin
COPY --from=fzf /fzf/shell /fzf/shell
COPY --from=fzf /root/.fzf.bash /root/.fzf.bash
RUN \
log_info() { echo -e "\033[0m\033[1;94m${*}\033[0m"; } && \
log_info "installing base stuff" && \
mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" && \
mkdir -p /root/.config && \
chown -R $USER:$(id -gn $USER) /root/.config && \
yum install -y git python3 jq unzip openssl openssh-clients less && \
python3 -m pip install -U pip && \
log_info "installing node" && \
curl -sL https://rpm.nodesource.com/setup_lts.x | bash - && \
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | tee /etc/yum.repos.d/yarn.repo && \
yum install -y nodejs yarn && \
log_info "installing latest npm" && \
npm install npm@latest -g && \
log_info "installing deno" && \
curl -fsSL https://deno.land/x/install/install.sh | sh && \
log_info "installing envsubst" && \
curl -L https://github.com/a8m/envsubst/releases/download/v1.2.0/envsubst-"$(uname -s)"-"$(uname -m)" -o envsubst && \
chmod +x envsubst && \
mv envsubst /usr/local/bin && \
log_info "installing aws-sam-cli" && \
pip3 install --no-cache-dir aws-sam-cli && \
log_info "installing black" && \
pip3 install --no-cache-dir black && \
log_info "installing virtualenv" && \
pip3 install --no-cache-dir virtualenv && \
log_info "installing awscurl" && \
pip3 install --no-cache-dir awscurl && \
log_info "installing yq" && \
pip3 install --no-cache-dir yq && \
log_info "installing 1password cli" && \
curl https://cache.agilebits.com/dist/1P/op/pkg/v1.9.2/op_linux_amd64_v1.9.2.zip -o op.zip && \
unzip op.zip && \
chmod +x op && \
mv op /usr/bin && \
rm -rf op.zip op.sig && \
terraform_latest=$(curl https://checkpoint-api.hashicorp.com/v1/check/terraform | jq -r '.current_version') && \
log_info "installing terraform ${terraform_latest:?}" && \
curl https://releases.hashicorp.com/terraform/${terraform_latest:?}/terraform_${terraform_latest:?}_linux_amd64.zip -o terraform.zip && \
unzip terraform.zip && \
chmod +x terraform && \
mv terraform /usr/bin && \
rm -rf terraform.zip && \
log_info "installing ecs cli" && \
curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-latest && \
chmod +x /usr/local/bin/ecs-cli && \
yum clean all && \
rm -rf /var/cache/yum && \
log_info "✨ ops-kitchen installation complete. ✨"
COPY .bashrc /root/.bashrc
RUN echo 'source /root/.fzf.bash' >> /root/.bashrc