首页 专题 文章 代码 归档
Docker Compose
2020.03.19 18:54 2020.03.19 18:57

1. 介绍

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

使用Docker问题:

docker镜像在创建之后,往往需要自己手动pull来获取镜像,然后执行run命令来运行。当服务需要用到多种容器,容器之间又产生了各种依赖和连接的时候,部署一个服务的手动操作是令人感到十分厌烦的。

这时就需要用到Docker Compose;

2. 步骤

1、用一个定义应用程序的环境,Dockerfile这样它就可以在任何地方再现。

2、定义组成应用程序的服务,编写docker-compose.yml文件 以便它们可以在隔离的环境中一起运行。

3、运行docker-compose up和撰写启动并运行整个应用程序。

3. 安装compose

安装也可参考官网:https://docs.docker.com/compose/install/

下面给出示例:

下载:

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋予权限:

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

建立软链接:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

验证:

docker-compose --version

docker compose常用命令

#帮助信息
[root@localhost ~]# docker-compose --help


#用来创建或重新创建服务使用的镜像
[root@localhost ~]# docker-compose build
例如:docker-compose build service_a    #创建一个镜像名叫service_a

#用于通过容器发送SIGKILL信号强行停止服务
[root@localhost ~]# docker-compose kill

#显示service的日志信息
[root@localhost ~]# docker-compose logs


#暂停和恢复服务
[root@localhost ~]# docker-compose pause/unpause
docker-compose pause    #暂停服务
docker-compose unpause  #恢复被暂停的服务

#用于查看服务中的端口与物理机的映射关系
[root@localhost ~]# docker-compose port
例如:docker-compose port nginx_web 80  #查看服务中80端口映射到物理机上的那个端口

#用于显示当前项目下的容器
[root@localhost ~]# dokcer-compose ps
注意,此命令与docker ps不同作用,此命令会显示停止后的容器(状态为Exited),只针对某个项目。

#用于拉取服务依赖的镜像
[root@localhost ~]# docker-compose pull


#用于重启某个服务中的所有容器
[root@localhost ~]# docker-compose restart
例如:docker-compose restart service_name  #只有正在运行的服务可以使用重启命令,停止的服务是不可以重启

#删除停止的服务(服务里的容器)
[root@localhost ~]# docker-compose rm
-f    #强制删除
-v    #删除与容器相关的卷(volumes)


#用于在服务中运行一个一次性的命令
[root@localhost ~]# docker-compose run

这个命令会新建一个容器,它的配置和srvice的配置相同。但两者之间还是有两点不同之处
1、run指定的命令会直接覆盖掉service配置中指定的命令
2、run命令启动的容器不会创建在service配置中指定的端口,如果需要指定使用--service-ports指定


#启动/停止运行某个服务的所有容器
[root@localhost ~]# docker-compose start/stop
docker-compose start 启动运行某个服务的所有容器
docker-compose stop 停止运行某个服务的所有容器

#指定某个服务启动的容器个数
[root@localhost ~]# docker-compose scale
[root@localhost ~]# docker-compose scale --help


#备注:
#docker-compose 运行时是需要指定service名称,可以同时指定多个,也可以不指定。不指定时默认就是#对配置文件中所有的service执行命令。
-f    #用于指定配置文件
-p    #用于指定项目名称

4. 配置文件

docker compose 使用YAML(文件后缀:.yml)文件格式,这需要您了解yml文件的语法;

实例

version: "3"
services:
  nginx:
    container_name: web-nginx
    image: nginx:latest
    restart: always
    ports:
      - 80:80
    volumes:
    - ./webserver:/webserver
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf

当然,实际使用中,services里面肯定不止一个nginx容器,还有其他很多容器!

配置说明

#下面将配置文件做个简单的解释说明
docker-compose的配置文件是一个.yml格式的文件
第一部分
version: "3"  #指定语法的版本

第二部分
services:     #定义服务
  nginx:      #服务的名称,-p参数后接服务名称
    container_name: web-nginx    #容器的名称
    image: nginx:latest          #要使用的镜像,如果没有将在构建时向仓库拉取
    restart: always
    ports:                       #端口映射
      - 80:80

第三部分
volumes:       #物理机与容器的磁盘映射关系
    - ./webserver:/webserver
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf

5. 测试使用

我们这里做一个简单的测试;

1、创建一个目录来测试:

mkdir docker-compose-test && cd docker-compose-test

2、编辑nginx配置文件:

#user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    client_max_body_size 10m;  
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
server {
    listen       80;
    server_name  localhost;
    location / {
        root   /webserver;
        index  index.html index.htm;
    }
}
    include /etc/nginx/conf.d/*.conf;
}

3、编辑docker-compose.yml文件

vim docker-compose.yml

文件名是docker-compose.yml

version: "3"
services:
  nginx:
    container_name: web-nginx
    image: nginx:latest
    restart: always
    ports:
      - 80:80
    volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf

解释:创建一个nginx目录,并将当前目录(即docker-compose-test)下的nginx.conf配置映射到容器中的/etc/nginx/nginx.conf(可参考:《Docker 数据卷》章节)

使用命令

docker-compose up

如果需要后台运行,则加一个-d参数:

docker-compose up -d

同样,停止命令:

docker-compose down

6. 其他

上面的测试仅是一个很简单的测试,实际开发中,肯定需要结合dockerfile做更复杂的配置;

本节阅读完毕! (分享
二维码图片 扫描关注我们哟