Dockerfile 文件
Dockerfile 实际上是一个文本文件,Docker Daemon(守护进程)通过识别该文件内容进行镜像构建
使用步骤
-
编写 Dockerfile (*.DockerFile)文件
-
通过 Dockerfile 文件构建镜像
# docker build [OPTIONS] PATH | URL | - # -f 独指定当前目录的Dockerfile文件 # -t 指定生成镜像标签 # PATH代表含有DockFile的目录,上面" . "指当前目录,千万别忘了! docker build -f node.DockerFile -t simple-node . -
然后选择镜像创建容器
docker run -dit --name testContainer -p 3000:3000 simple-node // 本地已存在node:16-alpine、simple-node 两个镜像(如果本地该镜像未存在,会自动构建一个,参考以下模板)
参考模板
最好了解常见的 FROM/ADD/CMD,RUN 可以有多个,CMD 只能有一个
# 选择一个体积小的镜像 (1~5MB),设置镜像别名server
FROM node:16-alpine as server
# 设置为工作目录,以下 RUN/CMD 命令都是在工作目录中进行执行
WORKDIR /code
# 把宿主机的代码添加到镜像中,--from<name>,指定镜像别名,可在构建多个镜像时使用
ADD --from=server . /code
# 输出文字
RUN echo "testContainer start "
# 映射容器接口
EXPOSE 3000
# 启动 Node Server
CMD node server
测试(本地)
curl localhost:3000
Docker Compose
docker compose 将 docker cli 选项(
docker xxx # 命令选项)翻译成配置文件,是更简单且更容易维护的方式,主要用于编排容器
使用步骤
-
编写 docker compose 文件(docker-compose.yaml)
-
常见命令
# 启动|停止|启动|重新启动容器服务 docker-compose <up|stop|start|restart> # 指定启动某个容器服务(假设已有某个名为'app'的容器服务,参考以下模板) docker-compose up app
参考模板
# compose文件格式版本,目前有1, 2.x 和3.x版本
# 3.x为主流版本 支持docker 1.13.0及其以上版本
version: '3'
# 定义服务,如下'app'是某个容器服务名
services:
app:
build:
context: . # 从当前路径构建镜像
dockerfile: node.DockerFile # 读取的DockerFile文件
ports:
- 3000:3000 # 端口映射
可能遇到的问题
-
docker-compose command not found
# 解决方案,使用yum源安装 yum install docker-compose -
none 镜像
- 有用镜像,通过
docker images -a命令才会显示的 none 镜像,这些镜像是镜像分层的中间镜像,不会造成空间损耗 - 无用镜像,通过
docker images命令显示的 none 镜像,由于新加镜像占用了原有镜像的标签,原有镜像就变成了 none 镜像,也称空悬镜像(dangling images)- docker 并没有自动删除这些镜像的机制,需使用命令
docker rmi $(docker images -f "dangling=true" -q) - 通用删除命令(删除镜像需要关闭依赖它的容器,否则报错)
docker rmi $(docker images | grep "none" | awk '{print $3}') - 有用镜像,通过