docker-compose:docker开源项目

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: docker-compose:docker开源项目

1.定义:


   docker容器的编排工具:定义和运行多个相关联的容器(单台dockerhost上) ,简单理解:可以同时管理(增、删、改、查等)多个容器。但没有资源管理功能,需要k8s。


   官网文档地址: https://docs.docker.com/compose/overview/


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


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


2.定位:


   定义和运行多个docker容器的应用,同时可以对多个容器进行编排


3.核心概念


   服务(service):一个应用的容器,服务可以存在多个

   项目(project):由一组关联的容器组成的一个完整业务单元,在“docker-compose.yml”中定义。


==========================================


###### 官方在线安装:


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



//验证已有docker-compose命令



docker-compose -v



//设置tab键的空格距离。


vim /root/.vimrc

set tabstop=2


source /root/.vimrc



##### 一.docker-compose的配置文件实例


通过识别一个docker-compose.yml的配置文件,去管理容器。



vim docker-compose.yml


version: '3.2'


services:

 nginx:

   restart: always

   image: nginx:latest

   container_name: web-nginx

   ports:

     - 90:80

   volumes:

     - ./webserver:/usr/share/nginx/html


第一个部分: version: 指定语法格式的版本。


第二部分:service:定义服务,(想要运行什么样的容器)


----------------------------------

nginx:                //服务的名称

container_name: web-nginx   //容器名称,相当于docker  run  --name

image: nginx:latest        //使用的镜像

restart: always     //随开机自启

ports:              //端口映射,相当于docker run  -p

 - 90:80

volumes:    //持久化挂载,相当于docker run -v

command:    //容器执行命令,相当于docker file 里的CMD

networks:    //定义网络,相当于docker run --network


------------------------------------


//运行docker-compose规定的容器,

PS:在执行这条命令的当前目录下,也需要有一个docker-compose.yml的配置文件,并且通常只有一个。

docker-compose up


PS:  docker-compose  up  之后,会显示都做了什么操作,并占用终端, 如果想要退出终端占用,加-d  选项。


//保持后台运行

docker-compose up -d



//停止运行

docker-compose stop



//重启

docker-compose restart


并且,在运行container的过程中,还可以支持Dockerfile


vim Dockerfile

FROM nginx

COPY ./webserver/index.html /usr/share/nginx/html/index.html



//修改docker-compose.yaml文件


version: '3.2'


services:

 nginx:

   build: .

   restart: always

   image: nginx-web:v1.0

   container_name: test-web

   ports:

     - 91:80

 


//运行docker-compose命令的时候,如果文件内有Dockerfile,可以提前 执行:docker-compose build  或者在up -d 的时候添加--build  选项。

docker-compose up -d  --build



二.docker-compose管理命令介绍

1、compose具有管理应用程序整个生命周期的命令

启动,停止和重建服务

查看正在运行的服务的状态

流式传输运行服务的日志输出

在服务上运行一次性命令


2、常用命令


**#帮助信息**

docker-compose --help


**#用来创建或重新创建服务使用的镜像**

docker-compose build


**#用于通过容器发送SIGKILL信号强行停止服务**

docker-compose kill nginx


PS:  kill  服务名称,默认所有服务


**#显示service的日志信息**

docker-compose logs


**#暂停和恢复服务**

docker-compose pause



docker-compose pause    #暂停服务

docker-compose unpause  #恢复被暂停的服务


**#用于查看服务中的端口与物理机的映射关系**

docker-compose port nginx 80


例如:docker-compose port nginx_web 80  #查看服务中80端口映射到物 理机上的那个端口


**#用于显示当前项目下的容器**

docker-compose ps


注意,此命令与docker ps不同作用,此命令会显示停止后的容器(状态为 Exited),只针对某个项目。


**#用于拉取服务依赖的镜像**

docker-compose pull


**#用于重启某个服务中的所有容器**

docker-compose restart


例如:docker-compose restart service_name  #只有正在运行的服务可以 使用重启命令,停止的服务是不可以重启


**#删除停止的服务(服务里的容器)**

docker-compose rm


-f    #强制删除

-v    #删除与容器相关的卷(volumes)


**#用于在服务中运行一个一次性的命令**

docker-compose run nginx ls /


这个命令会新建一个容器,它的配置和service的配置相同。但两者之间还是有两点不同之处

1、run指定的命令会直接覆盖掉service配置中指定的命令

2、run命令启动的容器不会创建在service配置中指定的端口,如果需要指定使用--service-ports指定


**#启动/停止运行某个服务的所有容器**

docker-compose start/stop


docker-compose start 启动运行某个服务的所有容器

docker-compose stop 停止运行某个服务的所有容器


**#指定某个服务启动的容器个数**

vim docker-compose.yml

version: '3.2'

services:

 nginx:

   restart: always

   image: nginx:latest

   ports:

     - 80

   volumes:

     - ./webserver:/usr/share/nginx/html



