Docker-docker-compose学习笔记(yaml,实战)
Posted lady_killer9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker-docker-compose学习笔记(yaml,实战)相关的知识,希望对你有一定的参考价值。
目录
什么是docker-compose
docker-compose介绍
Compose 是用于定义和运行多容器 Docker 应用程序的容器编排工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
为什么使用docker-compose?
没有使用docker-compose之前,使用单个的容器来搭建应用会存在以下问题:
- 批量操作:多个容器一个个的docker run很浪费时间
- 依赖问题:每个容器的服务可能需要在某个容器启动之后,例如,用到数据库的需要在数据库启动之后
总之,应用一般是由多个部分组成的,例如,网站可能需要前端、后端、数据库等组成,这时候需要多个容器。docker-compose可以实现将多个容器放到同一网络,并且规定容器启动的顺序。
docker-compose的安装
Linux下的安装方式:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
测试:
docker-compose --version
如果失败:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
注意:之后容器将称之为服务,需要读者进行思维转换,因为docker-compose是以项目的角度来讲各个微服务连接在一起。
docker-compose的yml文件
一个docker-compose文件就是一个定义了services, networks和 volumes的yml文件。YAML还不会的读者可以看参考。
version
指定本 yml 文件依从 compose 哪个版本制定的。例如,
version: "3.0"
services
应用的各个服务,例如
services:
tomcat:
image: tomcat:8.0
ports:
- 8080:8080
networks:
- mynet
depends_on:
- mysqldb
mysqldb:
image: mysql:5.7.20
container_name: mysql
ports:
- "3306:3306"
volumes:
- /root/mysql/conf:/etc/mysql/conf.d
- /root/mysql/logs:/logs
- /root/mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- mynet
myapp:
build: ./myapp/Dockerfile
entrypoint: "python myapp.py"
networks:
- mynet
image
使用的镜像,类似docker run指定的镜像
build
与image不一起使用,通过,指定为构建镜像上下文路径,例如,
./dir/Dockerfile
类似docker build命令,若不经常修改还是建议打包为镜像
container_name
容器名字,容器名字不可以重复,因为会根据名字对应到容器的ip,类似DNS。
ports
端口映射,类似docker run时的-p选项
environments
代表当前容器启动指定的环境,类似docker run -e MYSQL_ROOT_PASSWORD=root
env_file
指定保存环境变量的文件
depends_on
解决服务先后启动问题,也就是服务之间的依赖。例如,依赖数据库的服务可以depends_on数据库服务,这样就会先启动数据库服务。
command
覆盖容器启动后默认执行的命令,就是覆盖Docker file的CMD
entrypointment
cap_add,cap_drop
添加或删除容器拥有的宿主机的内核功能。
cgroup_parent
为容器指定父 cgroup 组,意味着将继承该组的资源限制。
networks
docker-compose的命令
docker-compose [-f=…] [options] [COMMAND] [ARGS…]
-f
-f, --file FILE
指定使用的 Compose 模板文件,默认为 docker-compose.yml
up
up [options] [SERVICE...]
对整个项目的操作,创建或启动服务,并关联服务相关容器的一系列操作,大部分时候都可以直接通过该命令来启动一个项目。默认启动的容器都在前台,当通过 Ctrl-C 停止命令时,所有容器将会停止。
选项:
- -d 在后台运行服务容器。
down
停止 up 命令所启动的容器,并移除网络
ps
docker-compose ps [options] [SERVICE...]
列出项目中目前的所有容器。
选项:
- -q 只打印容器的 ID 信息。
start
docker-compose start [SERVICE...]
启动已经存在的服务容器。
stop
docker-compose stop [options] [SERVICE...]
停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
选项:
- -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
logs
docker-compose logs [options] [SERVICE...]
查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 --no-color 来关闭颜色。
该命令在调试问题的时候十分有用。
博主认为掌握up 、down、logs就足够了,更多命令查看参考
实战(nginx反向代理与负载均衡)
如果你没有前端容器镜像,可以下载我的阿里云上的,来复现
docker pull registry.cn-hangzhou.aliyuncs.com/lady_killer9/next_demo:v1
docker pull registry.cn-hangzhou.aliyuncs.com/lady_killer9/next_demo:v2
nginx.conf的配置见文章:安全运维-Nginx服务器就该这么玩~
docker-compose.yaml 如下
version: "3.0"
services:
nginx:
image: nginx:latest
ports:
- 80:80
networks:
- mynet
depends_on:
- next_demo1
- next_demo2
volumes:
- /root/nginx_volume/conf:/etc/nginx
- /root/nginx_volume/logs:/var/log/nginx
next_demo1:
image: 4fc6f31080a3
container_name: next_demo1
ports:
- "8080:3000"
networks:
- mynet
next_demo2:
image: bd6502482fda
container_name: next_demo2
ports:
- "8081:3000"
networks:
- mynet
networks:
mynet:
参考
docker官方文档-compose file
docker官方文档-compose命令
docker官方文档-docker-compose安装
GitBook-Docker从入门到实践
菜鸟教程-YAML入门教程
菜鸟教程-docker-compose
以上是关于Docker-docker-compose学习笔记(yaml,实战)的主要内容,如果未能解决你的问题,请参考以下文章