12、docker-compose安装及编写

一、docker-compose安装

安装docker-compose:

方法一 :

可以到这里去下载:
https://github.com/docker/compose/releases

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

记得给权限

chmod +x /usr/local/bin/docker-compose

验证是否安装成功

[root@pokes03 ~]# docker-compose version
docker-compose version 1.24.1, build 4667896b
docker-py version: 3.7.3
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018

二、docker-compose功能演示

利用docker部署wordpress的案例,以下代码就是docker-compose的内容:

1、新建yaml文件
vim docker-compose.yaml

添加以下代码:

version: '2'

services:
   db:
     image: mysql:5.7
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
      depends_on:
        - db
      image: wordpress:latest
      restart: always
      ports:
        - "8000:80"
      environment:
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_USER: wordpress
        WORDPRESS_DB_PAASWORD: wordpress

添加完保存。
注意事项:

  • 代码中的冒号后面是有空格的
  • 注意代码缩进。
2、运行docker-compose
docker-compose up -d
3、查看效果

我们可以看到docker-compose为我们自动下载了镜像,并且根据我们的设定为我们自动创建了容器。最下面的图也发现访问也是没问题。所以我们可以利用docker-compose进行一键部署。

[root@pokes03 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1c81ec9d37fe        wordpress:latest    "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:8000->80/tcp   root_wordpress_1
1daf35d8d135        mysql:5.7           "docker-entrypoint.s…"   2 hours ago         Up 2 hours          3306/tcp, 33060/tcp    root_db_1
[root@pokes03 ~]# 

在这里插入图片描述

三、docker-compose详解

1、docker-compose使用场景

docker-compose用来单机上编排容器(定义和运行多个容器,使容器能互通)

Eg:前端和后端部署在一台机器上,现在直接通过编写docker-compose文件对多个服务(可定义依赖,按顺序启动服务)同时进行启动/停止/更新。

docker-compose将所管理的容器分为3层结构:project service container
docker-compose.yml组成一个projectproject里包括多个service,每个service定义了容器运行的镜像(或构建镜像),网络端口,文件挂载,参数,依赖等,每个service可包括同一个镜像的多个容器实例。

project 包含 serviceservice 包含 container

2、编写docker-compose.yml

官网地址:https://docs.docker.com/compose/compose-file/
这里举一个例子,例子要面面俱到,所以看起来有点复杂。

version: '3'
services:
  back:
    image: backService:1.0
    container_name: back
    environment:
      - name=tom
      - DB_PATH=jdbc:sqlite:/data/ns.db
    restart: always
    privileged: true
    ports:
      - "9000:9000"
    networks:
      - "net"
    volumes:
      - "/root/k3s.kube.config:/k3s.kube.config"
      - "/root/data:/data"
      - "/etc/network/interfaces:/etc/network/interfaces"
  front:
    image: front:1.0
    container_name: front
    restart: always
    ports:
      - "10087:80"
    networks:
      - "net"
    volumes:
      - "/root/nginx.conf:/etc/nginx/nginx.conf"
networks:
  net:
    driver: bridge

version:指定 docker-compose.yml 文件的写法格式
services:多个容器集合environment:环境变量配置,可以用数组或字典两种方式

environment:
    RACK_ENV: "development"
    SHOW: "ture"
-------------------------
environment:
    - RACK_ENV="development"
    - SHOW="ture"

image:指定服务所使用的镜像

version: '2'
services:
  redis:
    image: redis:alpine

expose:定义容器用到的端口(一般用来标识镜像使用的端口,方便用ports映射)

expose:
    - "3000"
    - "8000"

ports:定义宿主机端口和容器端口的映射,可使用宿主机IP+宿主机端口进行访问 宿主机端口:容器端口

ports:   # 暴露端口信息  - "宿主机端口:容器暴露端口"
- "5000"
- "8081:8080"

注:仅指定容器端口时,宿主机将会随机选择端口

volumes:卷挂载路径,定义宿主机的目录/文件和容器的目录/文件的映射 宿主机路径:容器路径

volumes:
  - "/var/lib/mysql"
  - "hostPath:containerPath"
  - "root/configs:/etc/configs"

depend_on: 规定service加载顺序,例如数据库服务需要在后台服务前运行

extra_hosts:类似于docker里的–add-host参数 配置DNS域名解析(域名和IP的映射)

extra_hosts:
 - "googledns:8.8.8.8"
 - "dockerhub:52.1.157.61"

相当于在容器种的/etc/hosts文件里增加

8.8.8.8 googledns
52.1.157.61 dockerhub

restart: always :配置重启,docker每次启动时会启动该服务

restart: always

privileged: true :开启特权模式

privileged: true

user: root :指定容器运行的用户名

user: root

links:将指定容器连接到当前连接,可以设置别名,已废弃,推荐使用networks
networks:
可参考:https://www.cnblogs.com/jsonhc/p/7823286.html

version: '3'
services:
  front:
    image: front
    container_name: front
    depends_on:
      - php
    ports:
      - "80:80"
    networks:
      - "net1"
    volumes:
      - "/www:/usr/local/nginx/html"
  back:
    image: back
    container_name:back
    expose: 
      - "9000"
    networks:
      - "net1"
    volumes:
      - "/www:/usr/local/nginx/html"

networks:
  net1:
    driver: bridge

front里可以直接用back替换IP访问back

ogging:日志服务
driver:默认json-file,可选syslog

logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"

network_mode:设置网络模式

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

bridge:默认,需要单独配置ports映射主机port和服务的port,并且开启了容器间通信

host:和宿主机共享网络,比如service是8081端口,无需配置ports,直接可以用主机IP:8081访问

cap_add cap_drop:赋予/删除 容器某些能力

可运行 man 7 capabilities 查看所有能力

build:配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定 Dockerfile 路径

注:如果指定build同时也指定image,那么会从build里构建,镜像的名字和tag将取image指定的

build: .
image: webapp:tag

command:覆盖容器启动后默认执行的命令

command: bundle exec thin -p 3000
----------------------------------
command: [bundle,exec,thin,-p,3000]

四、Docker-Compose 深入学习

  • yml 文件以key: value的方式来指定配置信息;
  • 多各配置信息以换行和缩进的方式来区分;
  • 缩进只能用空格,不能用制表符;

推荐下载镜像的地址:http://hub.daocloud.io/

1、docker-compose的编写步骤及格式

举例说明:

version: '3.1'
services:
  mysql:
    restart: always   #代表只要docker启动,那么这个容器就跟着启动
    image: daocloud.io/library/mysql:5.7.4   #指定镜像的下载地址
    container_name: mysql   #指定容器的名称
    ports:
      - 3306:3306   #端口号的映射
    envirronment:       #环境
      MYSQL_ROOT_PAASWORD: root   #指定mysql的root用户登录密码
      TZ: Asia/Shanghai   #指定时区
    volumes:
      - /opt/docker_mysql/data:/varlib/mysql   #映射数据卷
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.5.15-jre8
    container_name: tomcat
    ports:
      - 8080:8080
    envirronment:
      TZ: Asia/Shanghai
    volumes:
      - /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps
      - /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs

2、编写docker compose的注意事项

缩进问题、字符敲错
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.tomcat.ports contains an invalid type, it should be an array
Unsupported config option for services.mysql: 'envirronment'
Unsupported config option for services.tomcat: 'envirronment'

提示说是不支持envirronment 这个环境模块。

  • 原以为是是docker和compose的版本不对应导致的。
  • 仔细一看原来是字母敲错了,envirronment多了一个r

在这里顺便我们也说一下版本对应的问题:

docker 版本对应的 docker-compose 版本 官方文档:
https://docs.docker.com/compose/compose-file/#host-or-none

docker版本对应的docker-compose版本

官方文档: https://docs.docker.com/compose/compose-file/#host-or-none

Compose file formatDocker Engine release
3.819.03.0+
3.718.06.0+
3.618.02.0+
3.517.12.0+
3.417.09.0+
3.317.06.0+
3.217.04.0+
3.11.13.1+
3.01.13.0+
2.417.12.0+

发现19.03.12 对应的compose版本为3.8

关于tomcat启动之后的404页面报错

启动一切正常都没问题,但是访问页面的时候出现404,这个问题就必须进入容器里面看看

解决办法在这里:

https://blog.csdn.net/JIANtype/article/details/106456242

五、使用docker-compose命令管理容器

在使用docker-Compose的命令时,默认会在当前目录下找docker-compose.yml文件

docker-compose up -d   #后台启动
docker-compose down    #关闭并删除容器
docker-compose start|stop|restart   #重新管理由docker-compose维护的容器
docker-compose ps		#查看由docker-compose维护的容器
docker-compose los -f	#查看日志
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦良Cool

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值