概述
这是一个Kubernetes系列文章,主要将我所学过,所使用过的经验、使用方法等记录在此。将会持续更新。
好了,docker容器运行起来就万事大吉了吗,就可以高枕无忧了 吗。答案当然是不会。
随着一台机器上需要启动的docker容器越来越多,管理这些docker,成了一件非常不容易的事情。
你可能会想,一台机器上一个docker,为神马要越来越多?
现实往往和理想是相反的,一台服务器的费用已经是有些昂贵了,并不是所有公司都可以自建机房的,所以,资源的规划与分配,这也是一项艺术。现在,将注意力集中到docker-compose上来。
刚才说过,一台机器上的docker容器越来越多的时候,管理和分配资源也会非常麻烦。这时候,docker-compose闪亮登场。
介绍
docker-compose的定义是[定义和运行多个Docker容器的应用],其前身是开源项目Fig。
compose只需要编写一次yaml文件,即可在其他任何机器上运行相同的容器配置,甚至可以根据自己需要,进行资源划分和配置。
compose中有两个概念:
- 服务(servie):一个应用的容器
- 项目(project):由一组相关联的服务组成的一个完整单元
compose项目由python语言编写。实际上是在启动时是调用了Docker服务所提供的API来进行管理的。所以,只要在迁移或部署的平台上支持Docker,就可以使用compose来进行编排管理。
安装与使用
安装
compose的安装非常方便,可以使用pip进行安装,也可以使用二进制文件,当然也可以运行在docker容器中。这里选择使用最简单的二进制文件安装:
[root@localhost bin]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 423 100 423 0 0 143 0 0:00:02 0:00:02 --:--:-- 143
100 16.7M 100 16.7M 0 0 996k 0 0:00:17 0:00:17 --:--:-- 1641k
[root@localhost bin]# chmod +x docker-compose
[root@localhost bin]# ln -s /usr/local/bin/docker-compose /usr/bin/
[root@localhost bin]# docker-compose --version
docker-compose version 1.25.5, build 8a1c60f6
卸载
卸载方式也非常简单,由于二进制安装就是一个可执行文件,直接删除掉/usr/local/bin/docker-compose文件即可,有链接到/use/bin/docker-compose的话,先删除/use/bin/docker-compose然后删除/usr/local/bin/docker-compose。
使用
首先,我们需要一个或多个镜像,镜像可以是自己编写Dockerfile打包的,也可以是官方的。如果镜像本地不存在,那么就会到官方镜像库里去pull下来。创建一个名为:docker-compose.yml的文件,内容示例:
[root@localhost src]# cat docker-compose.yml version: '3.3' --版本,参考官方给出的版本号 services: --固定格式,这个模块下为所有的服务 nginx: --指定服务的名称,可以自定义 image: nginx --指定要使用的镜像,本地不存在会自动pull container_name: nginxd --指定容器名,和docker run --name同理 restart: always --是否失败重启 volumes: --数据卷挂载相关 - type: bind --指定为bind类型,将外部文件挂载进容器中 source: ./nginx.conf target: /etc/nginx/nginx.conf deploy: resources: --指定系统资源控制 limits: cpus: '0.5' --限定CPU,可以是0.1-你机器的核心数 memory: 512M --限定内存使用 ports: --指定端口映射 - 80:80 networks: --指定要使用的网络,可以是默认,也可以自定义 - my-net tomcat: image: tomcat container_name: tomcatd restart: always networks: my-net: dns_search: . ports: - 8080:8080 depends_on: --指定tomcat依赖于nginx - nginx networks: my-net: external: false [root@localhost src]# [root@localhost src]# cat nginx.conf user nginx; worker_processes 2; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; gzip on; server { listen 80; server_name _; location / { proxy_pass http://172.16.150.133:8080/docker/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } [root@localhost src]# [root@localhost src]# docker-compose --compatibility up -d Restarting tomcatd ... done Restarting nginxd ... done [root@localhost src]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78234df645db tomcat "catalina.sh run" 21 minutes ago Up 2 seconds 0.0.0.0:8080->8080/tcp tomcatd 9b89e12e1705 nginx "/docker-entrypoint.…" 21 minutes ago Up 2 seconds 0.0.0.0:80->80/tcp nginxd
注意:docker-compose里有个networks的模块,这个my-net的网络需要提前创建好。这里由于有资源控制模块,并且没有以swarm启动,所以docker-compose up -d 命令会报错,需要加一个–compatibility参数
我在tomcat的webapps下创建了一个叫做docker的目录,里面放了一个html文件。
访问http://你的IP即可访问到这个项目。
compose命令
我们可以使用docker-compose --help来查看所有命令:
[root@localhost src]# docker-compose --help Define and run multi-container applications with Docker. Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose -h|--help 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) --verbose Show more output --log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) --no-ansi Do not print ANSI control characters -v, --version Print version and exit -H, --host HOST Daemon socket to connect to --tls Use TLS; implied by --tlsverify --tlscacert CA_PATH Trust certs signed only by this CA --tlscert CLIENT_CERT_PATH Path to TLS certificate file --tlskey TLS_KEY_PATH Path to TLS key file --tlsverify Use TLS and verify the remote --skip-hostname-check Don't check the daemon's hostname against the name specified in the client certificate --project-directory PATH Specify an alternate working directory (default: the path of the Compose file) --compatibility If set, Compose will attempt to convert keys in v3 files to their non-Swarm equivalent --env-file PATH Specify an alternate environment file Commands: build Build or rebuild services config Validate and view the Compose file create Create services down Stop and remove containers, networks, images, and volumes events Receive real time events from containers exec Execute a command in a running container help Get help on a command images List images kill Kill containers logs View output from containers pause Pause services port Print the public port for a port binding ps List containers pull Pull service images push Push service images restart Restart services rm Remove stopped containers run Run a one-off command scale Set number of containers for a service start Start services stop Stop services top Display the running processes unpause Unpause services up Create and start containers version Show the Docker-Compose version information [root@localhost src]#
下面来说说几个比较常用的命令及参数:
- -f:指定docker-compose的启动文件,默认为docker-compose.yml文件
- -p:指定项目名称,默认将所在目录名作为项目名
- –verbose:查看更多的输出
- -v:显示版本
具体常用命令: - up -d:该操作包含了两个指令:create、start
- restart:重启compose内的所有容器
- stop:停止compose内的所有容器
- rm:删除compose内的所有容器
- ps:查看compose容器的状态
总结
以上,就是docker-compose的所有内容了,关于Swarm、图形化监控等内容,在接下来的文章中写出。




