赞
踩
在 docker - 部署一个复杂的springboot服务 该文中,我们部署了一个“复杂”的springboot服务,实现了一个计数服务。通过这次部署操作,我们了解到部署多容器的APP至少需要经过以下几个步骤:
(1)写Dockerfile构建镜像或者从docker registry中拉取镜像
(2)构建多个容器
(3)管理这些容器(启动、停止等)
可见,如果APP涉及到的容器很多,要管理这些容器是比较复杂的,至少命令行敲到想哭。那么,有没有一个工具,帮我们批处理这些容器呢?
docker-compose是docker公司推出的一个服务编排工具,换句话说就是一个批处理容器的工具。该工具可以通过yml文件定义多容器的应用,并创建和管理这些容器。
参考 《docker-compose 安装方法》 https://blog.csdn.net/whatday/article/details/103050054
docker-compose.yml是compose的默认的脚本名字,在执行compose命令构建的时候,如果不指定文件名,将会默认使用docker-compose.yml文件,和Dockerfile文件类似。
docker-compose.yml是有版本的,现在最新版本是v3版本,v1版本不推荐使用,v2和v3是可兼容的,而且区别不是很大。这里需要提到一点区别,v2只能用于多个容器部署在一个宿主主机,而v3可以集群方式部署在多个宿主主机(swarm)。另外,不同的compose文件版本对docker的版本是有要求的。如果有兴趣,可以在docker的官网中详细了解,版本间的区别链接的地址。我们采用官方推荐的v3版本学习docker-compose。
在compose中,主要有四个基本节点: version、services、networks、volumes。是不是很熟悉,其实compose就是使用脚本方式代替我们之前通过命令行启动每个服务。下面是一个基本的compose脚本。
- version: '3'
-
- services:
- springboot-docker:
- image: myimage:1.0
- build:
- context: .
- dockerfile: Dockerfile
- ports:
- - 8080:8080
- networks:
- - mybridge
- volumes:
- - mydata:/app
-
- networks:
- mybridge:
- driver: bridge
-
- volumes:
- mydata:
本文将通过一个简单的 docker-compose 文件,熟悉常用的docker-compose命令。docker-compose.yml文件存放在dockercompose文件夹中。
- version: '3'
-
- services:
-
- busybox:
- image: busybox
- restart: always
- command: /bin/echo
- redis:
- image: redis:4.0.11
- ports:
- - 6379:6379
- volumes:
- - /data/redis:/data
- restart: always
- command: redis-server
我们查看 docker-compose 有多少种命令,有个大概的了解。docker-compose命令即可查看。
[root@localhost dockercompose]# docker-compose
- 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 deploy
- keys in v3 files to their non-Swarm equivalent
-
- Commands:
- build Build or rebuild services
- bundle Generate a Docker bundle from the Compose file
- 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
这里的选项中有两个是常用的:-f 和 -p
-f :指定文件。在运行up命令启动容器时,如果没有指定docker-compose.yml文件,将会读取当前目录下的docker-compose.yml文件
-p:启动后的服务的名字默认情况下采用compose.yml文件所在的目录+服务名+副本数命名,例如上面的例子的名字为: dockercompose_redis_1 。如果指定-p,则会用项目名代替该文件目录名。
下面开始介绍一些常用的docker-compose命令。
docker-compose create | 创建所有的服务 |
docker-compose start | 启动被停止或未启动的服务 |
docker-compose up | 创建所有服务并且启动服务,即同时执行了create和start命令 |
docker-compose stop | 停止所有服务 |
docker-compose kill | 强行停止所有服务 |
docker-compose rm | 删除停止的服务 |
docker-compose restart | 重启所有服务) |
docker-compose down | 停止、删除所有的服务以及网络、镜像 |
其中,up命令启动所有的服务时,如果没有使用-d命令,会在前台启动所有的服务,前台窗口将打印服务的启动日志。建议通过 -d 启动。例如通过up启动上面的redis服务。
- [root@localhost dockercompose]# docker-compose up -d
- Creating network "dockercompose_default" with the default driver
然后可以通过 docker-compose logs -f 获取输出的日志
该命令可以查看容器列表,可以获取到容器的简单信息。
- [root@localhost dockercompose]# docker-compose ps
- Name Command State Ports
- -----------------------------------------------------------------------------------------
- dockercompose_busybox_1 /bin/echo Up
- dockercompose_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
-
上面的信息可以得到容器名、启动命令、容器状态以及端口的映射情况。
该命令用于扩展容器,为service设置多个容器(副本)。我们为上面的busybox服务扩展为2个副本。
- [root@localhost dockercompose]# docker-compose scale busybox=2
-
- WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.
- Starting dockercompose_busybox_1 ... done
- Creating dockercompose_busybox_2 ... done
稍等一下,通过ps命令可以看到已经启动了两个busybox服务。
前面的输出中,提示该命令已经过期,使用--scale选项指定副本。
我们down了服务后,重新使用up命令并指定副本数
[root@localhost dockercompose]# docker-compose up -d --scale busybox=2
- [root@localhost dockercompose]# docker-compose ps
- Name Command State Ports
- ----------------------------------------------------------------------------------------------
- dockercompose_busybox_1 /bin/echo Restarting
- dockercompose_busybox_2 /bin/echo Restarting
- dockercompose_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。