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"
PS:在编写Dockerfile过程中,我是在centos7的虚拟中实验的,开始时发现就算对ssh映射端口但是从其他系统无法访问,即使我将firewalld关闭,后来是通过firewalld-cmd命令将映射端口添加到防火墙中才可以正常访问,其中原理还不是很清楚,本人小白,就先将当时的解决方法写下。
posted @   cnlittle  阅读(155)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示