0%

Docker 使用记录

Docker 介绍:Docker - 维基百科
Docker 官方文档:Docker Documentation

命令快速参考:

命令格式:
docker [操作命令] [操作参数] [操作对象名或ID]:[对象标签,默认是latest] [其他参数]
大部分显示信息类命令,都会根据终端大小截断输出保持显示格式,如果需要显示完整的输出,可以加入 --no-trunc 参数
本文只列出了常用的命令和参数,要查看完整的参数列表,可以执行 docker [操作命令] --help 查看
以下每个命令都有添加官网链接,点击即可跳转参考

镜像(image)管理:

容器(container)管理:

其他:

  • docker inspect
    显示 Docker 对象的信息,可查看镜像、容器、卷、网络等对象
    也可以使用 docker image inspectdocker container inspect 等形式

  • docker system prune
    删除未使用的数据,包括镜像,容器,网络,卷

  • docker eventsdocker system events
    显示 docker 服务器的事件,包括镜像容器的创建删除等事件

  • docker system df
    查看 docker 磁盘使用情况
    -v:显示详细的信息,会显示具体的镜像和容器占用空间大小

使用实例:

本博客使用 Hexo 框架,依赖 Node.js,为了方便部署,尝试使用 Docker 构建部署环境。

构建部署镜像:

编写 Dockerfile 文件用于构建镜像,参考文档:Dockerfile reference
文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 指定父镜像
FROM node:lts-slim

# 指定工作目录,不存在的目录会自动创建
WORKDIR /hexo
# 运行命令,安装 hexo
RUN npm install hexo -g --registry=https://registry.npmmirror.com

# 更改时区、修改 apt 源、安装需要的工具
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
sed -i "s/http.*debian/http:\/\/opentuna.cn\/debian/" /etc/apt/sources.list && \
apt update && apt install python3 git -y && apt clean

# 定义开放的端口
EXPOSE 4000

# 定义镜像启动时的默认命令
CMD [ "bash" ]

在放置以上 Dockerfile 文件的目录下,运行命令构建容器:
docker build -t hexo .

构建成功后,可以看到已经存在名为 hexo 的镜像:

1
2
3
> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hexo latest 40c3da2cd74c 3 hours ago 347MB

使用镜像生成容器并使用:

执行命令生成容器:
docker create -ti --name hexo_tmp -v "D:\hexo_src:/hexo" -v "hexo_node_modules:/hexo/node_modules" --rm -p 4000:4000 hexo bash
该命令使用名为 hexo 的镜像生成了名为 hexo_tmp 的容器
将主机的 D:\hexo_src 目录挂载到容器的 /hexo
创建了名为 hexo_node_modules 的卷挂载到容器的 /hexo/node_modules,卷在容器被销毁后并不会删除,可以在下次继续使用
将容器内的 4000 端口映射到主机的 4000 端口
指定启动容器运行结束后自动删除,启动的命令是 bash

生成成功后,启动容器:
docker start hexo_tmp
容器启动后,会在后台保持执行 bash 不会退出,此时再执行以下命令进入容器:
docker exec -ti -w /hexo hexo_tmp bash
进入到容器内的 bash,执行 npm install 安装依赖后,执行 hexo s 就可以在主机的 http://127.0.0.1:4000 看到 Hexo 的网页内容了。

以上生成和运行容器的命令,也可以使用一行 run 命令完成:
docker run -ti --name hexo_tmp -v "D:\hexo_src:/hexo" -v "hexo_node_modules:/hexo/node_modules" -w /hexo --rm -p 4000:4000 hexo bash
只不过在 run 命令执行的 bash 退出后,容器就会终止运行并删除。

这个容器因为是挂载了主机的目录,所以生成的网页文件也会保留下来,如果不是挂载了目录的话,需要复制文件可以使用以下命令:
复制 Hexo 目录到容器:
docker cp hexo_src hexo_tmp:/hexo
复制生成的网页文件到主机:
docker cp hexo_tmp:/hexo/public D:\html

以上就是简单的容器构建使用方法,如果需要构建同时执行多个容器,并且确定依赖关系,可以使用 Docker Compose
例如需要 mariadbnginxlnmp 环境,可以通过 docker-compose文件定义。
如果是需要在大规模云服务器集群运行管理大量的容器环境,可以使用 Kubernetes 部署和管理。