企业运维容器 docker 三剑客machine

Posted 123坤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了企业运维容器 docker 三剑客machine相关的知识,希望对你有一定的参考价值。

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

1. Docker Machine 介绍

  • Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
  • Docker Machine支持在常规Linux操作系统、虚拟化平台、openstack、公有云等不同环境下安装配置docker host。
  • Docker Machine 项目基于 Go 语言实现,目前在 Github 上的维护地址: https://github.com/docker/machine/

2. Docker Machine 实践

可以从 https://github.com/docker/machine/releases/download/ 下载,Docker Machine二进制脚本,然后将其移至环境变量中,给其执行权限;

[root@server1 ~]# ls
base-debian10.tar  docker                              harbor-offline-installer-v1.10.1.tgz
convoy             docker-machine-Linux-x86_64-0.16.1  rhel7.tar
convoy.tar.gz      harbor
[root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/docker-machine
[root@server1 ~]# chmod +x /usr/local/bin/docker-machine
[root@server1 ~]# docker-machine --help	##查看帮助
Usage: docker-machine [OPTIONS] COMMAND [arg...]

Create and manage machines running Docker.

Version: 0.16.1, build cce350d7

创建machine:
machine指的是docker daemon主机,其实就是在host上安装和部署docker。
创建machine要求免密登陆远程主机:
#ssh-keygen
#ssh-copy-id 目标ip,当有解析时也可以指定主机名;

新开虚拟机,来部署 docker 查看其效果;

先做免密认证;

[root@server1 ~]# ssh-keygen  ##生成私钥和公钥
[root@server1 ~]# ssh-copy-id server3	##将公钥移至server3上

从帮助中可以看到,其执行的过程是在当前主机上连接 https://get.docker.com/ 来进行下载脚本;
由于在部署时该结点不能联网,在宿主机中下载执行的脚本并配置 docker 软件仓库;让虚拟机连接宿主机来完成部署。

[root@foundation15 ~]# cd /var/www/html/
[root@foundation15 html]# ls
docker-ce  openstack  rhel7.6  rhel8.2  upload_file.php
[root@foundation15 html]# curl -fsSL https://get.docker.com -o get-docker.sh		##下载脚本
[root@foundation15 html]# ls
docker-ce  get-docker.sh  openstack  rhel7.6  rhel8.2  upload_file.php
[root@foundation15 html]# vim get-docker.sh 


431                         yum_repo="http://172.25.15.250/docker-ce.repo"
	##指定安装路径和安装版本

492                                 if [ -n "$cli_pkg_version" ]; then
493                                         $sh_c "$pkg_manager install -y -q docker-ce-cli-19.03.15-    3.el7"
494                                 fi
495                                 $sh_c "$pkg_manager install -y -q docker-ce-19.03.15-3.el7"
	##指定安装的版本
496                                 # shellcheck disable=SC2031
497                                 #if [ -n "$has_rootless_extras" ]; then
498                                 #       $sh_c "$pkg_manager install -y -q docker-ce-rootless-extr    as$pkg_version"
499                                 #fi
	##由于下载的不是最新版,此时需要将最新版的配置信息注释掉
	
[root@foundation15 html]# vim docker-ce.repo
[root@foundation15 html]# cat docker-ce.repo
[docker]
name=docker-ce
baseurl=http://172.25.15.250/docker-ce
gpgcheck=0

创建主机:(离线安装需要在目标主机提前安装好docker软件包)
开安部署:

[root@server1 ~]# docker-machine create -d generic --generic-ip-address 172.25.15.3 --engine-install-url "http://172.25.15.250/get-docker.sh" server3

在执行的过程中会比较慢,此时可以被执行的主机中查看进程:

[root@server3 ~]# ps ax

 4072 pts/1    R+     0:12 /usr/bin/python /usr/bin/yum install -y -q d

[root@server3 ~]# docker info
 ## 完成之后查看部署的 docker 信息,也可以查看其复制过来的软件库信息和证书等相关信息。
 [root@server1 server3]# pwd
/root/.docker/machine/machines/server3
[root@server1 server3]# ls
ca.pem  cert.pem  config.json  key.pem  server-key.pem  server.pem
[root@server3 ~]# cd /etc/docker/
[root@server3 docker]# ls
ca.pem  key.json  server-key.pem  server.pem
[root@server3 docker]# systemctl status docker
[root@server3 docker]# cat /etc/systemd/system/docker.service.d/10-machine.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver overlay2 --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic 
Environment=

machine 所在主机上查看其常用命令:

[root@server1 ~]# docker-machine env server3
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://172.25.15.3:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/server3"
export DOCKER_MACHINE_NAME="server3"
# Run this command to configure your shell: 
# eval $(docker-machine env server3)
[root@server1 ~]# docker-machine ls
	##显示当前 docker 安装的引擎
NAME      ACTIVE   DRIVER    STATE     URL                      SWARM   DOCKER      ERRORS
server3   -        generic   Running   tcp://172.25.15.3:2376           v19.03.15  

控制容器:

[root@server1 ~]# docker-machine env server3
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://172.25.15.3:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/server3"
export DOCKER_MACHINE_NAME="server3"
# Run this command to configure your shell: 
# eval $(docker-machine env server3)
[root@server1 ~]# eval $(docker-machine env server3)
[root@server1 ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@server1 ~]# export
declare -x DOCKER_CERT_PATH="/root/.docker/machine/machines/server3"
declare -x DOCKER_HOST="tcp://172.25.15.3:2376"
declare -x DOCKER_MACHINE_NAME="server3"
declare -x DOCKER_TLS_VERIFY="1"

配置 bash 环境变量,下载环境变量:

[root@server1 ~]# yum install -y bash-*
[root@server1 ~]# cd /etc/bash_completion.d/
[root@server1 bash_completion.d]# ls
docker-machine.bash          rhn-migrate-classic-to-rhsm
docker-machine-prompt.bash   rhsmcertd
docker-machine-wrapper.bash  rhsm-debug
iprutils                     rhsm-icon
rct                          subscription-manager
redefine_filedir
##此处的 docker-machine.bash   ,docker-machine-prompt.bash ,docker-machine-wrapper.bash 为自己下载过来的;
[root@server1 ~]# vim .bashrc 	##写入环境变量

PS1='[\\u@\\h \\W$(__docker_machine_ps1)]\\$ '

加载资源之后,此时在调用 server3 上 docker 时会有指示信息:

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

在 server2 上也用 machine 来部署 docker :

[root@server1 ~]# ssh-copy-id server2
[root@server1 ~]# docker-machine create -d generic --generic-ip-address 172.25.15.2 --engine-install-url "http://172.25.15.250/get-docker.sh" server2
[root@server1 ~]# docker-machine ls
NAME      ACTIVE   DRIVER    STATE     URL                      SWARM   DOCKER      ERRORS
server2   -        generic   Running   tcp://172.25.15.2:2376           v19.03.15   
server3   -        generic   Running   tcp://172.25.15.3:2376           v19.03.15 

两个的切换:

[root@server1 ~]# docker-machine env server2
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://172.25.15.2:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/server2"
export DOCKER_MACHINE_NAME="server2"
# Run this command to configure your shell: 
# eval $(docker-machine env server2)
[root@server1 ~]# eval $(docker-machine env server2)
[root@server1 ~ [server2]]# eval $(docker-machine env server3)
[root@server1 ~ [server3]]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@server1 ~ [server3]]# eval $(docker-machine env server2)
[root@server1 ~ [server2]]# docker images 
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
busybox                        latest              d3cd072556c2        12 days ago         1.24MB
nginx                          latest              f0b8a9a54136        2 weeks ago         133MB
reg.westos.org/library/nginx   latest              f0b8a9a54136        2 weeks ago         133MB
ubuntu                         latest              7e0aa2d69a15        5 weeks ago         72.7MB
game2048                       latest              19299002fdbe        4 years ago         55.5MB
[root@server1 ~ [server2]]# 

此时在 machine 主机上控制容器之后,此时除了在容器中的指令外其余的指令还是在当前主机执行的;对于控制容器之后,退出时需要退出当前的 shell 再次进入时才会释放控制容器。

以上是关于企业运维容器 docker 三剑客machine的主要内容,如果未能解决你的问题,请参考以下文章

企业运维实战--Docker三剑客一之docker-machine

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

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

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

Linux企业运维——Docker三剑客之Docker Swarm

Linux企业运维——Docker三剑客之docker-compose