MacOS Docker 使用篇
- Docker客户端
docker
进入客户端
docker [command] --help
查看指令的具体使用方法
- 容器使用
- 获取镜像
docker pull centos:[version]
- 启动容器
docker run -it centos:[version] /bin/bash
docker run -it --name [imageName] /bin/bash
各个参数解析:
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
- 退出终端
exit
- 启动已停止运行的容器
docker ps -a
docker start [containerID]
- 后台运行
docker run -itd centos:[version] ubuntu /bin/bash “[shell命令]”
docker run -itd --name [imageName] ubuntu /bin/bash “[shell命令]”
创建一个以进程方式运行的容器,返回一个containerID。通过docker ps 查看。在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
docker logs [containerID]
输出详情介绍:
- CONTAINER ID: containerID。
- IMAGE: 使用的镜像。
- COMMAND: 启动容器时运行的命令。
- CREATED: 容器的创建时间。
- STATUS: 容器状态。
状态有7种:
- created(已创建)
- restarting(重启中)
- running 或 Up(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
- PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
- NAMES: 自动分配的容器名称。
- 停止一个容器
docker stop [containerID]
- 重启容器
docker restart [containerID]
- 进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
docker attach [containerID]
docker exec -it [containerID] /bin/bash
- 导出和导入容器
- 导出容器
docker export [containerID] > [imageName].tar
- 导入容器快照
cat docker/[imageName].tar | docker import - test/[imageName]:[version]
docker import [url]
- 删除容器
docker rm -f [containerID]
docker container prune
清理掉所有处于终止状态的容器。
- 运行一个web应用
docker pull [image]
run -d -P [image] [shellCommand]
run -d -p [sourcePort]:[destPort] [imagePath] [shellCommand]
参数说明:
- -d:让容器在后台运行。
- -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
两种方式的区别是:
- -P :是容器内部端口随机映射到主机的高端口。
- -p : 是容器内部端口绑定到指定的主机端口。
- 网络端口的快捷方式
docker port [containerID]
- 查看web应用程序日志
docker logs [containerID]
- 查看WEB应用程序容器的进程
docker top [containerID]
- 检查 WEB 应用程序
docker inspect [containerID]
- 停止 WEB 应用容器
docker stop [containnerID]
- 重启WEB应用容器
docker start [containerID]
- 移除web应用容器
docker rm [containerID]
- 镜像使用
- 列出镜像列表
docker images
各个选项说明:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
- 拖取镜像
docker pull [imageName]:[version]
- 查找镜像
docker search [imageName]
https://hub.docker.com/ - 删除镜像
docker rmi [imageName]
- 创建镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
- 从已经创建的容器中更新镜像,并且提交这个镜像
- 使用 Dockerfile 指令来创建一个新的镜像
- 更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。
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: 指定要创建的目标镜像名
- 设置镜像标签
docker tag [imageID] [imageName]:[tag]
- 构建镜像
参考Docker Dockerfile
- 容器连接
端口映射并不是唯一把 docker 连接到另一个容器的方法。
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。
- 新建网络
docker network create -d bridge [netName]
参数说明:
- -d:参数指定 Docker 网络类型,有 bridge、overlay。
- 其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。
- 连接容器
docker run -itd --name [sourceContainerName] --network [netName] [imageName] /bin/bash
- 配置DNS
/etc/docker/daemon.json
{
“dns” : [
“114.114.114.114”,
“8.8.8.8”
]
}
- 手动指定容器的配置
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。
- Docker Hub
- 注册
在 https://hub.docker.com 免费注册一个 Docker 账号
- 登录和退出
docker login
docker logout
- 推送镜像
docker push [tag]
- Docker Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
- 使用 Dockerfile 定制镜像
- FROM 和 RUN 指令的作用
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
- shell 格式:
RUN <命令行命令>
- exec 格式:
RUN ["可执行文件", "参数1", "参数2"]
- 构建镜像
在 Dockerfile 文件的存放目录下,执行构建动作。
以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。
注:最后的 . 代表本次执行的上下文路径,下一节会介绍。
docker build -t [imageName]:[version] .
- 上下文路径
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制), docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的 构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需 要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
- 指令详解
参考 https://www.runoob.com/docker/docker-dockerfile.html