设为首页 收藏本站
查看: 976|回复: 0

[经验分享] 容器技术|Docker三剑客之docker

[复制链接]

尚未签到

发表于 2019-2-21 10:03:02 | 显示全部楼层 |阅读模式

  接上一篇:容器技术|Docker三剑客之docker-compose

docker-machine是什么?
  ocker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术,甚至可以通过指定driver来定制虚拟机的实现原理(一般是virtualbox)。

Docker 与 Docker Machine 的区别
  Docker 是一个 Client-Server 架构的应用,Docker是大家对Docker Engine简称。

Docker包括以下三个部分:


  • 1、Docker daemon
  • 2、一套与 Docker daemon 交互的 REST API
  • 3、一个命令行客户端
    下图很清晰的展示了它们之间的关系:

  Docker Machine 则是一个安装和管理 Docker 的工具。它有自己的命令行工具:docker-machine。

docker-machine安装

[root@master ~]# curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    390      0 --:--:--  0:00:01 --:--:--   390
100 26.7M  100 26.7M    0     0  1618k      0  0:00:16  0:00:16 --:--:-- 3622k
[root@master ~]# chmod +x /tmp/docker-machine
[root@master ~]# cp /tmp/docker-machine /usr/local/bin/docker-machine
[root@master ~]# ll /usr/local/bin/docker-machine
-rwxr-xr-x 1 root root 28034848 6月  12 15:24 /usr/local/bin/docker-machine
[root@master ~]# docker-machine -v
docker-machine version 0.14.0, build 89b8332
docker-machine命令

[root@master ~]# docker-machine --help
Usage: docker-machine [OPTIONS] COMMAND [arg...]
Create and manage machines running Docker.
Version: 0.14.0, build 89b8332
Author:
Docker Machine Contributors -
Options:
--debug, -D                   Enable debug mode
--storage-path, -s "/root/.docker/machine"    Configures storage path [$MACHINE_STORAGE_PATH]
--tls-ca-cert                 CA to verify remotes against [$MACHINE_TLS_CA_CERT]
--tls-ca-key                  Private key to generate certificates [$MACHINE_TLS_CA_KEY]
--tls-client-cert                 Client cert to use for TLS [$MACHINE_TLS_CLIENT_CERT]
--tls-client-key              Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]
--github-api-token                Token to use for requests to the Github API [$MACHINE_GITHUB_API_TOKEN]
--native-ssh                  Use the native (Go-based) SSH implementation. [$MACHINE_NATIVE_SSH]
--bugsnag-api-token               BugSnag API token for crash reporting [$MACHINE_BUGSNAG_API_TOKEN]
--help, -h                    show help
--version, -v                 print the version
Commands:
active        Print which machine is active
config        Print the connection config for machine
create        Create a machine
env           Display the commands to set up the environment for the Docker client
inspect       Inspect information about a machine
ip            Get the IP address of a machine
kill          Kill a machine
ls            List machines
provision     Re-provision existing machines
regenerate-certs  Regenerate TLS Certificates for a machine
restart       Restart a machine
rm            Remove a machine
ssh           Log into or run a command on a machine with SSH.
scp           Copy files between machines
mount         Mount or unmount a directory from a machine with SSHFS.
start         Start a machine
status        Get the status of a machine
stop          Stop a machine
upgrade       Upgrade a machine to the latest version of Docker
url           Get the URL of a machine
version       Show the Docker Machine version or a machine docker version
help          Shows a list of commands or help for one command
docker-machine active
显示当前的活动主机
docker-machine config
显示连接主机的配置
docker-machine create
创建一个主机
docker-machine env
设置当前的环境与哪个主机通信
docker-machine inspect
查看主机的详细信息
docker-machine ip
查看主机的IP
docker-machine kill
强制关闭一个主机
docker-machine ls
查看所有的主机信息
docker-machine provision
重新配置现在主机
docker-machine regenerate-certs
为主机重新生成证书
docker-machine restart
重启主机
docker-machine rm
删除主机
docker-machine ssh
以SSH的方式连接到主机上
docker-machine scp
远程复制
docker-machine status
查看主机的状态
docker-machine stop
停止一个正在运行的主机
docker-machine upgrade
升级主机的docker服务到最新版本
docker-machine version
查看docker-machine版本
常用实例操作

