java鍜宲hp浠ュ強python (java php python浣跨敤鍦烘櫙)

不管是出于学习的目的还是因为公司的项目需要,往往我们需要接触多种语言的开发环境。问题是如果我们把所有的开发环境都安装到电脑上,那么电脑的配置往往跟不上我们开发环境的更新迭代速度。这种情况下我们希望能有一种软件,确保我们的开发环境稳定,及时更新,并且在不需要的情况下能完全的卸载无残留。Docker完美的符合了我们上述的需求。

问题是Docker的官方镜像往往是极精简版本,例如openjdk。这个镜像里除了java命令以外什么都没有。这种镜像在生产环境使用中非常的优秀,既稳定又因为体积小有很快的启动速度。但是在开发时会给我们带来很大的麻烦。例如我想查看日志文件,它没有tail命令。我想看进程它没有ps。等等。

这时我们需要自己创建一个属于我们开发人员的镜像。

https://gitee.com/fzh-oschina/ubuntu

FROM ubuntu:20.04
LABEL maintainer="1209103220@qq.com"
LABEL description="开发使用的ubuntu 镜像。基于ubuntu:20.04。"

ENV container docker
# -----------------apt配置---------------------------
# RUN rm -rf /etc/apt/sources.list
# ADD apt/20.04.sources.list /etc/apt/sources.list
RUN export DEBIAN_FRONTEND=noninteractive && \
    bash -c 'yes | unminimize'

RUN apt-get update

# -----------------时区配置---------------------------
RUN export DEBIAN_FRONTEND=noninteractive \
    && apt-get install -y tzdata \
    && ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && dpkg-reconfigure --frontend noninteractive tzdata

# -----------------中文---------------------------
RUN apt-get install -y language-pack-zh-hans
ENV LC_ALL zh_CN.UTF-8
ENV LANG zh_CN.utf8
ADD config/bash.bashrc /etc/bash.bashrc

# -----------------中文man---------------------------
RUN apt-get install -y man manpages-zh 
RUN rm -rf /etc/manpath.config 
ADD man/manpath.config /etc

# -----------------系统软件配置---------------------------
RUN apt-get install -y \
    build-essential \
    gcc \
    g++ \
    gdb \
    clang \
    cmake \
    rsync \
    tar \
    vim \
    automake \
    curl \
    telnet \
    openssl \
    libssl-dev \
    zlib1g-dev \
    libpcre3 \
    libpcre3-dev \
    libgd-dev \
    git \
    net-tools

# -----------------ssh---------------------------
RUN apt-get install -y \
    ssh \
    openssh-client \
    openssh-server

ADD ssh/sshd_config /etc/ssh/sshd_config
RUN chmod 600 /etc/ssh/sshd_config
ADD ssh/ssh_config /etc/ssh/ssh_config
RUN chmod 600 /etc/ssh/ssh_config

