Docker 三剑客

news2024/9/28 17:32:20

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

(待补充)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最近手头有点紧,于是用Python来冲一波股票...

文章目录前言准备工作获取数据部分爬虫的基本流程代码展示数据可视化分析最后前言 快过年了&#xff0c;手头有点紧&#xff0c;但是作为一个男人&#xff0c;身上怎么能够没有大把钞票呢&#xff1f; 于是我决定用Python来分析一波股票&#xff0c;赢了会所嫩*&#xff0c;输…

在线设计邀请函

不用ps就能制作邀请函的工具&#xff01;在线就能搞定你的邀请函设计和链接分享&#xff01;只要跟着小编下面的设计步骤&#xff0c;掌握在线工具乔拓云轻松设计在线邀请函&#xff0c;在线一键就能生成活动邀请函和邀请函链接&#xff0c;下面就跟着小编的教学开始学习如何在…

【力扣经典题目】复制带随机指针的链表,穿插链表法

题目描述&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的…

接口的理解

文章目录一、接口匿名实现类、匿名对象练习1练习2JDK8接口的新特性一、接口 1、接口使用interface定义 2、Java中接口和类是并列结构 3、如何定义接口——定义接口中的成员 JDK7之前&#xff1a;只能定义全局常量和抽象方法 全局常量&#xff1a;public static final的&#x…

力扣 2042. 检查句子中的数字是否递增

题目 句子是由若干 token 组成的一个列表&#xff0c;token 间用 单个 空格分隔&#xff0c;句子没有前导或尾随空格。每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 &#xff0c;要么是一个由小写英文字母组成的 单词 。 示例&#xff0c;“a puppy has 2 eye…

【MySQL】-【索引】

目录为什么使用索引InnoDB中索引的推演索引前的查找设计索引简单的索引设计方案InnoDB中的索引方案为什么使用索引 一、hashmap底层使用红黑树 二、索引时在存储引擎中实现的&#xff0c;因此不同存储引擎的索引可能不同 索引的优点&#xff1a; 类似大学图书馆建书目索引&am…

zookeeper看这一篇就够了

第一章 zookeeper简介 第1节 zookeeper的由来 1 2 3 41. zookeeper最早起源于雅虎研究院的一个研究小组 2. 在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,并且这个系统还有单点问题 3. 雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架…

GIS应用技巧之矢量数据编辑

挺多时候&#xff0c;需要对矢量数据进行编辑&#xff0c;那么如何编辑&#xff1f; 在ArcGIS中修改数据&#xff0c;首先要开始编辑&#xff0c;启动编辑工具条&#xff08;Editor&#xff09;。 目前编辑器处于灰色状态说明没有启动&#xff0c;那么还有些小伙伴可能在GIS主…

【项目实战】传智健康

&#x1f31f;个人博客&#xff1a;www.hellocode.top&#x1f31f; &#x1f31f;Java知识导航&#xff1a;Java-Navigate&#x1f31f; ⭐想获得更好的阅读体验请前往Java-Navigate &#x1f525;本文专栏&#xff1a;《流行框架》 &#x1f31e;如没有JavaWEB基础&#xff0…

Wireshark抓Telnet包及报文分析

Wireshark抓Telnet包及报文分析 Telnet作为应用层第二大协议&#xff0c;用途很多滴。 Telnet到底是个啥子 TELNET协议一种简单的基于文本的协议&#xff0c;它可以用来实现远程终端&#xff0c;让用户可以远程对服务器进行操作。尽管现在的远程终端基本上是基于 ssh 的了&am…

GO语言定时任务实战-gocron包

文章目录1. 基本使用1.1 初始化实例 new()1.2 添加定时任务 AddFunc()1.3 开始定时任务 Start()1.4 完整示例1.5 第一次执行定时任务的契机1.6 spec 的设置2. 粒度到秒2.1 语法示例2.2 完整示例3. 按时间间隔3.1 语法3.2 完整示例&#xff08;every&#xff09;3.3 完整示例引用…

AcWing 4721. 排队(单调栈+二分法)

问题描述 n 个小朋友排成一排&#xff0c;从左到右依次编号为 1∼n。 第 i 个小朋友的身高为 hi。 虽然队伍已经排好&#xff0c;但是小朋友们对此并不完全满意。 对于一个小朋友来说&#xff0c;如果存在其他小朋友身高比他更矮&#xff0c;却站在他右侧的情况&#xff0c…

【闲聊杂谈】纤程的概念

首先要明白几个概念&#xff1a;程序、进程、线程、纤程。 如果要非常严格的定义上来说的话&#xff0c;进程是操作系统用来做资源调度的基本单位。后来发现进程的切换是在的太费资源了&#xff0c;于是诞生了线程&#xff1b;线程多了来回切换还是很费资源&#xff0c;于是又…

[Linux]Linux项目自动化构建工具-make/Makefile

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【LINUX】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文…

FX5U-相对定位指令DRVI(DDRVI )两种写法

该指令通过增量方式(采用相对地址的位置指定)&#xff0c;进行1速定位。 以当前停止的位置作为起点&#xff0c;指定移动方向和移动量(相对地址)进行定位动作。如果驱动触点置为ON,则输出脉冲&#xff0c;并开始从偏置速度进行加速动作。到达指令速度后&#xff0c;以指令速度进…

【LeetCode】N皇后-回溯

N皇后-回溯N皇后题目示例分析代码N皇后II题目示例分析代码总结N皇后 题目 LeetCode 51.N皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间…

第二篇 - Vue 的初始化流程

一&#xff0c;前言 上篇&#xff0c;使用 rollup 完成了 Vue2 源码环境的搭建 本篇&#xff0c;介绍 Vue 的初始化流程 二&#xff0c;Vue 简介 以两个概念性问题做简单介绍 1&#xff0c;问题&#xff1a;Vue 是 MVVM 框架吗&#xff1f; 在 Vue 官网上是这样说的&#…

LeetCode450之删除二叉搜索树中的节点(相关话题:二叉搜索树,删除)

题目描述 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除节点可分为两个步骤&#x…

VS封装C++项目以及属性配置

目录 1. 封装单个项目 1.1 封装 新建C空项目&#xff0c;将需要封装的源文件(eval.cpp)和 头文件(eval.h)复制过来&#xff0c;并对它们做如下修改&#xff1a; 注&#xff1a;如果有多个头文件和源文件&#xff0c;只对可供外部调用的文件及其内部的函数作下面的处理 分别…

1.c++环境配置及第一个环境运行

开发IDE与环境 最好是使用ubuntu系统进行开发&#xff0c;如果没有的话&#xff0c;基于windows使用vs code 进行ssh连接到远程的ubuntu主机进行开发也可以。开发的过程跟本地差不多。 vs code IDE 插件的安装 1.变成中文菜单与提示,安装MS-CEINTL.vscode-language-pack-zh-…