zoukankan      html  css  js  c++  java
  • docker-compose初试及命令基础

    转自:https://www.cnblogs.com/jsonhc/p/7811929.html

    以一个简单的lnmp.yaml的配置文件进行讲解docker-compose命令的基础讲解,熟练掌握命令

    复制代码
    [root@docker lnmp]# cat lnmp.yaml 
    version: '3'
    services:
      nginx:
        image: nginx
        ports:
          - "80:80"
        links:
          - php:php
        volumes:
          - "/www:/usr/local/nginx/html"
      php:
        image: php
        expose:
          - "9000"
        volumes:
          - "/www:/usr/local/nginx/html"
      db:
        image: mysql
        ports:
          - "3306:3306"
        environment:
          MYSQL_ROOT_PASSWORD: redhat
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress
          MYSQL_PASSWORD: wordpress
    复制代码

    上面配置文件的关于编写的参数暂时不进行讲解,这里只进行关于docker-compose的命令

    [root@docker ~]# docker-compose --help     
    Define and run multi-container applications with Docker.
    
    Usage:
      docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
      docker-compose -h|--help

    看用法的定义就是利用docker定义和运行多个容器应用

    Options:
      -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)
      -p, --project-name NAME     Specify an alternate project name (default: directory name)

    默认如果没有指定具体的compose配置文件,那么就docker-compose.yml,并且如果不指定项目名称,默认就是文件夹的name

    up                 Create and start containers

    现在利用command中的up进行创建并启动容器(多个容器,安装配置文件中,至于顺序现在不讲解)

    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml up
    Creating lnmp_php_1 ... 
    Creating lnmp_db_1 ... 
    Creating lnmp_db_1
    Creating lnmp_php_1 ... done
    Creating lnmp_nginx_1 ... 
    Creating lnmp_db_1 ... done
    复制代码

    后面的一大堆输出,这里不进行全部显示了,创建并启动好了容器后,如何查看运行的状态呢?

    ps                 List containers
    [root@docker lnmp]# docker-compose ps          
    Name   Command   State   Ports
    ------------------------------

    为什么这里没有显示呢?因为配置文件名称不是docker-compose.yml,所以在执行一系列命令时需要加上-f lnmp.yaml

    [root@docker lnmp]# docker-compose -f lnmp.yaml ps
        Name                  Command               State           Ports         
    ------------------------------------------------------------------------------
    lnmp_db_1      docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp
    lnmp_nginx_1   /usr/local/nginx/sbin/ngin ...   Up      0.0.0.0:80->80/tcp    
    lnmp_php_1     /usr/local/php/sbin/php-fpm      Up      9000/tcp  

    由于配置文件lnmp.yaml在当前目录,这里可以进行绝对路径:

    [root@docker lnmp]# docker-compose -f /root/compose_project/lnmp/lnmp.yaml  ps
        Name                  Command               State           Ports         
    ------------------------------------------------------------------------------
    lnmp_db_1      docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp
    lnmp_nginx_1   /usr/local/nginx/sbin/ngin ...   Up      0.0.0.0:80->80/tcp    
    lnmp_php_1     /usr/local/php/sbin/php-fpm      Up      9000/tcp

    由上面可以看出将所有的容器都显示出来,如何指定显出某一个容器呢?

    [root@docker ~]# docker-compose ps --help
    List containers.
    
    Usage: ps [options] [SERVICE...]

    一般的command命令都可以带上SERVICE,这里的service是什么呢?就是配置文件中定义的services服务,配置文件中定义了三个:nginx、php、db(不能写错service名称)

    [root@docker lnmp]# docker-compose -f /root/compose_project/lnmp/lnmp.yaml  ps nginx
        Name                  Command               State         Ports       
    --------------------------------------------------------------------------
    lnmp_nginx_1   /usr/local/nginx/sbin/ngin ...   Up      0.0.0.0:80->80/tcp

    name这一列代表的是容器名称,而不是service名称

    [root@docker lnmp]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    a5747e115947        nginx               "/usr/local/nginx/..."   6 minutes ago       Up 6 minutes        0.0.0.0:80->80/tcp       lnmp_nginx_1
    508ac0a6890c        php                 "/usr/local/php/sb..."   6 minutes ago       Up 6 minutes        9000/tcp                 lnmp_php_1
    aaa3cc6f1040        mysql               "docker-entrypoint..."   6 minutes ago       Up 6 minutes        0.0.0.0:3306->3306/tcp   lnmp_db_1

    name的组成由project+service组成(后面的_1本人认为是构建的次数,第一次构建up就代表1吧)

    If you change a service’s Dockerfile or the contents of its build directory, run docker-compose build to rebuild it.
    docker-compose up --build或者docker-compose build

    config:

    config             Validate and view the Compose file

    利用config命令可以打印处配置文件的内容和service名称以及volumes信息

    [root@docker lnmp]# docker-compose -f /root/compose_project/lnmp/lnmp.yaml config --services
    php
    nginx
    db
    复制代码
    [root@docker lnmp]# docker-compose -f /root/compose_project/lnmp/lnmp.yaml config 
    services:
      db:
        environment:
          MYSQL_DATABASE: wordpress
          MYSQL_PASSWORD: wordpress
          MYSQL_ROOT_PASSWORD: redhat
          MYSQL_USER: wordpress
        image: mysql
        ports:
        - 3306:3306/tcp
      nginx:
        image: nginx
        links:
        - php:php
        ports:
        - 80:80/tcp
        volumes:
        - /www:/usr/local/nginx/html:rw
      php:
        expose:
        - '9000'
        image: php
        volumes:
        - /www:/usr/local/nginx/html:rw
    version: '3.0'
    复制代码
    [root@docker lnmp]# docker-compose -f /root/compose_project/lnmp/lnmp.yaml config --volumes

    down:停止并删除容器、网络、镜像、数据卷

    down               Stop and remove containers, networks, images, and volumes
    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml down
    Stopping lnmp_nginx_1 ... done
    Stopping lnmp_db_1    ... done
    Stopping lnmp_php_1   ... done
    Removing lnmp_nginx_1 ... done
    Removing lnmp_db_1    ... done
    Removing lnmp_php_1   ... done
    Removing network lnmp_default
    [root@docker lnmp]# docker-compose -f lnmp.yaml ps  
    Name   Command   State   Ports
    ------------------------------
    [root@docker lnmp]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    复制代码

    down也带有其他的参数:

    复制代码
    Options:
        --rmi type          Remove images. Type must be one of:
                            'all': Remove all images used by any service.
                            'local': Remove only images that don't have a custom tag
                            set by the `image` field.
        -v, --volumes       Remove named volumes declared in the `volumes` section
                            of the Compose file and anonymous volumes
                            attached to containers.
        --remove-orphans    Remove containers for services not defined in the
                            Compose file
    复制代码

    exec:在运行的容器中执行命令:

    exec               Execute a command in a running container
    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml exec db env   
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=aaa3cc6f1040
    TERM=xterm
    MYSQL_ROOT_PASSWORD=redhat
    MYSQL_PASSWORD=wordpress
    MYSQL_USER=wordpress
    MYSQL_DATABASE=wordpress
    GOSU_VERSION=1.7
    MYSQL_MAJOR=5.7
    MYSQL_VERSION=5.7.20-1debian8
    HOME=/root
    复制代码

    db是指定了在哪一个service中执行env命令

    images:列出镜像

    [root@docker lnmp]# docker-compose -f lnmp.yaml images
     Container     Repository    Tag       Image Id      Size 
    ----------------------------------------------------------
    lnmp_db_1      mysql        latest   5709795eeffa   389 MB
    lnmp_nginx_1   nginx        latest   c3babfeba09b   551 MB
    lnmp_php_1     php          latest   8902ce599658   1 GB  

    参数-q:列出镜像的id

    [root@docker lnmp]# docker-compose -f lnmp.yaml images -q
    5709795eeffac51eca46cf40ab36669aad27e8cb4b0e91876d5e9f7bafad6acb
    c3babfeba09bab70a8e3b7e8d734ee274af4a02ed8b9b4d286cd58caf64dbdc5
    8902ce599658633ee95e270843b37daabe2e0dc298861ac8c25f5f7e11a7de1e

    kill:杀死容器

    kill               Kill containers
    复制代码
    [root@docker ~]# docker-compose kill --help  
    Force stop service containers.
    
    Usage: kill [options] [SERVICE...]
    
    Options:
        -s SIGNAL         SIGNAL to send to the container.
                          Default signal is SIGKILL.
    复制代码

    可以看见后面也可以指定哪一个service

    logs:将容器中的日志进行输出

    logs               View output from containers
    复制代码
    [root@docker ~]# docker-compose logs --help 
    View output from containers.
    
    Usage: logs [options] [SERVICE...]
    
    Options:
        --no-color          Produce monochrome output.
        -f, --follow        Follow log output.
        -t, --timestamps    Show timestamps.
        --tail="all"        Number of lines to show from the end of the logs
                            for each container.
    复制代码

    将db的日志输出最后的10行:

    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml logs -t --tail db      
    ERROR: tail flag must be all or a number
    [root@docker lnmp]# docker-compose -f lnmp.yaml logs -t --tail="10" db
    Attaching to lnmp_db_1
    db_1     | 2017-11-09T14:48:24.618652188Z 2017-11-09T14:48:24.618090Z 0 [Warning] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
    db_1     | 2017-11-09T14:48:24.618654153Z 2017-11-09T14:48:24.618104Z 0 [Warning] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
    db_1     | 2017-11-09T14:48:24.621872173Z 2017-11-09T14:48:24.620524Z 0 [Warning] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
    db_1     | 2017-11-09T14:48:24.621897721Z 2017-11-09T14:48:24.620616Z 0 [Warning] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
    db_1     | 2017-11-09T14:48:24.658532597Z 2017-11-09T14:48:24.658110Z 0 [Note] Event Scheduler: Loaded 0 events
    db_1     | 2017-11-09T14:48:24.660827605Z 2017-11-09T14:48:24.658335Z 0 [Note] mysqld: ready for connections.
    db_1     | 2017-11-09T14:48:24.660852816Z Version: '5.7.20'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
    db_1     | 2017-11-09T14:48:24.660857339Z 2017-11-09T14:48:24.658347Z 0 [Note] Executing 'SELECT * FROM INFORMATION_SCHEMA.TABLES;' to get a list of tables using the deprecated partition engine. You may use the startup option '--disable-partition-engine-check' to skip this check. 
    db_1     | 2017-11-09T14:48:24.660861018Z 2017-11-09T14:48:24.658349Z 0 [Note] Beginning of list of non-natively partitioned tables
    db_1     | 2017-11-09T14:48:24.679766350Z 2017-11-09T14:48:24.679398Z 0 [Note] End of list of non-natively partitioned tables
    复制代码

    pause:暂停service:

    pause              Pause services
    [root@docker ~]# docker-compose pause --help
    Pause services.
    
    Usage: pause [SERVICE...]

    将db这个service进行暂停:

    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml pause db
    Pausing lnmp_db_1 ... done
    [root@docker lnmp]# docker-compose -f lnmp.yaml ps
        Name                  Command               State            Ports         
    -------------------------------------------------------------------------------
    lnmp_db_1      docker-entrypoint.sh mysqld      Paused   0.0.0.0:3306->3306/tcp
    lnmp_nginx_1   /usr/local/nginx/sbin/ngin ...   Up       0.0.0.0:80->80/tcp    
    lnmp_php_1     /usr/local/php/sbin/php-fpm      Up       9000/tcp 
    复制代码

    unpause:将暂停的service进行恢复:

    unpause            Unpause services
    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml unpause db
    Unpausing lnmp_db_1 ... done
    [root@docker lnmp]# docker-compose -f lnmp.yaml ps
        Name                  Command               State           Ports         
    ------------------------------------------------------------------------------
    lnmp_db_1      docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp
    lnmp_nginx_1   /usr/local/nginx/sbin/ngin ...   Up      0.0.0.0:80->80/tcp    
    lnmp_php_1     /usr/local/php/sbin/php-fpm      Up      9000/tcp 
    复制代码

    port:查看端口映射信息:

    port               Print the public port for a port binding
    复制代码
    [root@docker ~]# docker-compose port --help 
    Print the public port for a port binding.
    
    Usage: port [options] SERVICE PRIVATE_PORT
    
    Options:
        --protocol=proto  tcp or udp [default: tcp]
        --index=index     index of the container if there are multiple
                          instances of a service [default: 1]
    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml port db 3306
    0.0.0.0:3306

    restart:重启service:

    restart            Restart services
    复制代码
    [root@docker ~]# docker-compose restart --help
    Restart running containers.
    
    Usage: restart [options] [SERVICE...]
    
    Options:
      -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.
                                 (default: 10)
    复制代码

    将nginx这个service进行重启:

    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml restart nginx
    Restarting lnmp_nginx_1 ... done
    [root@docker lnmp]# docker-compose -f lnmp.yaml ps
        Name                  Command               State           Ports         
    ------------------------------------------------------------------------------
    lnmp_db_1      docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp
    lnmp_nginx_1   /usr/local/nginx/sbin/ngin ...   Up      0.0.0.0:80->80/tcp    
    lnmp_php_1     /usr/local/php/sbin/php-fpm      Up      9000/tcp 
    复制代码

    rm:删除已经停止的服务容器,没有停止删除不了

    rm                 Remove stopped containers
    复制代码
    [root@docker ~]# docker-compose rm --help
    Removes stopped service containers.
    
    By default, anonymous volumes attached to containers will not be removed. You
    can override this with `-v`. To list all volumes, use `docker volume ls`.
    
    Any data which is not in a volume will be lost.
    
    Usage: rm [options] [SERVICE...]
    
    Options:
        -f, --force   Don't ask to confirm removal
        -s, --stop    Stop the containers, if required, before removing
        -v            Remove any anonymous volumes attached to containers
        -a, --all     Deprecated - no effect.
    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml rm
    No stopped containers

    如果加上-s/--stop那么就会先将服务进行停止,然后询问你是否删除:

    [root@docker lnmp]# docker-compose -f lnmp.yaml rm -s db
    Stopping lnmp_db_1 ... done
    Going to remove lnmp_db_1
    Are you sure? [yN] 

    -f:代表在删除的过程中不会询问你是否删除,而是直接进行删除

    run:运行一次性命令

    run                Run a one-off command
    [root@docker ~]# docker-compose run --help
    Run a one-off command on a service.
    
    For example:
    
        $ docker-compose run web python manage.py shell

    scale:扩展容器,为service设置多个容器:

    scale              Set number of containers for a service
    复制代码
    [root@docker ~]# docker-compose scale --help
    Set number of containers to run for a service.
    
    Numbers are specified in the form `service=num` as arguments.
    For example:
    
        $ docker-compose scale web=2 worker=3
    
    This command is deprecated. Use the up command with the `--scale` flag
    instead.
    
    Usage: scale [options] [SERVICE=NUM...]
    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml scale nginx=2
    WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.

    而且在创建多个容器时需要考虑端口及ip的监听状况(占用的情况)

    start              Start services

    stop               Stop services

    [root@docker lnmp]# docker-compose -f lnmp.yaml stop db
    Stopping lnmp_db_1 ... done
    [root@docker lnmp]# docker-compose -f lnmp.yaml start db
    Starting db ... done

    top:显示运行的进程

    top                Display the running processes
    复制代码
    [root@docker lnmp]# docker-compose -f lnmp.yaml top
    lnmp_db_1
      UID       PID    PPID    C   STIME   TTY     TIME      CMD  
    --------------------------------------------------------------
    systemd+   38246   38223   7   23:27   ?     00:00:00   mysqld
    
    lnmp_nginx_1
    UID     PID    PPID    C   STIME   TTY     TIME                                   CMD                               
    --------------------------------------------------------------------------------------------------------------------
    root   38367   38352   1   23:27   ?     00:00:00   nginx: master process /usr/local/nginx/sbin/nginx -g daemon off;
    www    38421   38367   0   23:27   ?     00:00:00   nginx: worker process                                           
    
    lnmp_php_1
    UID     PID    PPID    C   STIME   TTY     TIME                                CMD                           
    -------------------------------------------------------------------------------------------------------------
    root   38208   38186   0   23:27   ?     00:00:00   php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
    www    38307   38208   0   23:27   ?     00:00:00   php-fpm: pool www                                        
    www    38308   38208   0   23:27   ?     00:00:00   php-fpm: pool www  
    复制代码

    指定某一个service:

    [root@docker lnmp]# docker-compose -f lnmp.yaml top nginx
    lnmp_nginx_1
    UID     PID    PPID    C   STIME   TTY     TIME                                   CMD                               
    --------------------------------------------------------------------------------------------------------------------
    root   38367   38352   0   23:27   ?     00:00:00   nginx: master process /usr/local/nginx/sbin/nginx -g daemon off;
    www    38421   38367   0   23:27   ?     00:00:00   nginx: worker process 

    version:显示docker-compose的版本信息:

    version            Show the Docker-Compose version information
    [root@docker lnmp]# docker-compose -f lnmp.yaml version
    docker-compose version 1.17.0, build ac53b73
    docker-py version: 2.5.1
    CPython version: 2.7.13
    OpenSSL version: OpenSSL 1.0.1t  3 May 2016

    docker-compose命令运行的级别在service层,而如果需要对容器进行修改等操作还是运行docker命令方便

  • 相关阅读:
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark RDD(Resilient Distributed Datasets)论文
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    【机器学习实战】第10章 K-Means(K-均值)聚类算法
    [译]flexbox全揭秘
  • 原文地址:https://www.cnblogs.com/maohuidong/p/9914801.html
Copyright © 2011-2022 走看看