ADD .ssh/ /root/.ssh/
RUN chmod 600 /root/.ssh/*
RUN mkdir /run/sshd
EXPOSE 22/tcp
## ------------------------NGINX-------------------------------------
RUN mkdir -p /usr/src/nginx
WORKDIR /usr/src/nginx
RUN curl https://nginx.org/download/nginx-1.16.1.tar.gz -o nginx-1.16.1.tar.gz
RUN curl https://codeload.github.com/fdintino/nginx-upload-module/tar.gz/2.3.0 -o nginx-upload-module-2.3.0.tar.gz
RUN tar -xzvf nginx-1.16.1.tar.gz
RUN tar -xzvf nginx-upload-module-2.3.0.tar.gz
RUN rm -rf nginx-1.16.1.tar.gz
RUN rm -rf nginx-upload-module-2.3.0.tar.gz
WORKDIR /usr/src/nginx/nginx-1.16.1
RUN ./configure \
    --add-module=/usr/src/nginx/nginx-upload-module-2.3.0 \
    --with-http_image_filter_module \
    --with-http_ssl_module \
    --with-stream 
RUN make
RUN make install
RUN mkdir /usr/local/nginx/conf/vhost
RUN mkdir /var/log/nginx/
ADD nginx/ /usr/local/nginx/conf
RUN groupadd www
RUN useradd -g www www-nginx
RUN rm -rf /usr/share/nginx/html/*
EXPOSE 80/tcp

## ------------------------NODEJS-------------------------------------
WORKDIR /tmp
RUN wget https://npm.taobao.org/mirrors/node/v14.18.1/node-v14.18.1-linux-x64.tar.xz
RUN xz -d node-v14.18.1-linux-x64.tar.xz
RUN tar xvf node-v14.18.1-linux-x64.tar
RUN mv /tmp/node-v14.18.1-linux-x64 /usr/local/lib
ENV PATH $PATH:/usr/local/lib/node-v14.18.1-linux-x64/bin
# RUN npm install -g cnpm --registry=https://registry.npm.taobao.org
# RUN npm config set registry https://registry.npm.taobao.org
RUN rm -rf node-v14.18.1-linux-x64.tar
RUN apt install -y yarnpkg

## ------------------------python-------------------------------------
RUN apt install -y python2 python3-pip
RUN mkdir /root/.pip
RUN mkdir /usr/local/python
RUN pip3 install pygments
RUN pip3 install jupyter
RUN pip3 install --upgrade --user nbconvert
ADD ./python/.jupyter/jupyter_notebook_config.py /root/.jupyter/jupyter_notebook_config.py
EXPOSE 8888/tcp

# RUN pip install kafka-python


## ------------------------JAVA-------------------------------------
RUN apt install -y openjdk-8-doc openjdk-8-jdk openjdk-8-jdk-headless
ENV CLASSPATH .:/mnt/develop/jdk/extlib
RUN echo "export CLASSPATH=.:/mnt/develop/jdk/extlib" >> /etc/profile

WORKDIR /usr/lib
ADD java/apache-maven-3.8.1-bin.tar.gz /usr/lib
ENV M2_HOME /usr/lib/apache-maven-3.8.1
RUN echo "export M2_HOME=/usr/lib/apache-maven-3.8.1" >> /etc/profile
ENV PATH $M2_HOME/bin:$PATH
RUN echo "export PATH=\$M2_HOME/bin:\$PATH" >> /etc/profile
ADD java/settings.xml /root/.m2/settings.xml

ADD java/apache-tomcat-8.5.65.tar.gz /usr/lib
ADD java/tomcat/conf /usr/lib/apache-tomcat-8.5.65/conf
ADD java/tomcat/webapps/manager/META-INF/context.xml /usr/lib/apache-tomcat-8.5.65/webapps/manager/META-INF/context.xml
ENV TOMCAT_HOME /usr/local/apache-tomcat-8.5.65
RUN echo "export TOMCAT_HOME=/usr/local/apache-tomcat-8.5.65" >> /etc/profile

RUN mkdir /root/bin
WORKDIR /root/bin

RUN curl -L https://alibaba.github.io/arthas/install.sh | sh

RUN mkdir -p /skywalking/agent
ADD java/skywalking-agent/ /skywalking/agent
EXPOSE 8080/tcp
## ------------------------Go-------------------------------------
RUN mkdir -p /usr/local/project/src
# 需要现在*载下**go的linux版本安装包到 ./go 目录下。https://go.dev/dl/  修改下一句的go1.20.5.linux-amd64.tar.gz为*载下**的go的安装包名字
ADD go/go1.20.5.linux-amd64.tar.gz /usr/local
ADD go/protoc-3.15.3-linux-x86_64 /usr/local/protoc
ENV PATH=$PATH:/usr/local/go/bin:/usr/local/protoc/bin
RUN echo "export PATH=\$PATH:/usr/local/go/bin:/usr/local/protoc/bin" >> /etc/profile
ENV GOROOT=/usr/local/go
RUN echo "export GOROOT=/usr/local/go" >> /etc/profile
ENV GOPATH=/usr/local/project
RUN echo "export GOPATH=/usr/local/project" >> /etc/profile
WORKDIR /usr/local/project
RUN go env -w GOROOT=/usr/local/go
RUN go env -w GOPATH=/usr/local/project
RUN go env -w GO111MODULE=off
RUN go env -w CGO_ENABLED=0
## go国内代理
RUN go env -w GOPROXY=https://goproxy.cn
## ----------------------Go 第三方依赖 -------------------------------
RUN go get -u github.com/golang/protobuf/protoc-gen-go
# RUN go get github.com/micro/protoc-gen-micro
RUN go get github.com/kardianos/govendor
RUN go get github.com/go-acme/lego/log
RUN go get github.com/olivere/elastic/
RUN go get github.com/go-playground/validator/
RUN go get github.com/go-playground/universal-translator
RUN go get github.com/leodido/go-urn
RUN go get golang.org/x/crypto/sha384
## ----------------------php----------------------------------------

#     php74-php-process.x86_64 \
#     php74-php-pecl-nsq.x86_64 \
#     php74-php-process.x86_64 \
#     php74-php-pdo.x86_64 \
#     php74-php-pecl-redis4.x86_64 \
#     php74-php-pecl-grpc.x86_64 \
#     php74-php-pecl-protobuf.x86_64 \
#     php74-php-pecl-swoole4.x86_64 \
#     php74-php-pecl-yaf.x86_64

# RUN apt -y install software-properties-common
# RUN add-apt-repository ppa:ondrej/php
# RUN apt-get update
# RUN apt -y install php7.4 php7.4-fpm \
#     php7.4-redis \
#     php7.4-bcmath \
#     php7.4-gd \
#     php7.4-json \
# #    php-symfony-process php-mysqlnd-ms-all-dev pd-pdogg mysqlnd pecl-nsq\
#     php7.4-mbstring \
#     php7.4-zip \
#     php7.4-xml \
#     php7.4-soap \
#     php7.4-opcache \
#     php7.4-mysql \

ADD entrypoint.sh /entrypoint.sh
RUN chmod u+x /entrypoint.sh

CMD [ "/bin/sh","/entrypoint.sh" ]

# docker build -t registry.cn-shanghai.aliyuncs.com/fengzhihao/ubuntu:20.04 .

# docker push registry.cn-shanghai.aliyuncs.com/fengzhihao/ubuntu:20.04

# docker run -p 22:22 --rm -it --privileged=true --name ubuntu registry.cn-shanghai.aliyuncs.com/fengzhihao/ubuntu:20.04 /bin/bash

现有镜像

如果你本地编译镜像比较麻烦可以直接使用这个镜像。使用此镜像时需要注意ssh配置

 docker run -p 22:22 --rm -it --privileged=true --name ubuntu registry.cn-shanghai.aliyuncs.com/fengzhihao/ubuntu:20.04 /bin/bash

ssh配置

如果需要启用ssh。需要生成一个自己的ssh rsa证书并将镜像中的.ssh删除或者挂在一个本地目录。

php

php配置还有些不完善的地方所以这个镜像中没有配置。 下一篇文章中会有一个Centos的docker镜像中有php的配置

man的汉化

此镜像中的命令帮助已经汉化。使用man [命令]即可看到此命令的中文提示

pythonjavaphp瀵规瘮,javagopython鏁欑▼

时区

此镜像时区在不做特殊配置情况下永远是东八区。

nginx

默认nginx版本1.16.1 。升级只需要更新nginx的url后重新编辑即可

pythonjavaphp瀵规瘮,javagopython鏁欑▼

支持的开发环境

  1. NODEJS
  2. Python
  3. JAVA
  4. Go

建议

此镜像在开发测试环境使用比较好。内置多种命令可以快速定位问题。但是镜像体积较大,传输不方便。