Docker基础

Docker基础

一、Docker 架构

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。

二、Docker安装流程

Docker安装环境

[root@server ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.2 (Ootpa)

1、卸载旧版本,如果虚拟机上没有安装过则不需要卸载。

[root@server ~]# sudo yum remove docker \
> docker-client \
> docker-client-latest \
> docker-common \
> docker-latest \
> docker-latest-logrotate \
> docker-logrotate \
> docker-engine

image-20230921115128865

2、首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。

[root@server ~]# sudo yum install -y yum-utils \
> device-mapper-persistent-data \
> lvm2

image-20230921115556858

3、使用阿里云镜像站来下载文件。

[root@server ~]# sudo yum-config-manager \
> --add-repo \
> https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
​
Adding repo from: https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
​

4、安装最新版本的 Docker Engine-Community 。

[root@server ~]# sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

5、开启Docker服务。

[root@server ~]# systemctl start docker
[root@server ~]# docker version   #查看Docker版本号
Client: Docker Engine - Community
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:33:07 2023
 OS/Arch:           linux/amd64
 Context:           default
Server: Docker Engine - Community
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.7
  Git commit:       1a79695
  Built:            Mon Sep  4 12:32:10 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.24
  GitCommit:        61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
 runc:
  Version:          1.1.9
  GitCommit:        v1.1.9-0-gccaecfc
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

6、通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community 。

[root@server ~]#  docker run hello-world
# 显示以下内容表示安装成功:
Hello from Docker!
This message shows that your installation appears to be working correctly.
​
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
​
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
​
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
​
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

8、查看本机存在那些docker镜像

[root@server ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    9c7a54a9a43c   4 months ago   13.3kB

三、Docker的简单使用

1、Docker容器使用
[root@server ~]# docker stats --help       # 在docker容器中stats命令的帮助查看
[root@server ~]# docker pull ubuntu        # 获取镜像
[root@server ~]# docker run -it ubuntu /bin/bash  # 启动镜像
-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
注:使用exit退出
[root@server ~]# docker ps -a  #查看所有容器的命令
[root@server ~]# docker start <容器 ID> # 开启容器
[root@server ~]# docker stop  <容器 ID> # 停止容器
[root@server ~]# docker restart <容器 ID> # 重启容器
[root@server ~]# docker attach <容器 ID> # 进入容器
这一种方法在退出后容器终止
[root@server ~]# docker exec -it <容器 ID> /bin/bash # 进入容器
这一种方法在退出后容器不会终止
[root@server ~]# docker export <容器 ID>  >  ubuntu.tar  #把容器导出本地文件中
[root@server ~]# docker import http://example.com/exampleimage.tgz example/imagerepo
# 导入文件
[root@server ~]# docker rm -f <容器 ID>     # 删除文件

运行一个web应用程序

[root@server ~]# docker pull training/webapp      # 载入镜像
[root@server ~]# docker run -d -P training/webapp python app.py      # 在docker容器中运行一个 Python Flask 应用来运行一个web应用
# -d:让容器在后台运行。
# -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
[root@server ~]# docker ps        # 查看正在运行的程序
[root@server ~]# docker logs -f <容器 ID>        # 查看运行的web程序日志
[root@server ~]# docker port <容器 ID>          # 查看运行的容器端口
[root@server ~]# docker port <容器 name>          # 查看运行的容器端口
[root@server ~]# docker top <容器 name>           # 查看容器的进程
[root@server ~]# docker inspect <容器 name>       # 查看容器的代码
2、Docker容器镜像
[root@server ~]# docker images        # 列出镜像列表   
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
注意:同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本
[root@server ~]# docker run -t -i ubuntu:15.10 /bin/bash      #使用版本为15.10的ubuntu系统镜像来运行容器
-i: 交互式操作。
-t: 终端。
[root@server ~]# docker pull ubuntu:13.10                    # 获得一个镜像
[root@server ~]# docker search httpd                         # 查找httpd服务的镜像
[root@server ~]# docker search httpd
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
httpd                            The Apache HTTP Server Project                  4548      [OK]       
clearlinux/httpd                 httpd HyperText Transfer Protocol (HTTP) ser…   5                    
paketobuildpacks/httpd                                                           0                    
vulhub/httpd                                                                     0                    
jitesoft/httpd                   Apache httpd on Alpine linux.                   0                    
openquantumsafe/httpd            Demo of post-quantum cryptography in Apache …   0                    
wodby/httpd                                                                      0                    
avenga/httpd-static                                                              0                    
dockette/httpdump                                                                0                    
betterweb/httpd                                                                  0
# NAME: 镜像仓库源的名称
# DESCRIPTION: 镜像的描述
# OFFICIAL: 是否 docker 官方发布
# stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
# AUTOMATED: 自动构建。

Docker容器镜像的简单使用

[root@server ~]# docker pull httpd        # 拖取镜像
[root@server ~]# docker run httpd         # 运行镜像
[root@server ~]# docker rmi hello-world    # 删除镜像

创建镜像:

  • 1、从已经创建的容器中更新镜像使用

  • 2、使用 Dockerfile 指令来创建一个新的镜像

方法1:
[root@server ~]# docker run -t -i ubuntu:15.10 /bin/bash
root@e218edb10161:/# apt-get update
[root@server ~]#docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
#                                                          容器ID
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名

测试:
[root@server ~]# docker images       # 查看是否有新创建的容器

方法2:
1、创建一个 Dockerfile 文件
[root@server ~]# cat Dockerfile   # 查看创建改文件中的内容
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

[root@server ~]# docker build -t runoob/centos:6.7 .    # 构建一个centos:6.7的镜像
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
[root@server ~]# docker images   # 查看镜像是否存在
[root@server ~]# docker tag 860c279d2fec runoob/centos:dev
#                           镜像ID        用户名称/镜像源名  :新的标签名
3、Docker容器连接

网络端口映射:

[root@server ~]# docker run -d -P training/webapp python app.py
# -P 绑定端口号
[root@server ~]# docker run -d -p 5000:5000 training/webapp python app.py
cbadc179dc6a9223d52e08a45f5c0e7421f939bb557482c7d24b1596c04dd12e
[root@server ~]# docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
e972f504bd63180452e7fb9332b110fed1beaa222643eb50e69a7866d985c1b2
# -P :是容器内部端口随机映射到主机的端口。
# -p : 是容器内部端口绑定到指定的主机端口。
[root@server ~]# docker ps
CONTAINER ID   IMAGE             COMMAND           CREATED              STATUS              PORTS                                         NAMES
e972f504bd63   training/webapp   "python app.py"   8 seconds ago        Up 6 seconds        5000/tcp, 127.0.0.1:5000->5000/udp            distracted_mclean
b92c6226a4e8   training/webapp   "python app.py"   39 seconds ago       Up 37 seconds       127.0.0.1:5001->5000/tcp                      xenodochial_ride
cbadc179dc6a   training/webapp   "python app.py"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp     friendly_jones
1a105bc3d4e0   training/webapp   "python app.py"   2 minutes ago        Up 2 minutes        0.0.0.0:32768->5000/tcp, :::32768->5000/tcp   youthful_tesla
[root@server ~]# docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
#                                                   绑定UDP端口,默认是TCP端口
[root@server ~]# port adoring_stonebraker 5000      # 快速查看端口绑定情况

容器互联:docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。

[root@server ~]# run -d -P --name runoob training/webapp python app.py
                           # 容器命名
[root@server ~]# docker network create -d bridge test-net    # 新建网络
-d:参数指定 Docker 网络类型,有 bridge、overlay。
[root@server ~]# docker run -itd --name test1 --network test-net ubuntu /bin/bash       # 运行容器连接新的网络
[root@server ~]# docker run -itd --name test2 --network test-net ubuntu /bin/bash       # 运行另一个容器连接新的网络
[root@server ~]# docker exec -it test1 /bin/bash # 进入容器
root@1a6fd3336011:/# apt-get update
root@1a6fd3336011:/# apt install iputils-ping
root@1a6fd3336011:/# ping test2
PING test2 (172.18.0.3) 56(84) bytes of data.
64 bytes from test2.test-net (172.18.0.3): icmp_seq=1 ttl=64 time=0.107 ms
64 bytes from test2.test-net (172.18.0.3): icmp_seq=2 ttl=64 time=0.070 ms
64 bytes from test2.test-net (172.18.0.3): icmp_seq=3 ttl=64 time=0.072 ms
64 bytes from test2.test-net (172.18.0.3): icmp_seq=4 ttl=64 time=0.072 ms
64 bytes from test2.test-net (172.18.0.3): icmp_seq=5 ttl=64 time=0.072 ms

root@1a6fd3336011:/# exit
4、Docker仓库管理

仓库(Repository)是集中存放镜像的地方。目前 Docker 官方维护了一个公共仓库 Docker Hub,大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

[root@server ~]# docker login       # 登录Docker仓库
Username: test
Password: 
[root@server ~]# docker login       # 退出Docker仓库
[root@server ~]# docker search ubuntu    # 拉取镜像
[root@server ~]# docker pull ubuntu      # 下载镜像
[root@server ~]# docker push username/ubuntu:18.04    # 将自己的镜像推送到Docker Hub中
#                             你自己申请的Docker账号
5、Docker Dockerfile
什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

使用 Dockerfile 定制镜像
[root@server ~]# mkdir Dockerfile
[root@server ~]# cd Dockerfile/
[root@server Dockerfile]# vim Dockerfile
[root@server Dockerfile]# cat /root/Dockerfile/Dockerfile
FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
shell 格式:
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。
exec 格式:
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

开始构建Docker

[root@server Dockerfile]# docker build -t nginx:v3 .

以下表示构建成功:

image-20230922160032731

[root@server Dockerfile]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
nginx             v3        c50cb8e20f05   3 minutes ago   187MB

上下文路径:是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

指令详解
Dockerfile 指令说明
FROM指定基础镜像,用于后续的指令构建。
MAINTAINER指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL添加镜像的元数据,使用键值对的形式。
RUN在构建过程中在镜像中执行命令。
CMD指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT设置容器创建时的主要命令。(不可被覆盖)
EXPOSE声明容器运行时监听的特定网络端口。
ENV在容器内部设置环境变量。
ADD将文件、目录或远程URL复制到镜像中。
COPY将文件或目录复制到镜像中。
VOLUME为容器创建挂载点或声明卷。
WORKDIR设置后续指令的工作目录。
USER指定后续指令的用户上下文。
ARG定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。
ONBUILD当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL设置发送给容器以退出的系统调用信号。
HEALTHCHECK定义周期性检查容器健康状态的命令。
SHELL覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。
COPY

复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

格式:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

[--chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组。

<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:

COPY hom* /mydir/
COPY hom?.txt /mydir/

<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

ADD

ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

  • ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。

  • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

CMD

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。

  • RUN 是在 docker build。

作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

格式:

CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh。

ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

格式:

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

示例:

[root@server ~]# vim /root/Dockerfile/Dockerfile 
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

[root@server ~]# cd /root/Dockerfile/
[root@server Dockerfile]# docker build -t nginx:test .
[root@server Dockerfile]# docker run  nginx:test       # 不传参运行
2023/09/22 08:31:16 [notice] 1#1: using the "epoll" event method
2023/09/22 08:31:16 [notice] 1#1: nginx/1.25.2
2023/09/22 08:31:16 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 
2023/09/22 08:31:16 [notice] 1#1: OS: Linux 4.18.0-193.el8.x86_64
2023/09/22 08:31:16 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576

ENV

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

格式:

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

以下示例设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用:

ENV NODE_VERSION 7.2.0

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
ARG

构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。

格式:

ARG <参数名>[=<默认值>]
VOLUME

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

作用:

  • 避免重要的数据,因容器重启而丢失,这是非常致命的。

  • 避免容器不断变大。

格式:

VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。

EXPOSE

仅仅只是声明端口。

作用:

  • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。

  • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

格式:

EXPOSE <端口1> [<端口2>...]
WORKDIR

指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。

docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

格式:

WORKDIR <工作目录路径>
USER

用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。

格式:

USER <用户名>[:<用户组>]
HEALTHCHECK

用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

格式:

HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
ONBUILD

用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。

格式:

ONBUILD <其它指令>
LABEL

LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

比如我们可以添加镜像的作者:

LABEL org.opencontainers.image.authors="runoob"
6、Docker Compose
Compose 简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。

  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

7、Docker Machine
简介

Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。

安装:

[root@server ~]#  base=https://github.com/docker/machine/releases/download/v0.16.0 &&
>   curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
>   sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
>   chmod +x /usr/local/bin/docker-machine
[root@server ~]# docker-machine version          # 查看版本
简单使用:
[root@server ~]# docker-machine ls  列出可用的机器
NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS
[root@server ~]# docker-machine create --driver virtualbox test    # 创建一名为test的机器
--driver:指定用来创建机器的驱动类型,这里是 virtualbox
[root@server ~]# docker-machine ip test       # 查看test机器的IP地址
[root@server ~]# docker-machine stop test     # 停止test机器
[root@server ~]# docker-machine start test     # 开始test机器
[root@server ~]# docker-machine ssh test       # 进入test机器
docker-machine 命令参数说明
  • docker-machine active:查看当前激活状态的 Docker 主机。

    $ docker-machine ls
    
    NAME      ACTIVE   DRIVER         STATE     URL
    dev       -        virtualbox     Running   tcp://192.168.99.103:2376
    staging   *        digitalocean   Running   tcp://203.0.113.81:2376
    
    $ echo $DOCKER_HOST
    tcp://203.0.113.81:2376
    
    $ docker-machine active
    staging
  • config:查看当前激活状态 Docker 主机的连接信息。

  • create:创建 Docker 主机

  • env:显示连接到某个主机需要的环境变量

  • inspect: 以 json 格式输出指定Docker的详细信息

  • ip: 获取指定 Docker 主机的地址

  • kill: 直接杀死指定的 Docker 主机

  • ls: 列出所有的管理主机

  • provision: 重新配置指定主机

  • regenerate-certs: 为某个主机重新生成 TLS 信息

  • restart: 重启指定的主机

  • rm: 删除某台 Docker 主机,对应的虚拟机也会被删除

  • ssh: 通过 SSH 连接到主机上,执行命令

  • scp: 在 Docker 主机之间以及 Docker 主机和本地主机之间通过 scp 远程复制数据

  • mount: 使用 SSHFS 从计算机装载或卸载目录

  • start: 启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动

  • status: 获取指定 Docker 主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等

  • stop: 停止一个指定的 Docker 主机

  • upgrade: 将一个指定主机的 Docker 版本更新为最新

  • url: 获取指定 Docker 主机的监听 URL

  • version: 显示 Docker Machine 的版本或者主机 Docker 版本

  • help: 显示帮助信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值