docker-compose scale nginx=2


PS: 如果需要运行多个容器,那么容器名称就不要给了,会随机生成,还有注意端口映射问题,不要冲突(docker-compose    port  字段支持仅写 一个容器暴露的端口)。


备注:

docker-compose 运行时是需要指定service名称,可以同时指定多个,也可以不指定。不指定时默认就是对配置文件中所有的service执行命令。

-f    #用于指定配置文件

-p    #用于指定项目名称


三.搭建wordpress的博客

官方文档地址:https://docs.docker.com/compose/wordpress/


按照官方文档创建一个目录,并且编辑docker-compose.yml文件,文件内容如下:


docker-compose.yml


version: '3.2'


services:

  db:

    image: mysql:5.7

    volumes:

      - db_data:/var/lib/mysql

    restart: always

    environment:

      MYSQL_ROOT_PASSWORD: somewordpress

      MYSQL_DATABASE: wordpress

      MYSQL_USER: wordpress

      MYSQL_PASSWORD: wordpress


  wordpress:

    depends_on:

      - db

    image: wordpress:latest

    ports:

      - "8000:80"

    restart: always

    environment:

      WORDPRESS_DB_HOST: db:3306

      WORDPRESS_DB_USER: wordpress

      WORDPRESS_DB_PASSWORD: wordpress

      WORDPRESS_DB_NAME: wordpress

volumes:

 db_data:



docker-compose up -d


PS:如果没有对应的mysql和wordpress镜像,docker会自动从中央仓库下载,这里我们因为网络原因会给大家下载好的镜像,请同学们自行导入到本地。


四.docker-compose中添加应用网络

1.yaml文件中使用已有网络。

docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 demo1


mkdir /root/network1

cd /root/network1


vim docker-compose.yaml

version: '3'

services:

 nginx:

   container_name: web-nginx11

   image: nginx

   restart: always

   ports:

     - 99:80

   networks:

     demo1:

       ipv4_address: 172.22.16.23

networks:

 demo1:

   external: true


PS: external该部分表示使用外部网络demo,外部为true。


docker-compose up -d


docker inspect web-nginx 查看容器内网络是否成功分配。



2.yaml文件中使用内部网络。

mkdir /root/network2

cd /root/network2


vim docker-compose.yml

version: '3'

services:

 nginx:

   container_name: web-nginx2

   image: nginx

   restart: always

   ports:

     - 97:80

   networks:

     demo2:

networks:

 demo2:


3.文件内自定义网络网段

version: "3"

networks:

 demo3:

   driver: bridge

   ipam:

     config:

     - subnet: 172.46.1.0/24

services:

 nginx:

   container_name: web2

   restart: always

   image: nginx:latest

   ports:

    - 92:80

   networks:

     demo3:

       ipv4_address: 172.46.1.2

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
57 4
|
2月前
|
缓存 Kubernetes 应用服务中间件
1分钟了解什么是docker和docker-compose?前后端必知必会技能GET啦
1分钟了解什么是docker和docker-compose?前后端必知必会技能GET啦
|
7月前
|
NoSQL Unix MongoDB
【docker 】docker-compose 部署mongoDB
【docker 】docker-compose 部署mongoDB
210 1
|
7月前
|
Ubuntu Shell 网络安全
【专栏】在Ubuntu 22.04上安装KubeSphere的指南:确保系统至少有4GB内存和2核CPU,安装Docker和docker-compose
【4月更文挑战第28天】在Ubuntu 22.04上安装KubeSphere的指南:确保系统至少有4GB内存和2核CPU,安装Docker和docker-compose。下载安装脚本`curl -sSL https://kubesphere.io/install.sh | bash`,根据提示选择安装选项,等待完成。安装后,通过访问控制台验证安装效果。解决可能出现的错误、网络问题和性能问题,利用KubeSphere提升容器管理效率。本文为顺利安装和使用提供参考。
297 0
|
NoSQL Redis Docker
【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)下
【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)
251 0
|
存储 NoSQL Redis
【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)上
【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)
221 0
|
消息中间件 关系型数据库 MySQL
从零玩转Docker之docker-compose快捷部署中间件2
从零玩转Docker之docker-compose快捷部署中间件
1192 0
|
Docker 容器
从零开始安装部署Harbor(Docker+Docker-compose+Harbor)
从零开始安装部署Harbor(Docker+Docker-compose+Harbor)
842 0
|
7月前
|
Kubernetes 应用服务中间件 nginx
docker镜像编译与docker-compose部署与编排
docker镜像编译与docker-compose部署与编排
181 0
|
7月前
|
API PHP 数据库
Docker六脉神剑(四) 使用Docker-Compose进行服务编排搭建lnmp环境
Docker六脉神剑(四) 使用Docker-Compose进行服务编排搭建lnmp环境
67 0