Docker之docker-compose

文章目录

  • 1. 什么是Dock Compose
    • 查看docker-compose版本
  • 2. yml文件的格式
    • 2.1:yml文件简介
    • 2.2:docker-compose.yml配置文件实例
  • 3. Docker-Compose的安装与使用
    • 3.1 Docker-Compose的安装
    • 3.2 Docker-Compose启动容器
    • 3.3 Docker-Compose的基本操作
  • 4. Docker-Compose部署一个简单的python flask程序
    • 生成镜像并启动
    • 查看运行的容器
    • 演示结果

1. 什么是Dock Compose

docker-compose技术,就是通过一个 .yml 配置文件,将所有的容器的部署方法、文件映射、容器连接等等一系列的配置写在一个配置文件里,最后只需要执行docker-compose up命令就会像执行脚本一样的去一个个安装容器并自动部署他们,极大的便利了复杂服务的部署。

查看docker-compose版本

[root@lucky ~]# which docker-compose
/usr/local/bin/docker-compose
[root@lucky ~]# docker-compose -version
docker-compose version 1.25.5, build unknown

2. yml文件的格式

2.1:yml文件简介

  • yml文件默认的名字为:docker-compose.yml
  • yml包含三大概念:Services、Networks、Volumes
    一个service代表一个container(这个container可以从docker hub上拉取的image创建也可以用Dockerfile build出来的image创建)
  • service的启动类似docker run,我们可以给其指定network和volume

2.2:docker-compose.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


#下面将配置文件做个简单的解释说明
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

3. Docker-Compose的安装与使用

3.1 Docker-Compose的安装

[root@lucky ~]# pip install docker-compose
[root@lucky ~]# docker-compose -v
docker-compose version 1.25.5, build unknown

3.2 Docker-Compose启动容器

docker-compose up需要有docker-compose.yml文件,若为其他 xxx.yml,启动命令则需要改成

docker-compose -f xxx.yml up

3.3 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部署一个简单的python flask程序

flask demo 代码

[root@lucky test_flask]# tree
.
├── app.py
├── docker-compose.yml
└── Dockerfile

0 directories, 3 files

生成镜像并启动

[root@lucky test_flask]# docker-compose up -d
Building web
Step 1/6 : FRoM python:3.6
 ---> 13efce2de907
Step 2/6 : COPY . /app
 ---> 6956a9d2c2e4
Step 3/6 : WORKDIR /app
 ---> Running in 5486d4108d76
Removing intermediate container 5486d4108d76
 ---> bbcda2fa513d
Step 4/6 : RUN pip install flask redis
 ---> Running in b36e39e7cba5
Collecting flask
  Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)
Collecting redis
  Downloading redis-3.5.3-py2.py3-none-any.whl (72 kB)

查看运行的容器

[root@lucky test_flask]# docker-compose ps
       Name                     Command               State           Ports
------------------------------------------------------------------------------------
test_flask_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
test_flask_web_1     python app.py                    Up      0.0.0.0:8008->5000/tcp

演示结果

[root@lucky test_flask]# curl 0.0.0.0:8008
Hello Container World! I have been seen b'1' times and my hostname is 48a2e539fe61.
[root@lucky test_flask]# curl 0.0.0.0:8008
Hello Container World! I have been seen b'2' times and my hostname is 48a2e539fe61.
[root@lucky test_flask]# curl 0.0.0.0:8008
Hello Container World! I have been seen b'3' times and my hostname is 48a2e539fe61.

你可能感兴趣的:(#,Docker)