制作一个包含Centos7+Nginx+Mysql8+JDK8的Docker镜像
1. 创建一个文件夹用于构建Docker镜像:
mkdir my-docker-image
cd my-docker-image
2. 在该文件夹中创建一个名为Dockerfile的文件。
vim Dockerfile
3.在Dockerfile中编写以下代码:
FROM centos:7
#RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
# 给基础镜像centos安装必备的环境
# 加上“rpm --rebuilddb &&”是为了防止数据库损坏而影响yum安装。
# 注意,比较保险的做法是有多少个yum命令,就加多少个“rpm --rebuilddb &&”在yum前面。
RUN rpm --rebuilddb && yum install -y autoconf automake make wget proc-devel net-tools zlib zlib-devel make gcc g++ openssl-devel pcre pcre-devel tar
# 在线安装nginx(也可以在本地先下载压缩包,再用ADD命令将包加入到基础镜像/usr/src目录中)
RUN wget http://nginx.org/download/nginx-1.17.1.tar.gz
# 解压到当前目录
RUN tar -zxvf nginx-1.17.1.tar.gz
# 配置nginx
RUN cd nginx-1.17.1 && ./configure --prefix=/usr/local/nginx && make && make install
# 在线安装jdk1.8
RUN cd ~ && yum install -y java-1.8.0-openjdk-devel.x86_64
# 安装MySQL(仓库地址:http://repo.mysql.com/)
RUN wget http://repo.mysql.com/mysql80-community-release-el7.rpm
RUN yum install -y mysql80-community-release-el7.rpm
RUN yum install -y mysql-server mysql-devel
# 设置工作目录
WORKDIR /usr/local/nginx/sbin
# 将nginx添加到环境变量
ENV PATH $PATH:/usr/local/nginx/sbin
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Mysql的安装包仓库地址: http://repo.mysql.com/
![](https://secure2.wostatic.cn/static/j6DqUR1uMsVxpiJns41dZW/image.png?auth_key=1682856432-dyB1mmo33BzYfiPcoDdQbR-0-8e703d97228926b1d8d601bd33e2ac81)
4. 构建Docker镜像。
执行以下命令来构建Docker镜像,镜像名为server,这里不用加-f
参数指定dockerfile文件是因为我们就是按照标准名称Dockerfile
为文件命名的:
docker build -t server .
需要等一段时间...
![](https://img2023.cnblogs.com/blog/2935791/202304/2935791-20230430205824300-970167620.png)
可以看到生成了一个名为server
的镜像:
![](https://img2023.cnblogs.com/blog/2935791/202304/2935791-20230430205945011-1323601655.png)
5. 启动镜像
--privileged=true
是以特权模式启动,这样我们在容器中才可以使用像systemctl
这样的系统级命令,否则执行会报错,如下图
# 容器名为server1,注意:必须以特权模式启动,否则进入容器后systemctl命令不能用
docker run --name server1 -d -p 80:80 --privileged=true server /usr/sbin/init
启动成功:
![](https://img2023.cnblogs.com/blog/2935791/202304/2935791-20230430210034676-1113241216.png)
6. 进入容器
docker exec -it server1 /bin/bash
7. 运行mysql
# 需要先在 /var/log/mysqld.log中查看默认生成的密码再用这个密码登录
cat /var/log/mysqld.log
![](https://secure2.wostatic.cn/static/nuNdfaT45g34J6URgy2TjK/image.png?auth_key=1682856432-aZHiQGofW7Hb9kNEDGt8v1-0-c8a50fee587d24ce686e52fb1e92d928)
![](https://secure2.wostatic.cn/static/gRXJ9xPMzRXFEsJnjzL8ry/image.png?auth_key=1682856432-amwLwZBU3hH9B2G4EFaCi5-0-1f0ab7b8116c8be23848cdff87d0a149)
用默认密码登录后需要更改root用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码'
如果想要外部访问还需要进一步的配置,可以看我的这篇博客:https://www.cnblogs.com/junlin623/p/17062850.html
8.外部访问测试
启动nginx,我们之前已经添加了环境变量,所以直接执行 nginx
即可
![](https://img2023.cnblogs.com/blog/2935791/202304/2935791-20230430211045987-1006229698.png)
访问成功~~
![](https://img2023.cnblogs.com/blog/2935791/202304/2935791-20230430211113878-37747896.png)
你只管出发,旅途自有风景~~