* 以下示例使用 docker-compose 命令,因此需要 Dockerfile 和 docker-compose.yml 文件搭配

* 以下示例假设 Dockerfile 在 java 为文件名的目录下,java目录和 docker-compose.yml 在同一个目录下

* 为了能在 java 容器中使用 git, 在java目录下添加tools目录,并增加 .netrc 和 git-env.sh 文件

* 因为需要通过ssh的方式去链接到java容器,所以在tools目录下,还增加了ssh目录存放自己的ssh公钥

* 为了保证链接进容器,环境变量能正常,在java目录下还增加了maven.sh和kotlin.sh文件

* 因此文件目录结构如下:

- docker-compose.yml
- java
  - Dockerfile
  - maven.sh
  - kotlin.sh
  - tools
    - .netrc
    - git-env.sh
    - ssh
      - id_rsa.pub

* 以下内容仅做参考

* Dockerfile 参考内容:

FROM openjdk:8-jdk
MAINTAINER demo "[email protected]"
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY tools /var/tools/
WORKDIR /data
RUN mkdir -p /var/upload
RUN apt-get update && apt -y install locales tzdata \
curl wget cron vim git zip unzip procps telnet \
openssh-server net-tools \
&& cp -rf /var/tools/.netrc /root/ \
&& sh /var/tools/git-env.sh \
# 修改 dash 为 bash
# && ln -fs /bin/bash /bin/sh \
# 安装 maven 3.6.3
&& mkdir -p /var/tools/download \
&& wget -P /var/tools/download/ https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip \
&& unzip /var/tools/download/apache-maven-3.6.3-bin.zip -d /var/tools/ \
&& cp -rf /var/tools/maven.sh /etc/profile.d/ \
# 安装 kotlin 1.9.10
&& wget -P /var/tools/download/ https://github.com/JetBrains/kotlin/releases/download/v1.9.10/kotlin-compiler-1.9.10.zip \
&& unzip /var/tools/download/kotlin-compiler-1.9.10.zip -d /var/tools/ \
&& cp -rf /var/tools/kotlin.sh /etc/profile.d/
ENV MAVEN_HOME /var/tools/apache-maven-3.6.3
ENV KOTLIN_HOME /var/tools/kotlinc
ENV PATH $PATH:${MAVEN_HOME}/bin:${KOTLIN_HOME}/bin
# ssh
RUN mkdir -p /root/.ssh \
&& touch /root/.ssh/authorized_keys \
&& cat /var/tools/ssh/id_rsa.pub >> /root/.ssh/authorized_keys \
&& chmod 644 ~/.ssh/authorized_keys \
&& cp /var/tools/ssh/ssh-login.conf /etc/ssh/sshd_config.d/ \
# 因此容器的 sshd 版本较低,没有 /etc/ssh/sshd_config.d/ 目录,也不支持 Include 关键字
# && cat /var/tools/ssh/ssh-login.conf >> /etc/ssh/sshd_config \
&& mkdir -p /var/run/sshd \
# 需要将docker主进程的环境变量写入到root用户,否则会出现ssh方式连接后,环境变量失效的问题
&& echo "export $(cat /proc/1/environ |tr '\0' '\n' | xargs)" >> /root/.bashrc


* docker-compose.yml 中内容段参考:

java-1.8:
build: ./java
links:
- redis-5.0:redis
- mysql-8.0:mysql
- mq-info:mq
ports:
- "1024:22"
# app
- "60400-60500:60400-60500"
volumes:
- ../data/tmp/var/upload:/var/upload:rw
- ../tools:/data/tools:rw
- ../data/www:/data/www:rw
environment:
TZ: 'Asia/Shanghai'
restart: always
#分配会话控制终端使其挂起,防止镜像启动后又重启(如果不是command,又需要挂起,需要使用此配置)
# tty: true
command: bash -c "/etc/init.d/ssh restart && tail -f /dev/null"


* maven.sh文件内容:

#!/bin/bash
export MAVEN_HOME=/var/tools/apache-maven-3.6.3
export PATH=$PATH:${MAVEN_HOME}/bin


* kotlin.sh文件内容:

#!/bin/bash
export KOTLIN_HOME=/var/tools/kotlinc
export PATH=$PATH:${KOTLIN_HOME}/bin


* tools/.netrc 和 tools/git-env.sh 文件内容 参考以下链接点击跳转


点赞(2) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部