docker compose详细使用教程

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 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月前
|
存储 机器学习/深度学习 中间件
快速上手 Elasticsearch:Docker Compose 部署详解
本文介绍了如何使用Docker Compose快速搭建Elasticsearch学习环境。Elasticsearch是一款用于实时搜索和分析的分布式中间件,适用于多种场景,如搜索、日志分析、机器学习等。首先,创建docker网络,拉取最新版8.12.2镜像。接着,编写docker-compose.yml文件,配置单节点集群,设置端口映射、内存限制及数据卷挂载。然后,创建并配置数据卷目录,允许远程访问和跨域。最后,启动服务并验证,通过浏览器访问确认服务运行正常。本文为初学者提供了一个简便的Elasticsearch部署方法。
173 4
快速上手 Elasticsearch:Docker Compose 部署详解
|
1月前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
188 0
|
1月前
|
Oracle 关系型数据库 数据库
|
1月前
|
Java Docker 微服务
如何使用Docker和Docker Compose部署微服务
【2月更文挑战第12天】
260 0
|
8天前
|
Ubuntu Docker 索引
ubuntu 20.04 安装docker教程和安装中遇到的问题解决方案(超详细 附加图文教程)
ubuntu 20.04 安装docker教程和安装中遇到的问题解决方案(超详细 附加图文教程)
31 0
|
1月前
|
jenkins Java 持续交付
Docker搭建持续集成平台Jenkins最简教程
Jenkins 是一个广泛使用的开源持续集成工具,它能够自动化构建、测试和部署软件项目。在本文中,我们将使用 Docker 搭建一个基于 Jenkins 的持续集成平台。
119 2
|
1月前
|
JavaScript Java jenkins
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
86 0
|
2月前
|
Docker 容器
Docker Compose的安装与配置
Docker Compose的安装与配置
131 2
Docker Compose的安装与配置
|
2月前
|
存储 监控 Serverless
Serverless应用引擎(SAE)不支持直接通过Docker Compose进行部署
【2月更文挑战第8天】Serverless应用引擎(SAE)不支持直接通过Docker Compose进行部署
263 1
|
2月前
|
前端开发 Java 应用服务中间件
【Docker】部署若依项目——保姆级教程亲测
【Docker】部署若依项目——保姆级教程亲测
197 0