Docker - docker-compose方式搭建高效的开发环境
创始人
2024-05-24 10:32:33
0

概述

在本地开发机上使用docker的同学你肯定有这样的烦恼,搞了一堆命令来启动docker,错了一个字母就需要重来,非常的不方便,让人抓狂,解决这种烦恼使用docker-compose就可以迎刃而解了。

声明式与命令式

在说docker-compose之前,一定要介绍一个提前的知识,方便更好的理解和使用docker-compose,以及后面可能使用的Kubernetes,Kubernetes就是使用声明式的yaml语言对pod进行管理和通信。

Docker 命令和 Dockerfile 就属于命令式,它的特点是交互性强,注重顺序和过程,你必须告诉计算机每步该做什么,所有的步骤都列清楚,这样程序才能够一步步走下去,最后完成任务。

命令式完全相反,不关心具体的过程,更注重结果。我们不需要教计算机该怎么做,只要告诉它一个目标状态,它自己就会想办法去完成任务,相比起来自动化、智能化程度更高。

YAML 是 JSON 的超集,支持整数、浮点数、布尔、字符串、数组和对象等数据类型。也就是说,任何合法的 JSON 文档也都是 YAML 文档,如果你了解 JSON,那么学习 YAML 会容易很多。

好了关于docker-compose文件的声明式与命令式就说这么多。

docker-compose文件编写

使用2个镜像,alpine:1.0 是作为挂载映射磁盘文件盘使用,nginx:proxy_v2.0 是我提前编译安装好的nginx+php-fpm的镜像。

$ docker images
REPOSITORY       TAG               IMAGE ID       CREATED         SIZE
nginx            proxy_v2.0        7a60e18d4d3d   21 hours ago    3.4GB
alpine           1.0               a24bb4013296   2 years ago     5.57MB

www容器的作用是映射文件的作用,ports配置端口,volumes映射虚拟机到本地的文件,command是需要执行的命令。

  • image : 需要镜像的名字,优先使用本地,本地不存在,去dockerHub仓库远程获取。
  • container_name : 容器名称,启动后的容器名称,和docker run --name xxx作用是一样的。
  • restart : 设置 always ,这样开机启动,失败也会一直重启。
  • privileged:true : 是否使用对镜像使用root权限操作。
  • user: 操作用户。
  • depends_on:www启动之后再启动,这个镜像。
  • ports : 设置宿主机和docker实例中的端口映射。
  • volumes : 设置宿主机数据卷和docker实例数据卷的映射。
  • command : 启动后执行的命令。

注意:
1.需要放在一个单独的文件夹下,文件名 .yaml 或者 yml
2.所有的操作命令都是在这个文件夹下操作

version: '3'
services:www:image: alpine:1.0  #镜像container_name: www  #定义容器名称restart: always  #开机启动,失败也会一直重启privileged: trueuser: rootvolumes:- /Users/stark/server/K8s/Code/www:/home/work/wwwgzcpserver:image: nginx:proxy_v2.0container_name: webrestart: alwaysprivileged: trueuser: rootdepends_on:- www #www启动之后再启动ports:- 80:80- 443:443 - 11211:11211- 6379:6379 - 27017:27017 - 8100:8100 - 8101:8101volumes:- /Users/stark/server/K8s/Code/www/cpserver/conf/:/usr/local/nginx/conf/servers- /Users/stark/server/K8s/Code/www/:/home/work/www/command: /bin/sh /usr/local/src/run.sh

docker-compose 启动和停止

#启动命令
$ docker-compose up -d 
Starting www ... done
Starting web ... done
#停止命令
$ docker-compose stop
Stopping web ... done
Stopping www ... done

至此

启动过程中遇到了一个,docker-compose编排容器踩坑之容器一直处于Restarting状态的问题。

解决办法: 是因为指定路径下的权限或者是目录不存在都会产生docker 启动状态一直在 restarting状态,使用 docker logs web检查错误日志,都会清楚的打印出来。

$ docker logs web
nginx: [emerg] open() "/usr/local/nginx/conf/nginx.conf" failed (2: No such file or directory)

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...