突然想到回顾docker创建自己常用镜像,做个记录。
环境为windows11、docker desktop,复制以下内容保存成对应文件
1.Dockerfile.ubuntu
# 指定基础镜像 FROM ubuntu # 镜像维护者作者 MAINTAINER Netpc.com.cn-ken # 环境变量 ENV MYPATH /usr/local # 工作路径,容器创建后,终端默认进入的工作目录,或者理解为落脚点 WORKDIR $MYPATH # 构成镜像时,执行的命令 # 从Dockerfile到images的过程中会执行的命令 # 备份原镜像软件源 RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak # 更改镜像为阿里镜像源 RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list RUN apt-get update RUN apt-get install -y vim RUN apt-get install -y net-tools RUN apt-get install -y iputils-ping RUN apt-get install -y php7.4 php7.4-fpm php7.4-gd php7.4-mbstring php7.4-pdo php7.4-curl php7.4-mysql php7.4-mysqli php7.4-json php7.4-mbstring php7.4-xml RUN apt-get install -y nginx RUN apt-get install -y mysql-server mysql-client RUN usermod -d /var/lib/mysql/ mysql # 暴露端口 EXPOSE 80 EXPOSE 443 EXPOSE 3306 # 将宿主机的文件复制到镜像中 ADD mysql.sh /mysql.sh RUN chmod 777 /mysql.sh && /mysql.sh RUN rm -rf /mysql.sh # 将脚本复制到容器中 ADD a.php /var/www/html/ ADD start.sh /usr/local/bin/ ADD default /etc/nginx/sites-available/default # 设置脚本可执行权限 RUN chmod +x /usr/local/bin/start.sh # 在容器启动时执行脚本 CMD ["/usr/local/bin/start.sh"]
2.mysql.sh #启动mysql,修改默认账号信息
#!/bin/sh service mysql start mysql -uroot -e "use mysql;update user set Host='%' where User='root';flush privileges;ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';flush privileges;" echo 'bind-address = 0.0.0.0' >> /etc/mysql/mysql.conf.d/mysqld.cnf
3.default #为了替换原有的启动php
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass PHP scripts to FastCGI server # location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } }
4.start.sh
#!/bin/sh service php7.4-fpm start service mysql start nginx -g "daemon off;" #不这样可能容器运行后会自动关闭
5.生成镜像命令:docker build -f Dockerfile.ubuntu -t ‘ubuntu-netpc’ .
6.docker run 映射到对应/var/www/html目录,就能把php放进去运行,映射端口3306就能直接访问容器内的mysql了。
上图