首页 > 编程知识 正文

docker应用部署,docker部署iis项目

时间:2023-05-06 05:18:46 阅读:26072 作者:984

如何使用docker部署自己的项目? 不久前,公司有一个需求,就是将项目部署到个性化本地。 因为我对服务器研究不多,而且在构建上很辛苦,所以我使用docker镜像了一系列项目的个性化部署。 现在写博客记录学习和构建的过程。

以我当前的项目为例,它分为前端(vue实现)、后端(PHP laravel框架)、在线judge )以及数据层和缓存)、mysql和redis 想法是首先为每个项目创建镜像,将其上传到dockerhub,然后使用docker-compose一键部署

Laravel项目创建镜像进入项目目录并创建dockerfile文件。 内容是from PHP :7.4-fpmrunsed-I ' s/deb.debian.org/mirrors.a liyun.com/'/etc/etc/sed-I ' s/security sed-I ' s/security-cdn.debian.org/mirrors.a liyun.com/'/etc/apt/sources.listrunsed-I ' s/9000//PHP 7.4-fpm.sock/'/usr/local/etc/PHP-fpm.d/ZZ-docker.confrunmkdir/run/PHP _ touch/run/PHP/runpeclinstallredis-5.1 docker-PHP-ext-enableredisrundocker-PHP-ext-installp do docker-PHP-ext-installp do _ MySQL _ docker-PHP-ext-enable PDO _ MySQL # # # # nginx和supervisor扩展# # # # # # * * CD/var/www/kaoshi.web.serverphpartisanschedule 3360 run/dev/null 21 '/etc # # # # # # # copy.//var # etc copy./supervisor.conf/etc/supervisor/conf.d/# # # #修改laravel项目的各种配置# # # # # # mv/var/www/kaoshi.web.server/. env.docker/var/www/kaoshi.web.server/. envenvmysql _ host=127.0.0.1 env MySQL _ database=examenvmysql _ user=rootenvmysql _ password=rootenvredis r _ host=kaoshi _ judge _ serverenvjudge _ server _ port=8080 workdir/var/www/kaoshi.web.serveradd./startar “/opt/startup.sh']EXPOSE 80文件相对较长,大致的构建思路是在php7.4镜像的基础上切换apt-get

在本例中,使用ENV命令设置laravel的各种配置。 因为在以后的docker-compose中创建容器时,这些配置必须是自由的

修改

