注意事项
1、构建镜像时尽量确定软件的版本
否则每次都是最新的,在重复构建的时候很容易出问题
存在的问题,构建层级太多需要优化(ockerfile文件中的每一个单独的执行命令就构建了一层镜像,为了减少层级。我们尽量的少执行单独的命令,如果能把命令合在一起就合在一起)
命令docker build -t image-name:tag .\
. 代表构建上下文路径。构建上下文是指 Docker 在构建镜像时需要访问的文件和目录的路径。
当运行 docker build -t image_name:tag . 命令时,Docker 将会在当前目录下查找 Dockerfile, 并使用该目录作为构建上下文。在构建过程中,Docker 将会将当前目录(构建上下文)中的文件和目录复制到镜像中。
请确保在运行 docker build 命令时,当前工作目录中存在 Dockerfile 文件,并且希望将当前目录作为构建上下文。如果 Dockerfile 位于其他位置,可以使用 -f 标志来指定 Dockerfile 的路径。
Dockerfile文件示例
# 使用 Ubuntu 作为基础镜像
FROM ubuntu:latest
# 配置国内软件源,软件源和docker源不一样,不配置直接下载会很慢
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak
RUN set -x \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse' > /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse' >> /etc/apt/sources.list \
&& apt-get update
# 安装 MySQL 8 并配置tecnhnologyW0rd为密码
RUN apt-get update && \
echo "mysql-server mysql-server/root_password password tecnhnologyW0rd" | debconf-set-selections && \
echo "mysql-server mysql-server/root_password_again password tecnhnologyW0rd" | debconf-set-selections && \
apt-get install -y mysql-server
# 安装 Redis
RUN apt-get install -y redis-server
# 安装解压工具解压zip用
RUN apt-get install -y zip
# 安装 JDK 17
RUN apt-get install -y openjdk-17-jdk
# 安装 Nginx
RUN apt-get install -y nginx
# 设置 MySQL 和 Redis 的配置文件,将当前目录下的文件拷贝到容器目录,左边宿主机,右边容器
COPY mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
COPY redis.conf /home/redis.conf
COPY toto_student_management.sql /home/toto_student_management.sql
# 设置 MySQL 的 root 密码和 Redis 的密码,通过替换符号开启、修改redis密码# requirepass foobared/requirepass tecnhnologyW0rd
RUN service mysql start && \
mysql -u root -p"tecnhnologyW0rd" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'tecnhnologyW0rd'; FLUSH PRIVILEGES;" && \
mysql -u root -p"tecnhnologyW0rd" -e "CREATE DATABASE toto_student_management CHARACTER SET utf8 COLLATE utf8_general_ci;" && \
mysql -u root -p"tecnhnologyW0rd" -e "use mysql;update user set host='%' where user ='root';FLUSH PRIVILEGES;" && \
mysql -u root -p"tecnhnologyW0rd" toto_student_management < /home/toto_student_management.sql && \
service mysql stop && \
usermod -d /var/lib/mysql/ mysql && \
sed -i 's/# requirepass foobared/requirepass tecnhnologyW0rd/g' /home/redis.conf
# 拷贝 ruoyi-admin.jar 到镜像
COPY ruoyi-admin.jar /home/ruoyi-admin.jar
COPY student_mange.zip /home/student_mange.zip
COPY nginxWebUI-3.7.5.jar /home/nginxWebUI-3.7.5.jar
COPY nginx.conf /home/nginxWebUI/nginx.conf
RUN unzip /home/student_mange.zip -d /home/student_mange
# 定义 MySQL 和 Redis 端口
EXPOSE 3306 6379 8081 80 58080
# 启动 MySQL 和 Redis 服务,并执行命令启动 ruoyi-admin.jar,经过测速这样启动是正常的所以服务都能正常启动, --add-opens java.base/java.lang=ALL-UNNAMED参数是跳过jdk反射警告,jdk大于9使用反射会出错误
# redis-server /home/redis.conf 根据配置文件启动redis
# nginx -c /home/nginxWebUI/nginx.conf 根据配置文件启动nginx
CMD service mysql start & \
nginx -c /home/nginxWebUI/nginx.conf & \
redis-server /home/redis.conf & \
java -jar -Dfile.encoding=UTF-8 /home/nginxWebUI-3.7.5.jar --server.port=58080 --project.home=/home/nginxWebUI/ & \
java --add-opens java.base/java.lang=ALL-UNNAMED -jar /home/ruoyi-admin.jar --spring.profiles.active=prod
版本2,在构建镜像时下载自定义二进制文件并编译安装
重点于(步骤):
1、安装编译环境(c、c++、 make工具等),2、下载指定版本二进制文件
3、解压,4、编译,5、安装,6、启动
RUN apt-get install -y gcc
RUN apt-get install -y g++
RUN apt-get install -y wget
RUN wget https://download.redis.io/releases/redis-4.0.14.tar.gz
RUN tar -zxvf redis-4.0.14.tar.gz
RUN apt-get install make
RUN make -C redis-4.0.14
RUN make install -C redis-4.0.14/src
CMD redis-4.0.14/src/redis-server
# 使用 Ubuntu 作为基础镜像
FROM ubuntu:latest
# RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak
RUN set -x \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse' > /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse' >> /etc/apt/sources.list \
&& echo 'deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse' >> /etc/apt/sources.list \
&& apt-get update
# 安装 MySQL 8
RUN apt-get update && \
echo "mysql-server mysql-server/root_password password tototecnhnologyW0rd" | debconf-set-selections && \
echo "mysql-server mysql-server/root_password_again password tototecnhnologyW0rd" | debconf-set-selections && \
apt-get install -y mysql-server
# 安装 Redis
# RUN apt-get install -y redis-server
RUN apt-get install -y zip
RUN apt-get install -y gcc
RUN apt-get install -y g++
RUN apt-get install -y wget
RUN wget https://download.redis.io/releases/redis-4.0.14.tar.gz
RUN tar -zxvf redis-4.0.14.tar.gz
RUN apt-get install make
RUN make -C redis-4.0.14
RUN make install -C redis-4.0.14/src
# 安装 JDK 17
RUN apt-get install -y openjdk-17-jdk
# 安装 Nginx
RUN apt-get install -y nginx
# 设置 MySQL 和 Redis 的配置文件
COPY mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
COPY redis.conf /home/redis.conf
COPY toto_student_management.sql /home/toto_student_management.sql
# 设置 MySQL 的 root 密码和 Redis 的密码
RUN service mysql start && \
mysql -u root -p"tototecnhnologyW0rd" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'tototecnhnologyW0rd'; FLUSH PRIVILEGES;" && \
mysql -u root -p"tototecnhnologyW0rd" -e "CREATE DATABASE toto_student_management CHARACTER SET utf8 COLLATE utf8_general_ci;" && \
mysql -u root -p"tototecnhnologyW0rd" -e "use mysql;update user set host='%' where user ='root';FLUSH PRIVILEGES;" && \
mysql -u root -p"tototecnhnologyW0rd" toto_student_management < /home/toto_student_management.sql && \
service mysql stop && \
usermod -d /var/lib/mysql/ mysql && \
sed -i 's/# requirepass foobared/requirepass tototecnhnologyW0rd/g' /home/redis.conf
# 拷贝 ruoyi-admin.jar 到镜像
COPY ruoyi-admin.jar /home/ruoyi-admin.jar
COPY student_mange.zip /home/student_mange.zip
COPY nginxWebUI-3.7.5.jar /home/nginxWebUI-3.7.5.jar
COPY nginx.conf /home/nginxWebUI/nginx.conf
RUN unzip /home/student_mange.zip -d /home/student_mange
# 持久化数据卷
VOLUME /var/lib/mysql
# 定义 MySQL 和 Redis 端口
EXPOSE 3306 6379 8081 80 58080
# 启动 MySQL 和 Redis 服务,并执行命令启动 ruoyi-admin.jar
CMD service mysql start & \
nginx -c /home/nginxWebUI/nginx.conf & \
redis-4.0.14/src/redis-server & \
# redis-server /home/redis.conf & \
java -jar -Dfile.encoding=UTF-8 /home/nginxWebUI-3.7.5.jar --server.port=58080 --project.home=/home/nginxWebUI/ & \
java --add-opens java.base/java.lang=ALL-UNNAMED -jar /home/ruoyi-admin.jar --spring.profiles.active=prod