MacOS Docker 使用篇

  1. Docker客户端
    docker

进入客户端

  1. docker [command] --help

查看指令的具体使用方法

  1. 容器使用
  1. 获取镜像
    docker pull centos:[version]
  2. 启动容器
    docker run -it centos:[version] /bin/bashdocker run -it --name [imageName] /bin/bash

各个参数解析:

-t: 在新容器内指定一个伪终端或终端。

-i: 允许你对容器内的标准输入 (STDIN) 进行交互。

  1. 退出终端
    exit
  2. 启动已停止运行的容器
    docker ps -adocker start [containerID]
  3. 后台运行
    docker run -itd centos:[version] ubuntu /bin/bash “[shell命令]”docker run -itd --name [imageName] ubuntu /bin/bash “[shell命令]”

创建一个以进程方式运行的容器,返回一个containerID。通过docker ps 查看。在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

  1. docker logs [containerID]

输出详情介绍:

  • CONTAINER ID: containerID。
  • IMAGE: 使用的镜像。
  • COMMAND: 启动容器时运行的命令。
  • CREATED: 容器的创建时间。
  • STATUS: 容器状态。

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running 或 Up(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)
  • PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
  • NAMES: 自动分配的容器名称。
  1. 停止一个容器
    docker stop [containerID]
  2. 重启容器
    docker restart [containerID]
  3. 进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

  1. docker attach [containerID]

docker exec -it [containerID] /bin/bash

  1. 导出和导入容器
  1. 导出容器
    docker export [containerID] > [imageName].tar
  2. 导入容器快照
    cat docker/[imageName].tar | docker import - test/[imageName]:[version]docker import [url]
  1. 删除容器
    docker rm -f [containerID]docker container prune

清理掉所有处于终止状态的容器。

  1. 运行一个web应用
    docker pull [image]run -d -P [image] [shellCommand]run -d -p [sourcePort]:[destPort] [imagePath] [shellCommand]

参数说明:

  • -d:让容器在后台运行。
  • -P:将容器内部使用的网络端口随机映射到我们使用的主机上。

两种方式的区别是:

  • -P :是容器内部端口随机映射到主机的高端口。
  • -p : 是容器内部端口绑定到指定的主机端口。
  1. 网络端口的快捷方式
    docker port [containerID]
  2. 查看web应用程序日志
    docker logs [containerID]
  3. 查看WEB应用程序容器的进程
    docker top [containerID]
  4. 检查 WEB 应用程序
    docker inspect [containerID]
  5. 停止 WEB 应用容器
    docker stop [containnerID]
  6. 重启WEB应用容器
    docker start [containerID]
  7. 移除web应用容器
    docker rm [containerID]
  1. 镜像使用
  1. 列出镜像列表
    docker images

各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小
  1. 拖取镜像
    docker pull [imageName]:[version]
  2. 查找镜像
    docker search [imageName]https://hub.docker.com/
  3. 删除镜像
    docker rmi [imageName]
  4. 创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  1. 从已经创建的容器中更新镜像,并且提交这个镜像
  2. 使用 Dockerfile 指令来创建一个新的镜像
  1. 更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。

docker run -t -i [container]:[version] /bin/bash

在运行的容器内使用 apt-get update 命令进行更新。

在完成操作之后,输入 exit 命令来退出这个容器。

此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

docker commit -m="has update" -a="runoob" [containerID] [containerName]:[version]

各个参数说明:

  • m: 提交的描述信息
  • a: 指定镜像作者

e218edb10161:容器 ID

runoob/ubuntu:v2: 指定要创建的目标镜像名

  1. 设置镜像标签
    docker tag [imageID] [imageName]:[tag]
  2. 构建镜像
参考Docker Dockerfile
  1. 容器连接
端口映射并不是唯一把 docker 连接到另一个容器的方法。
 docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
 docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。
  1. 新建网络
    docker network create -d bridge [netName]

参数说明:

  • -d:参数指定 Docker 网络类型,有 bridge、overlay。
  • 其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。
  1. 连接容器
    docker run -itd --name [sourceContainerName] --network [netName] [imageName] /bin/bash
  2. 配置DNS
/etc/docker/daemon.json

{
“dns” : [
“114.114.114.114”,
“8.8.8.8”
]
}

  1. 手动指定容器的配置
    docker run -it --rm -h [hostName] --dns=114.114.114.114 --dns-search=test.com [imageName]

参数说明:

  • –rm:容器退出时自动清理容器内部的文件系统。
  • -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 >
  • etc/hostname 和 /etc/hosts。
  • –dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
  • –dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。
  1. Docker Hub
  1. 注册

在 https://hub.docker.com 免费注册一个 Docker 账号

  1. 登录和退出
    docker logindocker logout
  2. 推送镜像
    docker push [tag]
  1. Docker Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
  1. 使用 Dockerfile 定制镜像
  2. FROM 和 RUN 指令的作用

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

  • shell 格式:

RUN <命令行命令>

  • exec 格式:

RUN ["可执行文件", "参数1", "参数2"]

  1. 构建镜像
在 Dockerfile 文件的存放目录下,执行构建动作。
 以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。
 注:最后的 . 代表本次执行的上下文路径,下一节会介绍。

docker build -t [imageName]:[version] .

  1. 上下文路径
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),			docker build 命令得知这个路径后,会将路径下的所有内容打包。
 解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的			构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需			要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
 如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
 注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
  1. 指令详解

参考 https://www.runoob.com/docker/docker-dockerfile.html