容器技术|Docker三剑客之docker-compose

行是知之始,知是行之成。这篇文章主要讲述容器技术|Docker三剑客之docker-compose相关的知识,希望能为你提供帮助。


三剑客简介docker-machine
docker技术是基于Linux内核的cgroup技术实现的,那么问题来了,在非Linux平台上是否就不能使用docker技术了呢?答案是可以的,不过显然需要借助虚拟机去模拟出Linux环境来。
docker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术,甚至可以通过指定driver来定制虚拟机的实现原理(一般是virtualbox)。
docker-compose
docker镜像在创建之后,往往需要自己手动pull来获取镜像,然后执行run命令来运行。当服务需要用到多种容器,容器之间又产生了各种依赖和连接的时候,部署一个服务的手动操作是令人感到十分厌烦的。
dcoker-compose技术,就是通过一个.yml配置文件,将所有的容器的部署方法、文件映射、容器连接等等一系列的配置写在一个配置文件里,最后只需要执行docker-compose up命令就会像执行脚本一样的去一个个安装容器并自动部署他们,极大的便利了复杂服务的部署。
docker-swarm
swarm是基于docker平台实现的集群技术,他可以通过几条简单的指令快速的创建一个docker集群,接着在集群的共享网络上部署应用,最终实现分布式的服务。
docker-compose 的工作流程
使用Compose仅需要三步:



1、用一个定义你的应用程序的环境,Dockerfile这样它就可以在任何地方再现。
2、定义组成您的应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
3、运行docker-compose up和撰写启动并运行您的整个应用程序。


?参考文章:??https://docs.docker.com/compose/overview/???
docker-compose安装布署
[root@docker ~]# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
% Total% Received % XferdAverage SpeedTimeTimeTimeCurrent
DloadUploadTotalSpentLeftSpeed
1006170617003960 --:--:--0:00:01 --:--:--397
100 10.3M100 10.3M00678k00:00:150:00:15 --:--:-- 1876k
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
[root@docker ~]# docker-compose --version
docker-compose version 1.21.2, build a133471

docker-compose管理命令介绍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

Options:
-f, --file FILESpecify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAMESpecify an alternate project name
(default: directory name)
--verboseShow more output
--log-level LEVELSet log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansiDo not print ANSI control characters
-v, --versionPrint version and exit
-H, --host HOSTDaemon socket to connect to

--tlsUse TLS; implied by --tlsverify
--tlscacert CA_PATHTrust certs signed only by this CA
--tlscert CLIENT_CERT_PATHPath to TLS certificate file
--tlskey TLS_KEY_PATHPath to TLS key file
--tlsverifyUse TLS and verify the remote
--skip-hostname-checkDont check the daemons hostname against the
name specified in the client certificate
--project-directory PATHSpecify an alternate working directory
(default: the path of the Compose file)
--compatibilityIf set, Compose will attempt to convert deploy
keys in v3 files to their non-Swarm equivalent

Commands:
buildBuild or rebuild services
bundleGenerate a Docker bundle from the Compose file
configValidate and view the Compose file
createCreate services
downStop and remove containers, networks, images, and volumes
eventsReceive real time events from containers
execExecute a command in a running container
helpGet help on a command
imagesList images
killKill containers
logsView output from containers
pausePause services
portPrint the public port for a port binding
psList containers
pullPull service images
pushPush service images
restartRestart services
rmRemove stopped containers
runRun a one-off command
scaleSet number of containers for a service
startStart services
stopStop services
topDisplay the running processes
unpauseUnpause services
upCreate and start containers
versionShow the Docker-Compose version information

?docker-compose 运行时是需要指定service名称,?可以同时指定多个,也可以不指定。不指定时默认就是对配置文件中所有的service执行命令。


-f #用于指定配置文件
-p #用于指定项目名称


?docker-compose build ?
用来创建或重新创建服务使用的镜像
docker-compose build service_a
创建一个镜像名叫service_a
?docker-compose kill?
用于通过容器发送SIGKILL信号强行停止服务
?docker-compose logs?
显示service的日志信息
?docker-compose pause/unpause?
docker-compose pause #暂停服务
docker-compose unpause #恢复被暂停的服务
?docker-compose port?
用于查看服务中的端口与物理机的映射关系
docker-compose port nginx_web 80
查看服务中80端口映射到物理机上的那个端口
?dokcer-compose ps?
用于显示当前项目下的容器
注意,此命令与docker ps不同作用,此命令会显示停止后的容器(状态为Exited),只征对某个项目。
?docker-compose pull?
用于拉取服务依赖的镜像
?docker-compose restart?
用于重启某个服务中的所有容器
docker-compose restart service_name
只有正在运行的服务可以使用重启命令,停止的服务是不可以重启
?docker-compose rm?
删除停止的服务(服务里的容器)


-f #强制删除
-v #删除与容器相关的卷(volumes)


?docker-compose run?
用于在服务中运行一个一次性的命令。这个命令会新建一个容器,它的配置和srvice的配置相同。
但两者之间还是有两点不同之处


1、run指定的命令会直接覆盖掉service配置中指定的命令
2、run命令启动的容器不会创建在service配置中指定的端口,如果需要指定使用–service-ports指定


?docker-compose start/stop?
docker-compose start 启动运行某个服务的所有容器
docker-compose stop 启动运行某个服务的所有容器
【容器技术|Docker三剑客之docker-compose】?docker-compose scale?
指定某个服务启动的容器个数
[root@docker ~]# docker-compose scale --help
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...]

Options:
-t, --timeout TIMEOUTSpecify a shutdown timeout in seconds.
(default: 10)

docker-compose配置文件实例一个docker-compose.yml的实例文件如下
version: "3"
services:
nginx:
container_name: web-nginx
image: nginx:latest
restart: always
ports:
- 80:80
volumes:
- ./webserver:/webserver
- ./nginx/nginx.conf:/etc/nginx/nginx.conf

?下面将配置文件做个简单的解释说明?
docker-compose的配置文件是一个.yml格式的文件
第一部分
version: "3"#指定语法的版本
第二部分
services:#定义服务
nginx:#服务的名称,-p参数后接服务名称
container_name: web-nginx#容器的名称
image: nginx:latest#镜像
restart: always
ports:#端口映射
- 80:80
第三部分
volumes:#物理机与容器的磁盘映射关系
- ./webserver:/webserver
- ./nginx/nginx.conf:/etc/nginx/nginx.conf

?整体的目录结构如下?
[root@docker docker]# tree ./
./
├── docker-compose.yml
├── nginx
│?? └── nginx.conf
└── webserver
└── index.html

2 directories, 3 files

?配置文件如下?
[root@docker docker]# cat webserver/index.html
welcome to nginx server!!!!!!!!!
[root@docker docker]# cat nginx/nginx.conf
#usernginx;
worker_processes1;
error_log/var/log/nginx/error.log warn;
pid/var/run/nginx.pid;

events
worker_connections1024;


http
include/etc/nginx/mime.types;
default_typeapplication/octet-stream;

log_formatmain$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.logmain;
client_max_body_size 10m;
sendfileon;
#tcp_nopushon;

keepalive_timeout65;

#gzipon;

server
listen80;
server_namelocalhost;

location /
root/webserver;
indexindex.html index.htm;



include /etc/nginx/conf.d/*.conf;

?使用命令启动容器?
[root@docker docker]# docker-compose up -d
Pulling nginx (nginx:1.14)...
Trying to pull repository docker.io/library/nginx ...
1.14: Pulling from docker.io/library

    推荐阅读