Docker 三剑客包括Docker Machine、Docker Compose、Docker Swarm。
1. Docker Machine
1.1 简介
Docker Machine 是 Docker 官方三剑客项目之一,使用它可以在多个平台上快速安装部署Docker环境,还可以在短时间内快速构建起一套Docker主机集群。
Docker Machine 是Docker公司开发的,用于在各种平台上快速创建具有 Docker服务的虚拟机,甚至可以通过指定 driver 来定制虚拟机。
1.2 Docker 与 Docker Machine 的区别
Docker 是一个Client-Server 架构的应用,是 Docker Engine的简称。
Docker 包括以下三部分:
(1)Docker daemon
(2)一套与 Docker daemon 交互的 RESTful API
(3)一个命令行客户端
Docker Machine 是安装和管理Docker的工具,其命令行工具为 docker-machine。
1.3 安装 Docker Machine
下载链接:Releases · docker/machine (github.com)
[root@zy-host ~]# curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 32.6M 100 32.6M 0 0 44230 0 0:12:53 0:12:53 --:--:-- 1989k
[root@zy-host ~]# chmod +x /tmp/docker-machine
[root@zy-host ~]# cp /tmp/docker-machine /usr/local/bin/docker-machine
[root@zy-host ~]# docker-machine -v
docker-machine version 0.16.2, build bd45ab13
1.4 Docker Machine 命令详解
(1)docker-machine active:显示当前的活动主机
(2)docker-machine config:显示连接主机的配置
(3)docker-machine create:创建一个主机
(4)docker-machine env:设置当前的环境与哪个主机通信
(5)docker-machine inspect:查看主机的详细信息
(6)docker-machine ip:查看主机的IP
(7)docker-machine kill:强制关闭一个主机
(8)docker-machine ls:查看所有主机信息
(9)docker-machine provision:重新配置现有主机
(10)docker-machine regenerate-certs:为主机重新生成证书
(11)docker-machine restart:重启主机
(12)docker-machine rm:删除主机
(13)docker-machine ssh:以SSH的方式连接到主机上
(14)docker-machine scp:远程复制
(15)docker-machine status:查看主机的状态
(16)docker-machine stop:停止一个正在运行的主机
(17)docker-machine upgrade:升级主机的Docker服务到最新版本
(18)docker-machine version:查看Docker Machine版本
1.5 Docker Machine 命令实例操作
[root@zy-host ~]# docker-machine create -d virtualbox testhost
[root@zy-host ~]# docker-machine create --driver virtualbox testhost
会提示错误,需要手工安装VirtualBox驱动。
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
安装VirtualBox驱动:
(1)配置Yum源
[root@zy-host ~]# vim /etc/yum.repos.d/virtualbox.repo
[virtualbox]
name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
(2)查看可安装版本
[root@zy-host ~]# yum search VirtualBox
Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Loading mirror speeds from cached hostfile
============================================================================= N/S matched: VirtualBox ==============================================================================
VirtualBox-4.3.x86_64 : Oracle VM VirtualBox
VirtualBox-5.0.x86_64 : Oracle VM VirtualBox
VirtualBox-5.1.x86_64 : Oracle VM VirtualBox
VirtualBox-5.2.x86_64 : Oracle VM VirtualBox
VirtualBox-6.0.x86_64 : Oracle VM VirtualBox
VirtualBox-6.1.x86_64 : Oracle VM VirtualBox
VirtualBox-7.0.x86_64 : Oracle VM VirtualBox
(3)安装最新版本
[root@zy-host ~]# yum install -y VirtualBox-7.0
(4)加载 VirtualBox 服务
[root@zy-host ~]# /sbin/vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
重新安装VirtualBox主机:
[root@zy-host ~]# docker-machine create --driver virtualbox testhost
Running pre-create checks...
Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"
这里的错误是因为没有开启虚拟化功能,下面直接打开
[root@zy-host ~]# docker-machine create --driver virtualbox default
Running pre-create checks...
Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"
因为现在我用的服务器是阿里云ECS 共享型,所以这已经是一个虚拟机,VM是不支持虚拟机嵌套虚拟机的。
这里目前没法往下进行...
2. Docker Compose
2.1 简介
Docker Compose 是 Docker 官方的编排工具通过它可以编写一个模板文件,然后通过这个模板文件快速构建和管理基于Docker容器的集群。
在创建Docker镜像之后,往往需要通过手动pull来获取镜像,然后执行 run 命令来运行。当服务器需要用到多种容器,容器之间又产生了各种依赖和连接的时候,部署一个服务的手动操作是非常繁琐的。
Docker Compose 技术,就是通过一个.yml 配置文件,将所有容器的部署方法、文件映射、容器连接等一系列的配置写在一个配置文件里,将所有容器的部署方法、文件映射、容器连接等一系列的配置写在一个配置文件里,最后只需要执行 docker-compose up 命令,就像执行脚本一样,去一个个安装容器并部署他们。
2.2 Docker Compose 的工作流程
Compose 是一个用户定义和运行多个容器的 Docker 应用程序。在Compose 中可以使用 YAML 语法来配置应用服务,然后使用命令即可创建并启动配置的所有服务。使用 Compose 仅需以下三步:
(1)在 Dockerfile 里定义应用程序的环境,这样它就可以在任何地方再现。
(2)在 docker-compose.yml 里定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。
(3)执行 docker-compose up 命令,Compose 启动并运行整个应用程序。
2.3 Docker Compose 的部署
两种下载方式:
(1)curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
(2)curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose(GitHub比较慢,用的这个)
[root@zy-host ~]# sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/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 423 100 423 0 0 513 0 --:--:-- --:--:-- --:--:-- 513
100 16.2M 100 16.2M 0 0 10.5M 0 0:00:01 0:00:01 --:--:-- 113M
[root@zy-host ~]# chmod +x /usr/local/bin/docker-compose
[root@zy-host ~]# docker-compose --version
docker-compose version 1.25.1, build a82fef07
2.4 Docker Compose 常用命令
Compose 具有管理应用程序整个生命周期的命令,可以使用 docker-compose --help查看具体信息:
Docker Compose运行时需要知道 service 名称,可以同时指定多个,也可以不指定。不指定时,默认是对配置文件中所有的 service 执行命令,常用参数如下:
-f:用于指定配置文件
-p:用于指定项目名称
[root@zy-host ~]# 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
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
(1)docker-compose build
功能:创建或重新创建服务使用的镜像
docker-compose build service_a
#创建一个名为 service_a的镜像
(2)docker-compose kill
功能:通过容器发送 SIGKILL 信号强行停止服务
(3)docker-compose logs
功能:显示 service 的日志信息
(4)docker-compose pause/unpause
用于暂停或者恢复被暂停的服务
(5)docker-compose port
功能:查看服务中的端口与物理机的映射关系
#查看服务中的80端口映射到物理机的哪个端口
docker-compose port nginx_web 80
(6)docker-compose ps
功能:显示当前项目下的容器
注意:此命令与 docker ps 命令作用不同,此命令会显示停止后的容器,只针对某个项目。
(7)docker-compose pull
功能:拉取服务依赖的镜像
(8)docker-compose restart
功能:重启某个服务中的所有容器
docker-compose restart service_name
注意:只有正在运行的服务可以使用重启命令,停止的服务不可以重启。
(9)docker-compose rm
功能:删除停止的服务(服务里的容器)
常用参数:
-f:强制删除
-v:删除与容器相关的卷
(10)docker-compose run
功能:在服务中运行一个一次性的命令。这个命令会新建一个容器,它的配置和service的配置相同。
注意:
(1)run 指定的命令会直接覆盖掉 service配置中指定的命令
(2)run命令启动的容器不会创建在service配置中指定的端口,如果需要,可以使用 --service-ports 指定。
(11)docker-compose start/stop
用于 启动/停止 运行某个服务的所有容器
(12)docker-compose scale
功能:指定某个服务启动的容器个数
2.5 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
整个配置文件包括三部分,分别如下:
第一部分:
指定语法的版本
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@zy-host docker]# tree ./
./
├── docker-compose.yml
├── nginx
│ └── nginx.conf
└── webserver
└── index.html
2.6 运行 Docker Compose 配置文件
制作好 Docker Compose 配置文件之后,使用命令来启动与运行配置文件中定义的服务:
[root@localhost docker]# docker-compose up -d
Creating network "docker_default" with the default driver
Pulling nginx (nginx:latest)...
Trying to pull repository docker.io/library/nginx ...
latest: Pulling from docker.io/library/nginx
3f4ca61aafcd: Pull complete
50c68654b16f: Pull complete
3ed295c083ec: Pull complete
40b838968eea: Pull complete
88d3ab68332d: Pull complete
5f63362a3fa3: Pull complete
Digest: sha256:0047b729188a15da49380d9506d65959cce6d40291ccfb4e039f5dc7efd33286
Status: Downloaded newer image for docker.io/nginx:latest
Creating web-nginx ... done
[root@localhost docker]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 5344 root 4u IPv6 66074 0t0 TCP *:http (LISTEN)
[root@localhost docker]# docker ps |grep nginx
42f0d26bdb9d nginx:latest "/docker-entrypoin..." About a minute ago Up About a minute 0.0.0.0:80->80/tcp web-nginx
3. Docker Swarm
(待补充)