Docker容器学习与分享12

Docker多主机管理

之前在一台Centos7上安装了Docker,如果是在多台主机上都安装Docker,用手动安装的方法不光效率低下,而且有可能出错,所以可以使用Docker Machine进行多台主机的Docker安装和管理。
具体安装过程可以参照官方文档https://docs.docker.com/machine/install-machine/.
首先准备两台Centos7的虚拟机(一台IP为192.168.41.133,安装Docker Machine,另一台IP为192.168.41.135),在其中一台机器上安装Docker,安装过程可以参照分享01.
然后下载Docker Machine二进制文件并将其解压缩到PATH。

[[email protected] ~]# base=https://github.com/docker/machine/releases/download/v0.14.0 &&
>   curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
>   sudo install /tmp/docker-machine /usr/local/bin/docker-machine
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    583      0 --:--:--  0:00:01 --:--:--   584
100 26.7M  100 26.7M    0     0  1730k      0  0:00:15  0:00:15 --:--:-- 3488k

接着通过显示机器版本来检查安装:

[[email protected] ~]# docker-machine version
docker-machine version 0.14.0, build 89b8332

为了更好的体验接着安装bash完成脚本,将脚本保存到/etc/bash_completion.d/usr/local/etc/bash_completion.d

[[email protected] ~]# cd /etc/bash_completion.d
[[email protected] bash_completion.d]# base=https://raw.githubusercontent.com/docker/machine/v0.14.0
[[email protected] bash_completion.d]# for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.                                                                         bash
> do
>   sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
> done
--2018-07-11 01:47:47--  https://raw.githubusercontent.com/docker/machine/v0.14.0/contrib/completion/bash/docker-                                                                         machine-prompt.bash
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.40.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.40.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1469 (1.4K) [text/plain]
Saving to: ‘/etc/bash_completion.d/docker-machine-prompt.bash’

100%[=======================================================================>] 1,469       --.-K/s   in 0s

2018-07-11 01:47:48 (192 MB/s) - ‘/etc/bash_completion.d/docker-machine-prompt.bash’ saved [1469/1469]

--2018-07-11 01:47:48--  https://raw.githubusercontent.com/docker/machine/v0.14.0/contrib/completion/bash/docker-                                                                         machine-wrapper.bash
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.40.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.40.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1525 (1.5K) [text/plain]
Saving to: ‘/etc/bash_completion.d/docker-machine-wrapper.bash’

100%[=======================================================================>] 1,525       --.-K/s   in 0s

2018-07-11 01:47:50 (160 MB/s) - ‘/etc/bash_completion.d/docker-machine-wrapper.bash’ saved [1525/1525]

--2018-07-11 01:47:50--  https://raw.githubusercontent.com/docker/machine/v0.14.0/contrib/completion/bash/docker-                                                                         machine.bash
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.40.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.40.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12205 (12K) [text/plain]
Saving to: ‘/etc/bash_completion.d/docker-machine.bash’

100%[=======================================================================>] 12,205      --.-K/s   in 0.02s

2018-07-11 01:47:51 (489 KB/s) - ‘/etc/bash_completion.d/docker-machine.bash’ saved [12205/12205]

这样就下载好了脚本。
接着申明环境变量。

[[email protected] bash_completion.d]# source /etc/bash_completion.d/docker-machine-prompt.bash 

可以先使用docker-machine ls查看一下当前的machine.

[[email protected] ~]# docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS

因为还没有安装Docker所以使用这条命令什么都没有。
接着创建第一台机器,就是另外一台Centos虚拟机(IP:192.168.41.155).
1.首先需要让这两台Centos可以SSH免密登陆。

