Dockerfile 使用

100 阅读2分钟

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}')