文章目录
- 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程序
[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.