Docker-Compose安装和使用

2020-10-13  本文已影响0人  一个头发茂密的程序员

一、简介

  1. Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。这时候就需要一个工具能够管理一组相关联的的应用容器,这就是Docker Compose。

  2. Compose有2个重要的概念

  • 项目(Project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
  • 服务(Service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

二、Docker-Compose安装与卸载

1.安装包下载

https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64下载对应的安装包
将下载好的安装包剪切到/usr/local/bin/docker-compose目录下

mv /app/download/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
2.pip安装
#安装依赖 
yum -y install epel-release 
#安装PIP 
yum -y install python-pip 
#升级PIP 
pip install --upgrade pip
[root@localhost /]# pip --version
pip 20.2.3 from /usr/lib/python2.7/site-packages/pip (python 2.7)
pip install -U docker-compose==1.25.0
安装成功
[root@localhost /]# docker-compose --version

  /usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in a future release.
  from cryptography.hazmat.backends import default_backend
docker-compose version 1.25.0, build b42d419

卸载

rm /usr/local/bin/docker-compose
pip uninstall docker-compose

docker compose 重要命令

-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
--x-networking 使用 Docker 的可拔插网络后端特性
--x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
--verbose 输出更多调试信息。
-v, --version 打印版本并退出。

config
验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因。
如:

docker-compose -f skywalking.yml config

此命令不会执行真正的操作,而是显示 docker-compose 程序解析到的配置文件内容:


image.png
docker-compose -f skywalking.yml images
image.png
docker-compose -f skywalking.yml ps
image.png
docker-compose -f skywalking.yml up

默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。

image.png
如果使用`docker-compose up -d`将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。
默认情况,如果服务容器已经存在,`docker-compose up` 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 `docker-compose.yml` 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 `docker-compose up --no-recreate`。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 `docker-compose up --no-deps -d <SERVICE_NAME>` 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。此命令有如下选项:
①:`-d` 在后台运行服务容器。
②:`--no-color` 不使用颜色来区分不同的服务的控制台输出。
③:`--no-deps` 不启动服务所链接的容器。
④:`--force-recreate` 强制重新创建容器,不能与 --no-recreate 同时使用。
⑤:`--no-recreate` 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。
⑥:`--no-build` 不自动构建缺失的服务镜像。
⑦:`-t, --timeout TIMEOUT` 停止容器时候的超时(默认为 10 秒)。
docker-compose -f skywalking.yml stop elasticsearch
选项:
`-t, --timeout TIMEOUT` 停止容器时候的超时(默认为 10 秒)。
docker-compose -f skywalking.yml start elasticsearch
 #查看单独容器的日志
docker-compose -f skywalking.yml logs elasticsearch` 

二、使用

docker compose 模板文件

模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。本文主要列出几个常见&重要的指令,其他指令大家可以自行百度。
默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。

version: '3'
services:
  elasticsearch:
    image: elasticsearch:6.8.5
    container_name: elasticsearch
    restart: always
    volumes:
      - /app/skywalking/elasticsearch/data:/usr/share/elasticsearch/data:rw
      - /app/skywalking/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /app/skywalking/elasticsearch/conf/jvm.options:/usr/share/elasticsearch/config/jvm.options
      - /app/skywalking/elasticsearch/logs:/usr/share/elasticsearch/logs:rw
    environment:
      - TZ=Asia/Shanghai
      - xpack.monitoring.enabled=false
      - xpack.watcher.enabled=false
    ports:
      - "9200:9200"
      - "9300:9300"

注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中重复设置。

常用&重要命令

image: apache/skywalking-oap-server:6.5.0
image: apache/skywalking-ui:6.5.0

ports: 
    - "3000" 
    - "8080:8080" 
    - "127.0.0.1:8001:8001"

volumes:
      - /app/skywalking/elasticsearch/data:/usr/share/elasticsearch/data:rw
      - conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

version: "3"
services:
  my_src:
    image: mysql:8.0
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  mysql_data:

ulimits:
   nproc: 65535
   nofile:
     soft: 20000
     hard: 40000

version: '3'
services:
  web:
    build: .
    depends_on:
      - db
      - redis     
  redis:
    image: redis    
  db:
    image: mysql

environment:
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200

environment:
      - SW_STORAGE= elasticsearch
      - SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200

docker-compose 实战

首先我需要推荐两件事:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://hub-mirror.c.163.com",
        "https://mirror.ccs.tencentyun.com",
        "https://reg-mirror.qiniu.co"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

本次实战我们以docker-compose部署skywalking为例。编写skywalking.yml,内容如下。

version: '3.3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.8.5
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      discovery.type: single-node
    ulimits:
      memlock:
        soft: -1
        hard: -1
  oap:
    image: skywalking/oap
    container_name: oap
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
  ui:
    image: skywalking/ui
    container_name: ui
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 8080:8080
    environment:
      SW_OAP_ADDRESS: oap:12800

部署完成后将其上传至服务器,执行

docker-compose -f /app/skywalking.yml up -d

即可。
如果出现拉取镜像错误
更改yml

  oap:
    image: apache/skywalking-oap-server:6.5.0
    container_name: oap
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
  ui:
    image: apache/skywalking-ui:6.5.0
    container_name: ui
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 8080:8080
    environment:
      SW_OAP_ADDRESS: oap:12800

即可

参考博客地址:http://javadaily.cn/articles/2019/11/27/1574852024888.html
上一篇下一篇

猜你喜欢

热点阅读