在一些特定的环境中,我们经常重复的去配置系统环境,因此学习了下Dockerfile制作镜像,
从而达到快速部署的目的。
1.环境准备
我的环境:Ubuntu20.04
docker desktop.exe win10
2.在/root目录下新建docker_file目录用于存放Dockerfile和其他相关文件
3.编辑在容器中启动sshd服务及环境变量配置启用脚本
因为ssh连接容器,容器并没有启动/etc/profile ,因此需要在容器启动的时候export环境变量
export /root/.bashrc 的目的和上面一样,原因是docker 容器默认使用bashrc
#!/bin/bash
export env
echo JAVA_HOME=$JAVA_HOME >> /etc/profile
echo JAVA_HOME=$JAVA_HOME >> /root/.bashrc
echo MAVEN_HOME=$MAVEN_HOME >> /etc/profile
echo MAVEN_HOME=$MAVEN_HOME >> /root/.bashrc
echo PATH=$PATH >> /etc/profile
echo PATH=$PATH >> /root/.bashrc
echo CLASSPATH=$CLASSPATH >> /etc/profile
echo CLASSPATH=$CLASSPATH >> /root/.bashrc
echo "export PATH JAVA_HOME CLASSPATH MAVEN_HOME" >> /etc/profile
echo "export PATH JAVA_HOME CLASSPATH MAVEN_HOME" >> /root/.bashrc
source /etc/profile
source /root/.bashrc
/usr/sbin/sshd -D
4.在宿主机上生成RSA密钥
$ ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key
$ cp /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub /root/sshd_centos cat ssh_host_rsa_key.pub>authorized_keys
5.在
/root/docker_file
目录下新建Dockerfile文件Dockerfile的常用语法,其中个人建议了解下ENTRYPOINT以及ENTRYPOINT 与CMD的区别 ,作者当时就是
在ssh 连接容器java环境未生效的问题上坑过,然后用ENTRYPOINT的方式解决,故此一提。
FROM centos:7
MAINTAINER wangjie
# 更新yum源
RUN yum -y update \
&& yum install -y git openssh-server vim tar wget curl rsync bzip2 iptables tcpdump less telnet net-tools lsof \
&& yum -y install strace \
&& yum clean all \
&& sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \
&& mkdir -p /root/.ssh
ADD ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key
ADD ssh_host_rsa_key.pub /etc/ssh/ssh_host_rsa_key.pub
ADD authorized_keys /root/.ssh/authorized_keys
#将ssh服务启动脚本复制到/usr/local/sbin目录中,并改变权限为755
ADD run.sh /usr/local/sbin/run.sh
RUN chmod 755 /usr/local/sbin/run.sh \
&& echo "root:root"|chpasswd
RUN wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz \
&& wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz \
&& wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz \
&& cd /opt \
&& mkdir /usr/local/java \
&& mkdir /opt/maven
RUN tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz -C /usr/local/java \
&& tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/maven \
&& tar -zxvf go1.13.4.linux-amd64.tar.gz -C /usr/local
ENV JAVA_HOME /usr/local/java/jdk8u292-b10
ENV MAVEN_HOME /opt/maven/apache-maven-3.6.3
ENV GOROOT /usr/local/go
ENV GOPATH /root/go
ENV PATH $JAVA_HOME/bin:$MAVEN_HOME/bin:$GOROOT/bin:$GOPATH/bin:$PATH
RUN mkdir -p $GOPATH/src/golang.org/x \
&& cd $GOPATH/src/golang.org/x \
&& git clone https://gitee.com/ricardowang/sys.git \
&& go get golang.org/x/sys/unix \
&& go get gitee.com/ricardowang/pcstat/pcstat
#开放窗口的22端口
EXPOSE 22
#运行脚本,启动sshd服务
ENTRYPOINT ["/usr/local/sbin/run.sh"]
CMD ["/bin/bash"]
6.制作镜像
docker build -t centos7:01 .
(后面点号表示当前目录)
Loading Comments...