docker-compose工具相关介绍

一、docker-compose简介

1.简介
docker-compose官方文档
docker容器的编排工具:解决相互有依赖关系的多个容器的管理工具。
单台dockerhost上就可以同时管理(增、删、改、查等)多个容器。
docker镜像在创建后,往往需要自己手动pull来获取镜像,然后执行run命令来运行。当服务需要用到多种容器,容器之间又产生了各种依赖和连接时,部署一个服务的手动操作是比较麻烦的。
2.作用机理
通过一个.yml配置文件,将所有容器的部署方法、文件映射、容器连接等一系列的配置写在一个配置文件里,最后只需要执行docker-compose up命令就会像执行脚本一样去一个一个安装容器并自动部署,极大的便利了复杂服务的部署。

二、安装docker-compose

1.安装

[root@docker ~]# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
[root@docker ~]# docker-compose -v
docker-compose version 1.25.0, build 0a186604

2.设置tab键的空格距离

[root@docker ~]# vim .vimrc
set tabstop=2
[root@docker ~]# source .vimrc

三、示例介绍

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

[root@docker ~]# mkdir compose
[root@docker ~]# cd compose/
[root@docker compose]# vim docker-compose.yaml
version: "3"
services:
  nginx:
    container_name: web-nginx
    image: nginx
    restart: always
    ports:
      - 90:80
    volumes:
      - ./webserver:/usr/share/nginx/html

2.格式介绍

第一部分
version指定语法格式的版本;

第二部分
services:  #定义服务(想要运行什么样的容器);
nginx:  #服务的名称
container_name:web-nginx  #容器名称
image:nginx:latest  #使用的镜像
restart: always  #重启策略
ports:  #端口映射
- 80:80
volumes:  #挂载目录

3.运行yaml文件,自动进行容器部署
注意:运行docker-compose规定的容器。在执行这条命令的当前目录下,需要有一个docker-compose.yml的配置文件,并且通常只有一个。
(1)前台运行

[root@docker compose]# ls
docker-compose.yaml
[root@docker compose]# docker-compose up
Creating network "compose_default" with the default driver
Creating web-nginx ... done
Attaching to web-nginx
web-nginx | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web-nginx | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web-nginx | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web-nginx | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web-nginx | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web-nginx | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web-nginx | /docker-entrypoint.sh: Configuration complete; ready for start up

docker-compose up后会显示都做了什么操作,并占用终端,如果想要退出终端占用,加-d选项。
(2)后台运行

[root@docker compose]# docker-compose up -d
Starting web-nginx ... done

4.停止运行

[root@docker compose]# docker-compose stop
Stopping web-nginx ... done

5.重启

[root@docker compose]# docker-compose restart
Restarting web-nginx ... done

6.运行带有Dockerfile的yaml文件
注意:在运行container的过程中,还可以支持Dockerfile。

[root@docker compose]# cd webserver/
[root@docker webserver]# echo 123 > index.html
[root@docker webserver]# cd ..
[root@docker compose]# vim Dockerfile
FROM nginx
COPY ./webserver/index.html /usr/share/nginx/html/index.html
[root@docker compose]# vim docker-compose.yaml
version: "3"
services:
  nginx:
    build: .
    container_name: test-web
    image: nginx-web:v1.0
    restart: always
    ports:
      - 91:80

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

[root@docker compose]# docker-compose up -d --build
Building nginx
Step 1/2 : FROM nginx
 ---> 7e4d58f0e5f3
Step 2/2 : COPY ./webserver/index.html /usr/share/nginx/html/index.html
 ---> dfb587bb79ab
Successfully built dfb587bb79ab
Successfully tagged nginx-web:v1.0
Recreating web-nginx ... done
四、docker-compose管理命令介绍

1.compose具有管理应用程序整个生命周期的命令
启动、停止和重建服务;
查看正在运行的服务的状态;
流式传输运行服务的日志输出;
在服务上运行一次性命令;
2.常用命令
帮助信息

[root@docker compose]# docker-compose --help

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

[root@docker compose]# docker-compose build
Building nginx
Step 1/2 : FROM nginx
 ---> 7e4d58f0e5f3
Step 2/2 : COPY ./webserver/index.html /usr/share/nginx/html/index.html
 ---> Using cache
 ---> dfb587bb79ab
Successfully built dfb587bb79ab
Successfully tagged nginx-web:v1.0

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

[root@docker compose]# docker-compose kill nginx

显示service的日志信息

[root@docker compose]# docker-compose logs

暂停和恢复服务

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

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

[root@docker compose]# docker-compose port nginx 80

docker-compose port nginx_web 80 #查看服务中80端口映射到物理机上的那个端口。
用于显示当前项目下的容器

[root@docker compose]# docker-compose ps

注意:此命令与docker ps作用不同,此命令会显示停止后的容器(状态为Exited),只针对某个项目。
用于拉取服务依赖的镜像

[root@docker compose]# docker-compose pull

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

[root@docker compose]# docker-compose restart

docker-compose restart service_name #只有正在运行的服务可以使用重启命令,停止的服务是不可以重启。
删除停止的服务(服务里的容器)

[root@docker compose]# docker-compose rm
-f  #强制删除
-v  #删除与容器相关的卷(volumes)

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

[root@docker compose]# docker-compose run nginx ls /

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

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

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

[root@docker compose]# docker-compose scale nginx=2

注意:如果需要运行多个容器,容器名称就不要指定,会随机生成,还有注意端口映射问题,不要冲突(docker-compose port字段支持仅写一个容器暴露的端口)。
备注
docker-compose运行时是需要指定service名称,可以同时指定多个,也可以不指定。不指定时默认就是对配置文件中所有的service执行命令。

-f  #用于指定配置文件

-p  #用于指定项目名称
五、使用示例

1.搭建wordpress的博客

[root@docker compose]# vim docker-compose.yaml
version: "3.1"
services:
  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: 123.com
      WORDPRESS_DB_NAME: wordpress

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: 123.com
      MYSQL_ROOT_PASSWORD: 123.com

2.部署LNMP环境

version: "3"
services:
  nginx:
    container_name: nginx
    image: nginx
    restart: always
    ports:
      - 90:80
    volumes:
      - ./wwwroot/html:/usr/share/nginx/html
      - ./docker/nginx:/etc/nginx
  db:
    container_name: mysql
    image: mysql:5.7
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: nginx
      MYSQL_USER: nginx
      MYSQL_PASSWORD: 123.com
      MYSQL_ROOT_PASSWORD: 123.com
  php-fpm:
    container_name: php-fpm
    image: php:7.2-fpm
    restart: always
    ports:
      - 9000:9000
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: nginx
      WORDPRESS_DB_PASSWORD: 123.com
      WORDPRESS_DB_NAME: nginx
    volumes:
      - ./wwwroot/html:/usr/share/nginx/html

FROM php:7.2-fpm
RUN apt-get update && apt-get install -y \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype- dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install mysqli pdo pdo_mysql
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值