练习目标
- 使用 CentOS 7 作为基础镜像。
- 在镜像中安装 Nginx、Python、Redis 和 MySQL。
- 配置 Nginx 以使用自定义的首页。
- 使用 Docker 数据卷来持久化 Redis 和 MySQL 的数据。
步骤
第一步:创建 Dockerfile
创建一个新的 Dockerfile,从 CentOS 7 开始构建。
# 使用 CentOS 7 作为基础镜像
FROM centos:7
# 维护者信息
LABEL maintainer="your_name@example.com"
# 安装必要的工具
RUN yum update -y && \
yum install -y epel-release && \
yum install -y vim net-tools wget gcc make openssl-devel bzip2-devel libffi-devel && \
yum clean all
# 安装 Python
RUN yum install -y python3 python3-pip python3-devel && \
pip3 install redis
# 安装 Redis
RUN wget http://download.redis.io/releases/redis-6.2.6.tar.gz && \
tar xzf redis-6.2.6.tar.gz && \
cd redis-6.2.6 && \
make && \
make install && \
cd utils && \
./install_server.sh && \
cd ../../ && \
rm -rf redis-6.2.6*
# 安装 MySQL
RUN yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm && \
yum install -y mysql-community-server && \
systemctl enable mysqld && \
systemctl start mysqld && \
mysql_secure_installation <<EOF
n
y
your_root_password
your_root_password
y
y
y
y
y
EOF
# 安装 Nginx
RUN yum install -y nginx && \
systemctl enable nginx && \
echo "server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}" > /etc/nginx/conf.d/default.conf && \
echo "<html><body><h1>Welcome to My Website - Your Name</h1></body></html>" > /usr/share/nginx/html/index.html
# 清理缓存
RUN yum clean all
# 设置工作目录
WORKDIR /app
# 暴露端口
EXPOSE 80 3306 6379
# 启动服务
CMD ["/usr/sbin/init"]
Dockerfile复制代码
第二步:构建镜像
在包含 Dockerfile 的目录中运行以下命令来构建镜像:
docker build -t my-custom-app .
第三步:运行容器
使用以下命令运行容器,并通过 Docker 数据卷挂载 Redis 和 MySQL 的数据目录:
docker run -d \
-p 80:80 \
-p 3306:3306 \
-p 6379:6379 \
-v /path/to/redis-data:/var/lib/redis \
-v /path/to/mysql-data:/var/lib/mysql \
--name my-custom-container \
my-custom-app
请将 /path/to/redis-data
和 /path/to/mysql-data
替换为您希望用于持久化数据的本地目录路径。
注意事项
- 安全性:上面的 Dockerfile 使用了
mysql_secure_installation
脚本来设置 MySQL 的安全选项,包括设置 root 密码等。 - 数据持久化:通过 Docker 数据卷来持久化 Redis 和 MySQL 的数据,确保即使容器被删除,数据也不会丢失。
- 性能:在生产环境中,您可能希望将不同的服务(如 Nginx、Python 应用、Redis、MySQL)部署到不同的容器中,并通过 Docker Compose 来管理它们。