编写启动脚本文件,我这里额外启动了 supervisord, crond 因为需要用到队列服务,` #!/jxdqj/bashsed -i "s/MYSQL_HOST/${MYSQL_HOST}/" /var/www/kaoshi.web.server/.env && sed -i "s/MYSQL_DATABASE/${MYSQL_DATABASE}/" /var/www/kaoshi.web.server/.env && sed -i "s/MYSQL_USER/${MYSQL_USER}/" /var/www/kaoshi.web.server/.env && sed -i "s/MYSQL_PASSWORD/${MYSQL_PASSWORD}/" /var/www/kaoshi.web.server/.env && sed -i "s/MYSQL_USER/${MYSQL_USER}/" /var/www/kaoshi.web.server/.env && sed -i "s/MY_REDIS_HOST/${REDIS_HOST}/" /var/www/kaoshi.web.server/.env && sed -i "s/MY_REDIS_PORT/${REDIS_PORT}/" /var/www/kaoshi.web.server/.envsupervisord -c /etc/supervisor/supervisord.confsupervisorctl start all# Start php-fpm cron in backgroundphp-fpm -D/etc/init.d/cron start# Start nginx in foregroundnginx -g "daemon off;" 构建镜像并上传

准备工作:这里需要你拥有一个docker账号,认证通过后,构建好的镜像上传到自己的镜像库中。

进入项目目录, 执行构建命令

> docker build -t youdockerid:backend_server ./

上传有两种方式,直接使用docker面版登录后上传,或者docker push也可以 很简单。

前台项目构建镜像

构建过程和文件都基本类似,只是具体的配置等有所区别,同样是构建完毕后上传即可

dockerfile:

FROM node:16.3RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/' /etc/apt/sources.list && sed -i 's/security.debian.org/mirrors.aliyun.com/' /etc/apt/sources.list && sed -i 's/security-cdn.debian.org/mirrors.aliyun.com/' /etc/apt/sources.list RUN npm config set registry https://registry.npm.taobao.org####### 复制项目文件 ###########################################COPY ./ /var/www/kaoshi.frontend/####### 安装nginx ###########################################RUN apt-get update -yqq && apt-get install -yqq nginx COPY ./sites/default /etc/nginx/sites-enabled/RUN mv /var/www/kaoshi.frontend/nuxt.config.docker.js /var/www/kaoshi.frontend/nuxt.config.js && npm install -g pm2ENV LISTEN_HOST=127.0.0.1ENV LISTEN_PORT=3306ENV PROXY_HOST=api.kaoshi.testWORKDIR /var/www/kaoshi.frontendADD ./startup.sh /opt/startup.shRUN sed -i 's/r//g' /opt/startup.shCMD ["/jxdqj/bash", "/opt/startup.sh"]EXPOSE 80

startup.sh:

#!/jxdqj/bashsed -i "s/LISTEN_HOST/${LISTEN_HOST}/" /var/www/kaoshi.frontend/nuxt.config.js && sed -i "s/LISTEN_PORT/${LISTEN_PORT}/" /var/www/kaoshi.frontend/nuxt.config.js &&sed -i "s/PROXY_HOST/${PROXY_HOST}/" /var/www/kaoshi.frontend/nuxt.config.js &&sed -i "s/LISTEN/http://${LISTEN_HOST}:${LISTEN_PORT}/" /etc/nginx/sites-enabled/defaultcd /var/www/kaoshi.frontend && pm2 start npm --name "kaoshi" -- start # Start nginx in foregroundnginx -g "daemon off;"

构建:

> docker build -t youdockerid:fronend_server ./ 编写docker-compose一键部署 首先创建一个新的目录作为部署目录,目录结构如下 ├── .env //配置文件├── .env.example├── data//mysql或者redis或其他模块的数据存储在此│ ├── mysql│ └── redis│ └── appendonly.aof├── docker-compose.yml//部署文件└── initdb.d//数据库初始化文件 └── init.sql

docker-compose.yml:

version: '3.5'networks: backend: driver: bridge services:### backend ################################## backend_server: container_name: backend_server image: yourdockerid/backend_server:latest restart: always networks: - backend environment: MYSQL_HOST: ${MYSQL_HOST} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} REDIS_HOST: ${REDIS_HOST} REDIS_PORT: ${REDIS_PORT} JUDGE_SERVER_HOST: ${JUDGE_SERVER_HOST} JUDGE_SERVER_PORT: ${JUDGE_SERVER_PORT}### frontend ################################## frontend_server: container_name: frontend_server image: yourdockerid/frontend_server:latest restart: always ports: - "0.0.0.0:80:80" networks: - backend environment: LISTEN_HOST: ${FRONTEND_LISTEN_HOST} LISTEN_PORT: ${FRONTEND_LISTEN_PORT}### mysql ################################## mysql_server: container_name: mysql_server image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password restart: always volumes: - ./data/mysql:/data - ./initdb.d:/docker-entrypoint-initdb.d networks: - backend environment: MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE}### redis ################################## redis_server: container_name: redis_server image: redis:5.0-alpine command: redis-server --appendonly yes restart: always networks: - backend volumes: - ./data/redis:/data

.env:

### MYSQL #################################################MYSQL_HOST=mysql_serverMYSQL_USER=rootMYSQL_PASSWORD=rootMYSQL_DATABASE=example### REDIS #################################################REDIS_HOST=redis_serverREDIS_PORT=6379### frontend #################################################FRONTEND_LISTEN_HOST=127.0.0.1FRONTEND_LISTEN_PORT=3306

都写完了之后就可以愉快地构建了:

> docker-composer up -dStarting mysql_server ... doneStarting redis_server ... doneStarting frontend_server ... doneStarting backend_server ... done

大功告成!

尾巴

因为是蛮久之前弄的,所以有些细节踩坑的地方可能忘记提示了,如果有哪些地方不清楚或者需要指正的,欢迎留言

dockerhub: https://registry.hub.docker.com/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。