因为目前工作中项目大部分都是使用的docker环境,使用docker-compose编排部署的,所以这段时间就自己尝试使用docker部署一下之前自己写的练手项目,其中的环境有
mysql8
、php7.4
、redis3
、rabbitmq
、nginx
、elasticsearch
,当然这些技术有一些我都只是了解,平时工作用不到,自己也没有系统性的学习过,所以可能会有一些问题。
该docker项目的代码以及目录结构地址
https://gitee.com/wyqgg/blogdocker/tree/master/
dockerFile
php
这个镜像主要是安装一些项目中使用到的扩展,这里根据自己项目的需要来编写dockerfile,
FROM php:7.4-fpm#pdo_mysqlRUN docker-php-ext-install pdo_mysql \#mysqli&& docker-php-ext-install mysqli \#Redis&& docker-php-ext-install redis \#xdebug&& pecl install xdebug-2.8.1 \&& docker-php-ext-enable xdebug \# Swoole&& pecl install swoole-4.5.2 \&& docker-php-ext-enable swoole \# AMQP&& apt-get update \&& apt-get install -y librabbitmq-dev libssl-dev \&& pecl install amqp \&& docker-php-ext-enable amqp \# Seaslog&& pecl install seaslog \&& docker-php-ext-enable seaslog \
我这里面除了php需要编写特定的dockerFile其他的环境都没有编写特定的dockerFile
docker-compose.yml
这里使用${}获取到的是docker-compose.yml 同级目录下的.env文件中设置的变量的值.
docker-compose.yml
version: '3.0'#网络配置networks: backend: driver: ${NETWORKS_DRIVER}#服务器容器配置services: nginx: image: nginx:latest #dockerHub中获取该镜像 environment: - TZ=${TZ} #时区 volumes: - ${CONF_PATH_HOST}/nginx:/etc/nginx/conf.d/ #配置文件路径,设置数据卷,让本地和容器的数据共享 - ${WWW_PATH_HOST}:/usr/share/nginx/html #项目代码目录 ports: - "81:80" - "8001:8000" - "8002:8002" - "8003:8003" networks: - backend restart: always #指定容器退出后重启策略为始终重启 php: build: context: ./php #通过上层目录的php目录中的DockerFile来构造该镜像 environment: - TZ=${TZ} volumes: - ${CONF_PATH_HOST}/php/conf.d:/usr/local/etc/php/conf.d #php的扩展目录,notes:这里最好先把php镜像build好,然后将镜像/usr/local/etc/php/conf.d目录中的配置文件复制一份放到本地文件${CONF_PATH_HOST}/php/conf.d中。不然的话就把这行注释。这里是为了今后在加其他php扩展准备的。 - ${WWW_PATH_HOST}:/usr/share/nginx/html ports: - "${PHP_PORT}:9000" networks: - backend restart: always mysql: image: mysql/mysql-server:8.0 #dockerHub中获取该镜像 environment: - TZ=${TZ} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD={MYSQL_ROOT_PASSWORD} volumes: - ${DATA_PATH_HOST}/mysql:/var/lib/mysql #数据文件 - ${CONF_PATH_HOST}/mysql/my8.cnf:/etc/my.cnf #配置文件 ports: - "${MYSQL_PORT}:3308" networks: - backend restart: always redis: image: redis:3 environment: - TZ=${TZ} volumes: - ${CONF_PATH_HOST}/redis:/etc/redis #配置文件 - ${DATA_PATH_HOST}/redis:/data #data文件 ports: - "${REDIS_PORT}:6379" networks: - backend rabbitmq: image: docker_rabbitmq:latest environment: - TZ=${TZ} - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER} - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS} volumes: - ${DATA_PATH_HOST}/rabbitmq:/var/lib/rabbitmq restart: always ports: - "${RABBITMQ_PORT_CLIENT}:15672" - "${RABBITMQ_PORT_SERVER}:5672" networks: - backend elasticsearch: image: elasticsearch:8.2.1 environment: - discovery.type=single-node #以单一节点模式启动 - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - bootstrap.memory_lock=true volumes: - ${CONF_PATH_HOST}/elasticsearch:/usr/share/elasticsearch/plugins #插件文件 - ${DATA_PATH_HOST}/elasticsearch:/usr/share/elasticsearch/data:rw #数据文件 - ${LOG_PATH_HOST}/elasticsearch:/usr/share/elasticsearch/logs:rw #日志文件 restart: always ports: - ${ELASTICSEARCH_PORT_OUTSIDE}:9200 - ${ELASTICSEARCH_PORT_INSIDE}:9300 networks: - backend kibana: image: kibana:8.2.1 depends_on: - elasticsearch #该镜像基于elasticsearch镜像,若elasticsearch镜像为build成功则该镜像也不会build成功。 environment: ELASTICSEARCH_HOSTS: http://elasticsearch:9200 I18N_LOCALE: zh-CN ports: - ${KIBANA_PORT}:5601 networks: - backend
.env
#设置时区TZ=Asia/Shanghai#设置网络模式NETWORKS_DRIVER=bridge#配置文件根目录CONF_PATH_HOST=./conf#宿主机上代码存放的目录路径WWW_PATH_HOST=./www#宿主机上mysql Redis数据存放的目录路径DATA_PATH_HOST=./data#宿主机上存放log日志的目录路径LOG_PATH_HOST=./log#Mysql服务映射主机端口号,可在宿主机127.0.0.1:3307访问MYSQL_PORT=3307MYSQL_USER=wyqMYSQL_PASSWORD=Wyqgg@123MYSQL_ROOT_PASSWORD=123456#Redis服务映射主机端口号REDIS_PORT=6380#PHP端口号PHP_PORT=9000#rabbitMq#端口号RABBITMQ_PORT_SERVER=5672RABBITMQ_PORT_CLIENT=15672#RABBITMQ_DEFAULT_USER=wyqggRABBITMQ_DEFAULT_PASS=123456#Elasticsearch端口号ELASTICSEARCH_PORT_OUTSIDE=9200ELASTICSEARCH_PORT_INSIDE=9300#kibana端口号KIBANA_PORT=5601
在docker-compose.yml目录执行下面命令就可以成功build一些镜像run一些容器,创建网络。将这些容器编排到一个环境下
docker-compose docker-compose.yml up -d
项目的目录结构
解读
conf目录:保存配置文件,可以独立配置每个容器的配置,执行完docker-compose文件可以直接生效,我这里因为记不住配置文件我基本上都是把容器先跑起来不建立数据卷,将该容器服务的默认配置copy到这个文件夹之后在添加容器卷,然后就可以根据自己的需求进行修改了。data目录:保存数据目录,比如redis、mysql的数据、若没有这个的话、每次down掉docker-composer服务,那么运行的数据就都丢失了。具体服务目录:里面都是具体服务的dockerFile,当然这里可以只有需要独立编写dockerFile的服务才建立这些文件夹,我这里是都建了。www目录:该目录绑定的就是nginx默认配置的起始页,当然这个是可以修改的。
若成功执行则如下图所示
项目运行
首先在www目录下拉取之前项目的代码根据项目需求修改nginx配置。恢复数据库成功执行项目
这个是我之前编写的项目,可以在docker环境下运行,有些界面还有些问题,需要我修复下代码,但是环境是没有问题的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pIqZJ9oh-1664964855438)(img_2.png)]
若成功执行则如下图所示
来源地址:https://blog.csdn.net/wyqgg123/article/details/127175139