docker_docker-compose

docker-compose

介绍

之前已经介绍过如何使用docker命令部署一个博客系统,这个过程两次使用docker命令启动container并且启动过程中有各种参数;如果系统足够庞大的话这种方式对container管理起来会非常不方便,有没有更方便的方式对系统进行管理呢?

docker compose就是解决这个问题的一个批处理工具。
docker compose通过一个yml文件docker-compose.yml文件管理多个container。docker-compose.yml到目前有三个版本,下面学习使用版本3.
  docker-compose三大核心:service network volume
  1.   service中包含多个container
  2.   networks中定义container的连接方式
  3.   volumes中定义container数据持久化的地址信息

安装

官方安装文档:https://docs.docker.com/compose/install;官网有详细的安装命令
下面是我在本地的安装记录
1、下载文件:sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2、添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
3、docker-compose加入环境变量
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4、检查是否安装成功
docker-compose --version

docker-compose定义文件

下面是将博客系统使用docker-compose文件的方式进行定义,文件内有详细的说明;这样一个文件就能定义多个container并且管理他们之间的关系

#docker compose 的版本
version: '3'
#定义一个container组
services:
  #定义我们的workpress container
  #docker run -d -e WORDPRESS_DB_HOST=mysql:3306
  #--link mysql -p 8080:80 wordpress
  wordpress:
    #他对应的image 从docker hup中拉去
    #image如果需要本地构建这里将image去掉
    #换成如下:
    #build:
      #dockerfile所在目录
      #context: .
      #dockerfile的名字
      #dockerfile: Dockerfile
    image: wordpress
    container_name: wordpress
    #映射端口
    ports:
      - 8080:80
    #连接mysql容器
    links:
      - mysql
    #传入的参数
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    #网络连接方式
    networks:
      #网络连接方式的名称 在下面的networks中具体定义
      - my-bridge
  #定义我们的mysql container  
  #docker run -d  --name=mysql -v /home/zyz/mysqldata:/var/lib/mysql
  #-e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql:5.7
  mysql:
    #镜像名称
    image: mysql:5.7
    container_name: mysql
    #参数定义
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    #数据持久化映射
    volumes:
      #由下面的volumes中具体定义
      #可以直接指定地址,本例中采用系统默认
      #- 本地地址:/opt/src
      - mysql-data:/var/lib/mysql
    #网络连接方式
    networks:
      - my-bridge

volumes:
  mysql-data:

networks:
  #对应上面的 - my-bridge
  my-bridge:
    #连接方式为桥接
    driver: bridge

docker-compose操作

上面docker-compose.yml已经定义好博客系统相关信息,可以使用docker-compose相关命令启动系统。下面是启动docker-compose.yml文件中定义的资源

docker-compose启动资源

-f参数指定docker-compose资源定义的文件名    -up参数表示启动docker-compose.yml定义的相关资源    -d参数表示后台启动

[root@k8s-01 ~]# docker-compose -f docker-compose.yml up -d
Creating mysql ... done
Creating wordpress ... done

注意:命令的顺序,up放在-f前会报错;-d参数必须在up的后面

docker-compose查询命令

查询宿主机上通过docker-compose启动的service

[root@k8s-01 ~]# docker-compose ps 
  Name                 Command               State          Ports        
-------------------------------------------------------------------------
mysql       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp 
wordpress   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp

 docker-compose停止服务

如果不指定-f参数stop会停止宿主机上所有docker-compose启动的服务

[root@k8s-01 ~]# docker-compose ps
  Name                 Command               State          Ports        
-------------------------------------------------------------------------
mysql       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp 
wordpress   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp
[root@k8s-01 ~]# docker ps|egrep "mysql|wordpress"
06785de77d64        wordpress                                           "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       0.0.0.0:8080->80/tcp   wordpress
176a1af6e67e        mysql:5.7                                           "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       3306/tcp, 33060/tcp    mysql
[root@k8s-01 ~]# docker-compose  -f   docker-compose.yml  stop
Stopping wordpress ... done
Stopping mysql     ... done
[root@k8s-01 ~]# docker-compose ps                            
  Name                 Command               State    Ports
-----------------------------------------------------------
mysql       docker-entrypoint.sh mysqld      Exit 0        
wordpress   docker-entrypoint.sh apach ...   Exit 0        
[root@k8s-01 ~]# docker ps|egrep "mysql|wordpress"            
[root@k8s-01 ~]# docker ps -a|egrep "mysql|wordpress"
06785de77d64        wordpress                                           "docker-entrypoint.s…"   12 minutes ago      Exited (0) 25 seconds ago                       wordpress
176a1af6e67e        mysql:5.7                                           "docker-entrypoint.s…"   12 minutes ago      Exited (0) 23 seconds ago                       mysql
[root@k8s-01 ~]# 

docker-compose删除服务

down参数会将-f参数指定文件下的所有资源删除,不指定-f参数会删除本机上所有docker-compose资源

[root@k8s-01 ~]# docker-compose  -f   docker-compose.yml  down
Removing wordpress ... done
Removing mysql     ... done
Removing network root_my-bridge
[root@k8s-01 ~]# docker-compose ps -a                            
Name   Command   State   Ports
------------------------------
[root@k8s-01 ~]# docker ps -a|egrep "mysql|wordpress"         
[root@k8s-01 ~]# 

 

 

 

 

posted @ 2021-09-24 23:26  flag_HW  阅读(114)  评论(0编辑  收藏  举报