博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker-compose初试及命令基础
阅读量:5775 次
发布时间:2019-06-18

本文共 16056 字,大约阅读时间需要 53 分钟。

转自: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 
...] [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 upCreating lnmp_php_1 ... Creating lnmp_db_1 ... Creating lnmp_db_1Creating lnmp_php_1 ... doneCreating 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/tcplnmp_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/tcplnmp_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 --helpList 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 -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMESa5747e115947        nginx               "/usr/local/nginx/..."   6 minutes ago       Up 6 minutes        0.0.0.0:80->80/tcp       lnmp_nginx_1508ac0a6890c        php                 "/usr/local/php/sb..."   6 minutes ago       Up 6 minutes        9000/tcp                 lnmp_php_1aaa3cc6f1040        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 --servicesphpnginxdb
[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:rwversion: '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 downStopping lnmp_nginx_1 ... doneStopping lnmp_db_1    ... doneStopping lnmp_php_1   ... doneRemoving lnmp_nginx_1 ... doneRemoving lnmp_db_1    ... doneRemoving lnmp_php_1   ... doneRemoving network lnmp_default[root@docker lnmp]# docker-compose -f lnmp.yaml ps  Name   Command   State   Ports------------------------------[root@docker lnmp]# docker ps -aCONTAINER 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:/binHOSTNAME=aaa3cc6f1040TERM=xtermMYSQL_ROOT_PASSWORD=redhatMYSQL_PASSWORD=wordpressMYSQL_USER=wordpressMYSQL_DATABASE=wordpressGOSU_VERSION=1.7MYSQL_MAJOR=5.7MYSQL_VERSION=5.7.20-1debian8HOME=/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 MBlnmp_nginx_1   nginx        latest   c3babfeba09b   551 MBlnmp_php_1     php          latest   8902ce599658   1 GB

参数-q:列出镜像的id

[root@docker lnmp]# docker-compose -f lnmp.yaml images -q5709795eeffac51eca46cf40ab36669aad27e8cb4b0e91876d5e9f7bafad6acbc3babfeba09bab70a8e3b7e8d734ee274af4a02ed8b9b4d286cd58caf64dbdc58902ce599658633ee95e270843b37daabe2e0dc298861ac8c25f5f7e11a7de1e

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" dbAttaching to lnmp_db_1db_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 eventsdb_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 tablesdb_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 --helpPause services.Usage: pause [SERVICE...]

将db这个service进行暂停:

[root@docker lnmp]# docker-compose -f lnmp.yaml pause dbPausing 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/tcplnmp_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 dbUnpausing 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/tcplnmp_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_PORTOptions:    --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 33060.0.0.0:3306

restart:重启service:

restart            Restart services
[root@docker ~]# docker-compose restart --helpRestart 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 nginxRestarting 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/tcplnmp_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 --helpRemoves stopped service containers.By default, anonymous volumes attached to containers will not be removed. Youcan 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 rmNo stopped containers

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

[root@docker lnmp]# docker-compose -f lnmp.yaml rm -s dbStopping lnmp_db_1 ... doneGoing to remove lnmp_db_1Are you sure? [yN]

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

run:运行一次性命令

run                Run a one-off command
[root@docker ~]# docker-compose run --helpRun 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 --helpSet 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=3This command is deprecated. Use the up command with the `--scale` flaginstead.Usage: scale [options] [SERVICE=NUM...]
[root@docker lnmp]# docker-compose -f lnmp.yaml scale nginx=2WARNING: 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 dbStopping lnmp_db_1 ... done[root@docker lnmp]# docker-compose -f lnmp.yaml start dbStarting db ... done

top:显示运行的进程

top                Display the running processes
[root@docker lnmp]# docker-compose -f lnmp.yaml toplnmp_db_1  UID       PID    PPID    C   STIME   TTY     TIME      CMD  --------------------------------------------------------------systemd+   38246   38223   7   23:27   ?     00:00:00   mysqldlnmp_nginx_1UID     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_1UID     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 nginxlnmp_nginx_1UID     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 versiondocker-compose version 1.17.0, build ac53b73docker-py version: 2.5.1CPython version: 2.7.13OpenSSL version: OpenSSL 1.0.1t  3 May 2016

 

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

转载于:https://www.cnblogs.com/maohuidong/p/9914801.html

你可能感兴趣的文章
CentOS7下安装python-pip
查看>>
认知计算 Cognitive Computing
查看>>
左手坐标系和右手坐标系 ZZ
查看>>
陀螺仪主要性能指标
查看>>
Linux 目录结构和常用命令
查看>>
Linux内存管理之mmap详解 (可用于android底层内存调试)
查看>>
Android开发中ViewStub的应用方法
查看>>
gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法...
查看>>
遍历Map的四种方法
查看>>
Altium Designer 小记
查看>>
【Linux高级驱动】I2C驱动框架分析
查看>>
赵雅智:js知识点汇总
查看>>
二维有序数组查找数字
查看>>
20个Linux服务器性能调优技巧
查看>>
填坑记:Uncaught RangeError: Maximum call stack size exceeded
查看>>
SpringCloud之消息总线(Spring Cloud Bus)(八)
查看>>
DLA实现跨地域、跨实例的多AnalyticDB读写访问
查看>>
实时编辑
查看>>
KVO原理分析及使用进阶
查看>>
【348天】每日项目总结系列086(2018.01.19)
查看>>