docker-compose基本介绍

简介:docker-compose基本介绍

假设我们以dockerfile的形式部署一个wordpress应用,需要使用 docker build 一个nginx镜像,一个mysql镜像以及一个php环境的wordpress镜像,然后再启动三个镜像对应的容器。操作上及其的麻烦,而且三个dockerfile文件也不利于管理。

因此docker提供了另一种批量管理镜像的方式【docker-compose

docker-compose文件以 .yml 为后缀,文件名可以根据自己的喜好定义。docker-compose主要分为三部分:servicesnetworksvolumes

docker-compose文件的参数定义

1. 全局networks

如果两个容器之前的网络不在同一个网络桥段上时,无法相互访问。当然我们可以通过docker run --link 指定网络,那么在docker-compose如何定义网络呢?

networks就是解决两个容器间无法直接访问的问题,network下面定义网络相关的信息,包括名称及使用哪个网卡,具体格式如下:

networks:
  my_bridge:
    driver: bridge

my_bride:是自定义的网络名称,后面用于容器指定网络

2. 全局volumes

volumes主要就是定义数据持久化的本地目录。其作用等同于 docker run -d -v 本地目录:docker容器的目录 中的本地目录。其格式如下:

volumes:
    my_volume:
        driver: local  
        driver_opts:  
            type: none  
            device: /data
            o: bind  

my_volume:是我们自定义的持久化名称

my_volume.driver:同步的驱动类型。local表示本地驱动

myvolume.driver_opts:传递给驱动的选项。例如,type: none表示无类型,device: /data表示宿主机的路径为/data,o: bind表示以bind模式挂载

如果驱动及宿主机路径为当前路径可以直接省略后面,格式如下:

volumes:
    my_volume:

3. services

services主要定义容器列表,services下面的都是容器,容器下面可以定义容器的别名以及镜像等。

services下的每一个service都是一个容器,service的启动类似 docker run ,我们可以给其指定network和volume。

具体格式如下:

services:
  nginx:
    container_name: likeadmin-nginx
    image: nginx:1.23.1
    restart: always
    volumes:
      - ./config/nginx/conf.d:/etc/nginx/conf.d
      - ./log/nginx/logs:/logs
    networks:
      - likeadmin
    ports:
      - "80:80"

3.1 service定义容器的别名

通过container_name定义容器的别名。类似于 docker run --name 设置的容器别名

services:
  nginx:
    container_name: likeadmin-nginx

3.2 定义容器基础镜像

通过image定义容器的基础镜像,这个镜像可以是 dockerhub上面的镜像,也可以是本地build出来的镜像。类似于dockerfile中的FROM的作用

services:
  nginx:
    image: nginx:1.23.1

3.3 设置容器同步目录或者说共享目录

在service中通过volumes设置同步目录。其实就是之前文章中提到的bind mounting方式数据持久化的参数

services:
  nginx:
    image: nginx:1.23.1
    volumes:
      - ./config/nginx/conf.d:/etc/nginx/conf.d
      - ./log/nginx/logs:/logs

本地同步可以在全局的volumes中定义,在某个服务中可以直接使用全局volumes定义的别名代替。具体格式如下:

services:
  nginx:
    image: nginx:1.23.1
    volumes:
      - my_volume:/etc/nginx/conf.d

3.4 设置当前容器的网络

在service中,可以同过networks定义网络,具体格式如下:

services:
  nginx:
    image: nginx:1.23.1
    networks:
      - likeadmin

注意:这里的likeadmin是全局networks定义的网络别名

3.5 设置环境变量

在部署wordpress时需要部署MySQL服务容器,而MySQL服务容器需要设置root账号密码,数据库等环境变量已启动MySQL容器。在 docker-compose 中可以在 environment 来定义环境变量,具体格式如下:

services:
  mysql:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress

4. docker-compose 命令

4.1 启动某个docker-compose文定义的所有容器

这个命令一般用于初始化某个docker-compose服务,初始化时会创建docker-compose配置相关的网络以及容器等

docker-compose up -f docker-compose.yml

注意:如果docker-compose的配置文件名就是 docker-compose.yml 时可以忽略 -f ,直接使用 docker-compose up 即可

docker-compose up 命令启动不能退出,退出可以使用 ctrl+c 退出。如果想要通过后台启动,可以使用 -d 实现

4.2 关闭所有docker-compose相关的容器

docker-compose stop

4.3 重启所有docker-compose相关的容器

docker-compose start

4.4 删除docker-compose配置的所有容器以及网络

docker-compose down

注意:这个命令只会删除容器及网络,容器使用到的镜像不会删除

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1