企业运维容器 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