[root@master ~]# docker-machine create -d virtualbox testhost
[root@master ~]# docker-machine create --driver virtualbox testhost
#两个命令的作用相同,创建一个名为testhost的主机,驱动方式是virtualbox
[root@master ~]# docker-machine create -d virtualbox testhost
Creating CA: /root/.docker/machine/certs/ca.pem
Creating client certificate: /root/.docker/machine/certs/cert.pem
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
#报错提示没有发现VBoxManage。因此,需要手工安装,具体安装操作如下。
[root@master ~]# 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
[root@master ~]# yum search VirtualBox   #查找具体安装版本
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* epel: mirrors.ustc.edu.cn
* extras: centos.ustc.edu.cn
* updates: centos.ustc.edu.cn
============== 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
[root@master ~]# yum install -y VirtualBox-5.2  #安装
[root@master ~]# /sbin/vboxconfig   #重新加载virtualbox服务
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
kernel-devel kernel-devel-3.10.0-693.el7.x86_64
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
kernel-devel kernel-devel-3.10.0-693.el7.x86_64
There were problems setting up VirtualBox.  To re-start the set-up process, run
/sbin/vboxconfig
as root.
#如果内核版本不一致,会出现上面的报错,需要安装相同的内核版本
[root@master ~]# rpm -ivh kernel-devel-3.10.0-693.el7.x86_64.rpm
准备中...                          ################################# [100%]
正在升级/安装...
1:kernel-devel-3.10.0-693.el7   ################################# [100%]
[root@slave1 ~]# yum install gcc make perl -y
[root@slave1 ~]# rpm -qa kernel\*
kernel-tools-3.10.0-693.el7.x86_64
kernel-devel-3.10.0-693.el7.x86_64
kernel-tools-libs-3.10.0-693.el7.x86_64
kernel-3.10.0-693.el7.x86_64
kernel-headers-3.10.0-862.3.2.el7.x86_64
[root@slave1 ~]# /sbin/vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: Starting VirtualBox services.
[root@centos7 ~]# 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@centos7 ~]# docker-machine create --driver virtualbox default
Running pre-create checks...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v18.05.0-ce
(default) Downloading /root/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.05.0-ce/boot2docker.iso...
(default) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(default) Copying /root/.docker/machine/cache/boot2docker.iso to /root/.docker/machine/machines/default/boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Found a new host-only adapter: "vboxnet0"
(default) Waiting for an IP...
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 boot2docker...
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 default
#可以先安装个默认的虚拟机
[root@centos7 ~]# docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce   
[root@centos7 ~]# docker-machine status
Running
#接下来配置环境变量,方便后面直接操作主机
[root@centos7 ~]# docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env default)
[root@centos7 ~]#  eval $(docker-machine env default)
[root@centos7 ~]# docker-machine ssh default
##         .
## ## ##        ==
## ## ## ## ##    ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
\______ o           __/
\    \         __/
\____\_______/
_                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.05.0-ce, build HEAD : b5d6989 - Thu May 10 16:35:28 UTC 2018
Docker version 18.05.0-ce, build f150324
docker@default:~$ docker --version
Docker version 18.05.0-ce, build f150324
#正常进入虚拟机

实例
  两台服务器


  • 本地主机:192.168.22.177
  • 远程主机:192.168.22.175
    可能大家还是不太明白,这个docker-machine到底有什么用?docker容器的好处都知道了。
    而docker-machine可以在本地布署相应环境的同时完成远程docker主机相同环境的布署,减少重复的操作。
  1、配置免密登录

[root@test001 ~]# ssh-keygen -t rsa
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:7Ue0bc08pEs+PonJqy7/hyxUhNO4uEegVizX4EJC8J8 root@centos7.3
The key's randomart image is:
+---[RSA 2048]----+
| .oo ...o +      |
|  . o..= = o     |
|   . .=.o + .  . |
|    .oo. + o oo+ |
|    .E  S o ooo.+|
|       . + .o.. .|
|        o + =+.  |
|       . . B.+.  |
|        +++oo..  |
+----[SHA256]-----+
[root@centos7 ~]# ssh-copy-id 192.168.22.175
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.22.175 (192.168.22.175)' can't be established.
ECDSA key fingerprint is SHA256:p6+FPeTxTUx37cwJWJP8cUE9NhcUHSvAppVPyj4aj8c.
ECDSA key fingerprint is MD5:89:6d:f7:46:11:45:2e:fd:21:87:42:bd:62:06:fe:fd.
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
root@192.168.22.175's password:
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh '192.168.22.175'"
and check to make sure that only the key(s) you wanted were added.
[root@test001 ~]# ssh 192.168.22.175
Last login: Tue Apr 24 06:51:06 2018 from 192.168.22.170
[root@test002 ~]# ip add |grep 192.168.22
inet 192.168.22.175/24 brd 192.168.22.255 scope global ens32

  2、创建远程主机

远程主机需要安装有docker环境
[root@test001 ~]# docker-machine create -d generic --generic-ip-address=192.168.22.175 --generic-ssh-user=root --engine-registry-mirror http://ef017c13.m.daocloud.io   dockerhost
Running pre-create checks...
Creating machine...
(dockerhost) 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 dockerhost
[root@test001 ~]# docker-machine ls
NAME         ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
dockerhost   -        generic      Running   tcp://192.168.22.175:2376           v1.13.1   
  3、配置环境变量

[root@centos7 ~]# docker-machine env dockerhost
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.22.175:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/dockerhost"
export DOCKER_MACHINE_NAME="dockerhost"
# Run this command to configure your shell:
# eval $(docker-machine env dockerhost)
[root@test001 ~]# eval $(docker-machine env dockerhost)
[root@test001 ~]# docker-machine ssh dockerhost
Last login: Thu Jun 14 02:32:42 2018 from 192.168.22.177
[root@dockerhost ~]# docker --version
Docker version 1.13.1, build 94f4240/1.13.1
  4、运行一个容器

[root@test001 ~]# docker run -d nginx:1.13
Unable to find image 'nginx:1.13' locally
Trying to pull repository docker.io/library/nginx ...
sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35: Pulling from docker.io/library/nginx
f2aa67a397c4: Pull complete
3c091c23e29d: Pull complete
4a99993b8636: Pull complete
Digest: sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35
Status: Downloaded newer image for docker.io/nginx:1.13
72efb659ec38d263519c894bf0b5eb3d5ca35af1e3d0e9522abbcc19d8739403
[root@test001 ~]# docker image ls
REPOSITORY          TAG     IMAGE ID       CREATED       SIZE
docker.io/nginx     1.13    ae513a47849c   6 weeks ago   109 MB
[root@test001 ~]# docker-machine ssh dockerhost
Last login: Thu Jun 14 02:58:51 2018 from 192.168.22.177
[root@dockerhost ~]# docker image ls
REPOSITORY          TAG      IMAGE ID      CREATED       SIZE
docker.io/nginx     1.13     ae513a47849c  6 weeks ago   109 MB



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675198-1-1.html 上篇帖子: 多种方式安装docker 下篇帖子: Docker 配置安装Dockerfile
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表