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

Posted 民工哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器技术|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 % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 617 0 617 0 0 396 0 --:--:-- 0:00:01 --:--:-- 397
100 10.3M 100 10.3M 0 0 678k 0 0:00:15 0: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 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 Dont check the daemons 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

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-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 TIMEOUT Specify 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
#user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events
worker_connections 1024;


http
include /etc/nginx/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;
client_max_body_size 10m;
sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

server
listen 80;
server_name localhost;

location /
root /webserver;
index index.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容器技术|Docker三剑客之docker-compose

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

24.Docker技术入门与实战 --- Docker三剑客之Compose

Docker:Docker 三剑客之 Docker Compose

DockerCAdvisor+InfluxDB+Granfana容器监控

企业运维容器之 docker 三剑客swarm