docker compose详细使用教程

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: docker compose详细使用教程

Compose介绍

docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

安装插件

1. yum update
2. yum install docker-compose-plugin
3. 
4. # 安装完成后查看版本号
5. docker compose version

docker-compose常用命令

1. # 查看配置命令
2. $ docker compose config
3. 
4. # 构建并后台启动
5. $ docker compose up -d
6. 
7. # 将会停止UP命令启动的容器,并删除容器
8. $ docker compose down 
9. 
10. #重新启动nginx容器
11. $ docker compose restart 
12. 
13. # 启动已存在的容器命令
14. $ docker compose start
15. 
16. # 停止正在运行的容器命令
17. $ docker compose stop
18. 
19. #暂停容器
20. $ docker compose pause               
21. 
22. # 恢复容器
23. $ docker compose unpause
24. 
25. # 构建镜像
26. $ docker compose bulid
27. 
28. # 下载镜像
29. $ docker compose pull
30. 
31. # 删除容器
32. $ docker compose rm 
33. 
34. # 查看运行的镜像
35. $ docker compose ps
36. 
37. # 查看进程
38. $ docker compose top
39. 
40. # 查看服务日志输出
41. $ docker compose logs

Docker-Compose模板文件

Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。 Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。

image

image是指定服务的镜像名称或镜像ID

1. services:
2.     web: 
3.         image: hello-world

build

利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。

1. build:
2.   context: ../
3.   dockerfile: path/of/Dockerfile

command

使用command可以覆盖容器启动后默认执行的命令。

command: bundle exec thin -p 3000

container_name

指定自定义容器名称

container_name: app

depends_on

表示服务之间的依赖关系。

1. version: "3"
2. services:
3.   web:
4.     build: .
5.     depends_on:
6.  - redis
7.   redis:
8.     image: redis
9. 
10. #docker compose up:按依赖顺序启动服务,redis在web之前启动。
11. #docker-compose stop:按依赖顺序停止服务,web在redis之前停止。

pid

将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。

pid: "host"

ports

映射端口

1. ports:
2.  - "8000"
3.  - "49022:22"
4.  - "127.0.0.1:8001:8001"

extra_hosts

添加主机名映射。使用与docker客户端–add-host类似

1. extra_hosts:
2.  - "somehost:162.242.195.82"
3.  - "otherhost:50.31.209.229"

volumes

