docker compose详细使用教程

目录

Compose介绍

安装插件

docker-compose常用命令

Docker-Compose模板文件

实践操作


Compose介绍

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

安装插件

yum update
yum install docker-compose-plugin

# 安装完成后查看版本号
docker compose version

docker-compose常用命令

# 查看配置命令
$ docker compose config

# 构建并后台启动
$ docker compose up -d

# 将会停止UP命令启动的容器,并删除容器
$ docker compose down 

#重新启动nginx容器
$ docker compose restart 

# 启动已存在的容器命令
$ docker compose start

# 停止正在运行的容器命令
$ docker compose stop

#暂停容器
$ docker compose pause               
 
# 恢复容器
$ docker compose unpause

# 构建镜像
$ docker compose bulid

# 下载镜像
$ docker compose pull

# 删除容器
$ docker compose rm 

# 查看运行的镜像
$ docker compose ps

# 查看进程
$ docker compose top

# 查看服务日志输出
$ docker compose logs

Docker-Compose模板文件

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

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

services: 
    web: 
        image: hello-world 

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

build:
  context: ../
  dockerfile: path/of/Dockerfile 

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

command: bundle exec thin -p 3000

container_name
指定自定义容器名称

container_name: app

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

version: "3"
services:
  web:
    build: .
    depends_on:
      - redis
  redis:
    image: redis

#docker compose up:按依赖顺序启动服务,redis在web之前启动。
#docker-compose stop:按依赖顺序停止服务,web在redis之前停止。

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

pid: "host"

ports
映射端口

ports:
 - "8000"
 - "49022:22"
 - "127.0.0.1:8001:8001"

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

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

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

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

dns
自定义DNS服务器。

dns:8.8.8.8
dns:
    - 8.8.8.8    
    - 9.9.9.9

dns_search
配置DNS搜索域。

dns_search:example.com
dns_search:
    - domain1.example.com
    - domain2.example.com

entrypoint
设置入口命令

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

env_file
从文件添加环境变量

env_file: .env
env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/runtime_opts.env

environment
添加环境变量。

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

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

external_links:
  - redis_1
  - project_db_1:mysql
  - project_db_1:postgresql

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

cap_add:
    - ALL

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

cap_drop:
    - NET_ADMIN

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

cgroup_parent: cgroups_1

devices
指定设备映射关系

devices:
    - "/dev/ttyUSB1:/dev/ttyUSB0" 

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

expose:
    - "3000"
    - "8000" 

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

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

links
链接到其它服务中的容器

links:
    - db
    - db:database
    - redis

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

log_driver: "json-file"
log_driver: "syslog"
log_driver: "none" 

log_opt
日志驱动的相关参数。

net
设置网络模式。

net: "bridge"
net: "none"
net: "host"

实践操作

  • docker-compose.yml文件
version: "3"
services:
  mysql:
    image: mysql:latest
    container_name: mysql_slaver11
    restart: always
    privileged: true
    ports:
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      TZ: Asia/Shanghai
    volumes:
      - /wuming/mysql/slaver11/data:/var/lib/mysql
      - /wuming/mysql/slaver11/log:/var/log/mysql
      - /wuming/mysql/slaver11/conf/my.cnf:/etc/mysql/my.cnf
  mycat:
    image: manondidi/mycat:latest
    container_name: mycat
    restart: always
    ports:
      - 8066:8066
    volumes:
      - /wuming/mycat/conf:/usr/local/mycat/conf
      - /wuming/mycat/logs:/usr/local/mycat/logs
  redis:
    image: redis:latest
    container_name: redis_master
    
  • 端口测试
netstat -npl | grep 3306
netstat -npl | grep 3307
netstat -npl | grep 8066
  • 构建并后台启动

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

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

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

相关文章

linux下开机自启: 在/etc/init.d目录下新建文件elasticsear...
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以...
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用...
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一...
设置时区(CentOS 7) 先执行命令timedatectl status|grep &...
vim&#160;/etc/sysconfig/network-scripts/ifcfg-eth0 B...