Dockerfile的使用
开始
几天前,由于公司要使用docker,于是我学习了docker的概念以及指令,并编写了响应的dockerfile.
我写了两个Dockerfile,一个作为反向代理,另一个是centos7+ssh+jdk+tomcat+mysql+redis.
虽然因为某些原因最终没有使用,但是这也算自我锻炼的一个机会.
第一个Dockerfile
第一个镜像为tomcat7+nginx的dockerfile,用来反向代理.
FROM centos:centos7
COPY nginx-1.22.0.tar.gz /usr/local/
# 安装nginx脚本,以及nginx的依赖
RUN /bin/bash \
&& yum install net-tools pcre pcre-devel openssl openssl-devel zlib zlib-devel make gcc -y \
&& mkdir /usr/local/nginx \
&& cd /usr/local \
&& tar -zxvf /usr/local/nginx-1.22.0.tar.gz \
&& cd /usr/local/nginx-1.22.0 \
&& ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_mp4_module --with-http_flv_module \
&& make && make install \
&& ln -s /usr/local/nginx/sbin/nginx /usr/bin
# 开放80端口
EXPOSE 80
第二个Dockerfile
第二个镜像主要用来放项目,以及通过ssh连接,而且希望项目可以在数据库中生成库,所以我搭建了一个mysql+redis,使每个项目都有独立的一个数据库.
FROM centos:centos7
# 准备工作创建文件夹
RUN \
mkdir -p /usr/local \
&& mkdir /usr/local/apache-tomcat-9.0.52 \
&& mkdir /usr/local/jdk1.8.0_271 \
&& mkdir -p /data/mysql
# 复制文件
COPY jdk-8u271-linux-x64.tar.gz /usr/local/
COPY apache-tomcat-9.0.52.tar.gz /usr/local/
COPY redis-4.0.0.tar.gz /usr/local/
COPY MySQL-client-5.6.50-1.el6.x86_64.rpm /usr/local/
COPY MySQL-devel-5.6.50-1.el6.x86_64.rpm /usr/local/
COPY MySQL-server-5.6.50-1.el6.x86_64.rpm /usr/local/
COPY start.sh /
COPY remote.sh /
# 安装vim
RUN yum install vim -y
# 安装redis4.0
RUN \
yum install make tcl gcc -y \
&& cd /usr/local \
&& tar -xzf redis-4.0.0.tar.gz \
&& cd redis-4.0.0 \
&& make && make install
# 安装mysql5.6.50
RUN \
yum -y install libnuma* perl perl-devel perl-Module-Install.noarch net-tools libaio \
&& cd /usr/local \
&& rpm -ivh MySQL-server-5.6.50-1.el6.x86_64.rpm \
&& rpm -ivh MySQL-client-5.6.50-1.el6.x86_64.rpm \
&& rpm -ivh MySQL-devel-5.6.50-1.el6.x86_64.rpm \
&& chown -R mysql:mysql /data/mysql \
&& /etc/init.d/mysql start \
&& mysqltmppwd=`cat /root/.mysql_secret | cut -b 87-102` \
&& mysqladmin -u root -p${mysqltmppwd} password "admin123!@#QWE" \
&& mysql -uroot -padmin123!@#QWE -e"flush privileges" \
&& /etc/init.d/mysql stop \
&& rm -rf /var/cache/yum/* \
&& sed -i -e "10a datadir = /data/mysql" /usr/my.cnf
# 安装ssh
RUN \
yum install passwd openssl openssh-server -y \
&& ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' \
&& ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \
&& ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N '' \
&& echo 123456 | passwd --stdin root \
&& echo root:123456 | chpasswd
# 安装java环境
RUN \
cd /usr/local \
&& tar -zxvf jdk-8u271-linux-x64.tar.gz -C /usr/local
# 安装tomcat
RUN \
cd /usr/local \
&& tar -zxvf apache-tomcat-9.0.52.tar.gz -C /usr/local
# 删除安装软件
RUN \
cd /usr/local \
&& rm -rf jdk-8u271-linux-x64.tar.gz \
&& rm -rf apache-tomcat-9.0.52.tar.gz \
&& rm -rf redis-4.0.0.tar.gz \
&& rm -rf MySQL-client-5.6.50-1.el6.x86_64.rpm \
&& rm -rf MySQL-devel-5.6.50-1.el6.x86_64.rpm \
&& rm -rf MySQL-server-5.6.50-1.el6.x86_64.rpm
# 环境配置
ENV JAVA_HOME /usr/local/jdk1.8.0_271
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.52
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.52
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 开放端口
EXPOSE 8080
EXPOSE 22
EXPOSE 3306
EXPOSE 6379
其中start.sh的代码为(本文件为启动镜像上安装的所有服务)
#!/bin/bash
/usr/sbin/sshd -D &
/usr/local/redis-4.0.0/src/redis-server &
/usr/local/apache-tomcat-9.0.52/bin/startup.sh &
mysqld --user=root &
remote.sh代码为(本文件为将mysql修改为可以远程连接)
#!/bin/bash
mysql -uroot -padmin123!@#QWE -e "use mysql;SELECT User,Password,Host FROM user;UPDATE user SET Host=@'%' where user='root' AND Host='localhost' LIMIT 1;flush privileges"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程