在本地开发机上使用docker的同学你肯定有这样的烦恼,搞了一堆命令来启动docker,错了一个字母就需要重来,非常的不方便,让人抓狂,解决这种烦恼使用docker-compose就可以迎刃而解了。
在说docker-compose之前,一定要介绍一个提前的知识,方便更好的理解和使用docker-compose,以及后面可能使用的Kubernetes,Kubernetes就是使用声明式的yaml语言对pod进行管理和通信。
Docker 命令和 Dockerfile 就属于命令式,它的特点是交互性强,注重顺序和过程,你必须告诉计算机每步该做什么,所有的步骤都列清楚,这样程序才能够一步步走下去,最后完成任务。
命令式完全相反,不关心具体的过程,更注重结果。我们不需要教计算机该怎么做,只要告诉它一个目标状态,它自己就会想办法去完成任务,相比起来自动化、智能化程度更高。
YAML 是 JSON 的超集,支持整数、浮点数、布尔、字符串、数组和对象等数据类型。也就是说,任何合法的 JSON 文档也都是 YAML 文档,如果你了解 JSON,那么学习 YAML 会容易很多。
好了关于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是需要执行的命令。
docker run --name xxx
作用是一样的。注意:
1.需要放在一个单独的文件夹下,文件名 .yaml 或者 yml
2.所有的操作命令都是在这个文件夹下操作
version: '3'
services:
www:
image: alpine:1.0 #镜像
container_name: www #定义容器名称
restart: always #开机启动,失败也会一直重启
privileged: true
user: root
volumes:
- /Users/stark/server/K8s/Code/www:/home/work/www
gzcpserver:
image: nginx:proxy_v2.0
container_name: web
restart: always
privileged: true
user: root
depends_on:
- www #www启动之后再启动
ports:
- 80:80
- 443:443
- 11211:11211
- 6379:6379
- 27017:27017
- 8100:8100
- 8101:8101
volumes:
- /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 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)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。