目录映射,可以直接使用 [主机:容器]格式,或者使用[主机:容器:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。

1. volumes:
2.   # 只指定一个路径,Docker会自动在创建一个目录。
3.  - /var/lib/mysql
4.   # 主机使用绝对路径和容器目录映射
5.  - /opt/data:/var/lib/mysql
6.   # 以Compose配置文件的目录为中心的相对路径和容器目录映射
7.  - ./cache:/tmp/cache
8.   # 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
9.  - ~/configs:/etc/configs/:ro

dns

自定义DNS服务器。

1. dns:8.8.8.8
2. dns:
3.  - 8.8.8.8
4.  - 9.9.9.9

dns_search

配置DNS搜索域。

1. dns_search:example.com
2. dns_search:
3.  - domain1.example.com
4.  - domain2.example.com

entrypoint

设置入口命令

1. entrypoint: /code/entrypoint.sh
2. entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"]
3. entrypoint: java -jar penngo_test.jar

env_file

从文件添加环境变量

1. env_file: .env
2. env_file:
3.  - ./common.env
4.  - ./apps/web.env
5.  - /opt/runtime_opts.env

environment

添加环境变量。

1. environment:
2.   RACK_ENV: development
3.   SHOW: 'true'
4.   SESSION_SECRET:
5. 
6. environment:
7.  - RACK_ENV=development
8.  - SHOW=true
9.  - SESSION_SECRET

external_links

链接到docker-compose.yml外部的容器

1. external_links:
2.  - redis_1
3.  - project_db_1:mysql
4.  - project_db_1:postgresql

cap_add

增加指定容器的内核能力(capacity)。

1. cap_add:
2.  - ALL

cap_drop

去掉指定容器的内核能力(capacity)。

1. cap_drop:
2.     - NET_ADMIN

cgroup_parent

创建了一个cgroup组名称为cgroups_1:

cgroup_parent: cgroups_1

devices

指定设备映射关系

1. devices:
2.     - "/dev/ttyUSB1:/dev/ttyUSB0"

expose

暴露端口,但不映射到宿主机,只允许能被连接的服务访问。

1. expose:
2.  - "3000"
3.  - "8000"

labels

为容器添加Docker元数据(metadata)信息。

1. labels:
2. - "com.example.description=Accounting webapp"
3. - "com.example.department=Finance"
4. - "com.example.label-with-empty-value"

links

链接到其它服务中的容器

1. links:
2.     - db
3.     - db:database
4.     - redis

log_driver

指定日志驱动类型。目前支持三种日志驱动类型:

1. log_driver: "json-file"
2. log_driver: "syslog"
3. log_driver: "none"

log_opt

日志驱动的相关参数。

net

设置网络模式。

1. net: "bridge"
2. net: "none"
3. net: "host"

实践操作

  • docker-compose.yml文件
1. version: "3"
2. services:
3.   mysql:
4.     image: mysql:latest
5.     container_name: mysql_slaver11
6.     restart: always
7.     privileged: true
8.     ports:
9.  - 3307:3306
10. environment:
11.       MYSQL_ROOT_PASSWORD: 123456
12.       TZ: Asia/Shanghai
13.     volumes:
14.  - /wuming/mysql/slaver11/data:/var/lib/mysql
15.  - /wuming/mysql/slaver11/log:/var/log/mysql
16.  - /wuming/mysql/slaver11/conf/my.cnf:/etc/mysql/my.cnf
17.   mycat:
18.     image: manondidi/mycat:latest
19.     container_name: mycat
20.     restart: always
21.     ports:
22.  - 8066:8066
23.     volumes:
24.  - /wuming/mycat/conf:/usr/local/mycat/conf
25.  - /wuming/mycat/logs:/usr/local/mycat/logs
26.   redis:
27.     image: redis:latest
28.     container_name: redis_master
29.
  • 端口测试
1. netstat -npl | grep 3306
2. netstat -npl | grep 3307
3. netstat -npl | grep 8066
  • 构建并后台启动

进入docker-compose对应的文件目录下,执行以下命令

1. # 对应目录下运行docker-compose文件
2. docker compose up -d

  • 测试端口是否可以访问以及容器是否启动
1. # 安装telnet
2. yum -y install telnet
3. # 查看对方端口是否开
4. telnet  192.168.10.143 3307
5. docker ps

目录
相关文章
|
1月前
|
关系型数据库 MySQL API
|
2月前
|
机器人 网络安全 数据安全/隐私保护
autMan奥特曼机器人-对接Docker版本NTQQ详细教程
本文介绍了如何在服务器上搭建NTQQ机器人,通过官方NTQQ对接各框架,实现QQ登录的稳定运行。文章提到了需要准备一台服务器和相应的软件,并详细描述了通过SSH链接服务器、创建文件夹和配置文件、编辑配置文件地址端口、运行容器等步骤。同时,文章还介绍了VNC连接的使用和配置,以及使用watchtower进行NTQQ的更新。文章总结起来就是在服务器上搭建NTQQ机器人,实现QQ登录的稳定性和自动登录功能,同时提供了更新和维护的方法。
95 3
autMan奥特曼机器人-对接Docker版本NTQQ详细教程
|
4天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
122 77
|
1天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
42 24
|
22天前
|
缓存 Linux Docker
【最新版正确姿势】Docker安装教程(简单几步即可完成)
之前的老版本Docker安装教程已经发生了变化,本文分享了Docker最新版安装教程,其他操作系统版本也可以参考官 方的其他安装版本文档。
684 2
【最新版正确姿势】Docker安装教程(简单几步即可完成)
|
3天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
55 6
|
19天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
2月前
|
缓存 监控 持续交付
|
29天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
29天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
55 1