[[email protected] ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:T6qcnNvYwepsMhGfdvG/Gk+BtzVe2eCLiF0aMAI6wqc [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|    .            |
|.  . .           |
|..o.  . o     .  |
| .o..  ..o . . .o|
| E   o .So+ + +.o|
|    . +..*.* * + |
|     o .= *.+ o  |
|    o+.O . +.    |
|     =%.o ..o.   |
+----[SHA256]-----+
[[email protected] ~]# ssh-copy-id 192.168.41.135
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.41.135 (192.168.41.135)' can't be established.
ECDSA key fingerprint is SHA256:JqAC8jcLCLobvRy0wzY9VGBNuZU3EydpO8n2fEtQ178.
ECDSA key fingerprint is MD5:5d:26:a1:60:c3:eb:02:e9:97:7a:bb:7a:49:8a:14:0b.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.41.135'"
and check to make sure that only the key(s) you wanted were added.

2.创建第一个机器
使用docker-machine create命令,因为是Linux,所以driver就用generic,目标地址选项用--generic-ip-address

[[email protected] ~]# docker-machine create --driver generic --generic-ip-address=192.168.41.135 machine1
Creating CA: /root/.docker/machine/certs/ca.pem
Creating client certificate: /root/.docker/machine/certs/cert.pem
Running pre-create checks...
Creating machine...
(machine1) No SSH key specified. Assuming an existing key at the default location.
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with centos...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env machine1

现在到192.168.41.135上去验证。

[[email protected] ~]# docker version
Client:
Version:      18.05.0-ce
API version:  1.37
Go version:   go1.9.5
Git commit:   f150324
Built:        Wed May  9 22:14:54 2018
OS/Arch:      linux/amd64
Experimental: false
Orchestrator: swarm

Server:
Engine:
Version:      18.05.0-ce
API version:  1.37 (minimum version 1.12)
Go version:   go1.9.5
Git commit:   f150324
Built:        Wed May  9 22:18:36 2018
OS/Arch:      linux/amd64
Experimental: false

也可以在192.168.41.133上验证。

[[email protected] ~]# docker-machine ls
NAME       ACTIVE   DRIVER    STATE     URL                         SWARM   DOCKER        ERRORS
machine1   -        generic   Running   tcp://192.168.41.135:2376           v18.05.0-ce

发现安装完成。
接着我通过192.168.41.133这台主机来使用192.168.41.135主机上的Docker,首先查看访问machine所需要的环境变量。

[[email protected] ~]# docker-machine env machine1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.41.135:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/machine1"
export DOCKER_MACHINE_NAME="machine1"
# Run this command to configure your shell:
# eval $(docker-machine env machine1)

可以看到倒数第二行:运行此命令来配置你的shell
也就是指运行eval $(docker-machine env machine1)命令配置上面的环境变量进入machine1.
运行之后发现并无变化,是因为一开始我们没有配置shell提示.
接着启用docker-machineshell提示,添加 $(__docker_machine_ps1)到您的PS1设置中~/.bashrc

[[email protected] ~]# PS1='[\[email protected]\h \W$(__docker_machine_ps1)]\$ '
[[email protected] ~ [machine1]]#

这时发现shell变了,在当前状态下的所有docker操作都是运行在machine1上的,即192.168.41.135主机上。
如果要切回回来的环境使用unset命令,取消环境变量即可:

[[email protected] ~ [machine1]]# unset export DOCKER_TLS_VERIFY
[[email protected] ~ [machine1]]# unset DOCKER_HOST
[[email protected] ~ [machine1]]# unset DOCKER_CERT_PATH
[[email protected] ~ [machine1]]# unset DOCKER_MACHINE_NAME
[[email protected] ~]#

发现变回来了。
docker-machine的其他用法可以使用docker-machine --help命令来查看。

原文地址:https://www.cnblogs.com/Timesi/p/9310958.html

时间: 2024-10-14 00:35:13

Docker容器学习与分享12的相关文章

Docker容器学习与分享02

1.docker容器的创建 首先运行一个centos容器,感受一下Docker容器的便捷 首先先看一下镜像仓库 发现仓库里没有镜像,也就是没有创建容器的模板,这时考虑从REPOSITORY中拉取镜像(Docker分享01中提到REPOSITORY是用来存放镜像的仓库,而REPOSITORY仓库分为公有仓库(Docker Hub)和私有仓库,公有仓库即所有人都可以分享使用,而私有仓库是个人使用). 在公有仓库中搜索centos镜像 这时会列出所有的镜像,优先考虑官方镜像,然后将它拉取到本地. 这样

Docker容器学习与分享11

容器的数据存储 容器在删除之后,里面所有的数据都会丢失,如果其他程序需要用到某一部分的数据那就没办法了. 所以可以将容器内的数据存储到容器之外,比如存储到宿主机内.(Docker提供了好几种方法) 将容器内的数据存放到容器外可以通过将宿主机内的某个目录挂载给容器作为某一部分的存储空间使用. 先在/root目录下新建一个名为data的目录以供容器使用. [[email protected] ~]# mkdir data [[email protected] ~]# ls data 接着创建容器并将

Docker容器学习梳理--容器间网络通信设置(Pipework和Open vSwitch)

自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求.容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信.下面将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker.前面已经在Docker容器学习梳理--基础知识(2)这一篇中详细介绍了Docker的网络配置以及pipework工具. docker单主机容器通信 基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的

Docker容器学习梳理--容器登陆方法梳理(attach、exec、nsenter)

对于运行在后台的Docker容器,我们运维人员时常是有登陆进去的需求.登陆Docker容器的方式: 1)使用ssh登陆容器.这种方法需要在容器中启动sshd,存在开销和攻击面增大的问题.同时也违反了Docker所倡导的一个容器一个进程的原则. 参考Docker容器学习梳理--SSH方式登陆容器 2)使用自带命令docker attach登陆容器.命令格式:docker attach container_id.不过docker attach存在的问题是:当多个窗口同时attach到同一个容器时,所

Docker容器学习梳理--小知识点补充

之前已经梳理了Docker的相关使用事项,这里再补充一些,以便加深掌握程度.1)docker run指令 [[email protected] ~]# docker run --help : docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container -a, --attach=[] Attach to STDIN, STDOUT or STDERR --add-host=[] Add a custo

Docker容器学习整理

一.使用Docker镜像1.1 docker常用命令1.2 创建镜像1.3 存出和载入镜像1.4 上传镜像 二.操作docker容器2.1 创建容器2.2 终止容器2.3 进入容器2.4 删除容器2.5 导入和导出容器 三.访问Docker仓库 一.docker基本管理1.1 docker常用命令1.1.1 docker images # 列出本机已有镜像1.1.2 tag命令添加镜像标签1.1.3 docker inspect 查看镜像详细信息1.1.4 history 查看镜像历史1.1.5

docker容器学习一

Docker 学习一 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低. 适合运维工程师及后端开发人员,通过学习你可以一步一步了解 Docker 的使用. 在阅读前,你需要掌握 Linux 的常用命令.你

Docker容器学习--1

Docker是PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源.Docker是通过内核虚拟化技术(namespace以及cgroups等)来提供容器的资源隔离与安全保障.由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机( VM)额外的操作系统开销,提高资源利用率. 特点 1.更高效的利用系统资源 2.更快速的启动时间 3.一致的运行环境 4.更轻

Docker容器学习

Docker学习 docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 优点:1.提高效率,方便快捷(容器系统资源开销低) 2.沙箱机制,互不干扰 3.集群部署,负载均衡 Client docker CLI(命令行界面工具的客户端)-->REST API-->docker daemon(服务器,守护进程) swarm:docker容器的集群和调