Docker官方起步文档总结-第二节:Dockerfile详解

官方起步文档—第二节: https://docs.docker.com/get-started/part2/#your-new-development-environment

Dockerfile文档:https://docs.docker.com/engine/reference/builder/#usage

Dockerfile

A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image.

dockerfile文件实际上就是一个包含了一堆指令的文件,在执行docker build path的时候,Docker的后台程序会自动从上至下依次执行dockerfile中的指令。

**注意:**执行docker build的时候,会将你填写的路径中的全部内容发送给Docker后台程序,因此千万不要使用根目录/作为build的路径,因为这么程序会将你的整个硬盘发送给Docker后台进程。

最佳实践:docker build path的时候,永远在新建的文件夹中执行。

.dockerignore

与.gitignore文件一样,可以在path目录下新建.dockerignore文件来避免发送、COPYADD某些希望忽略的文件。docker build的时候会先检查.dockerignore文件,之后才会将路径下的全部内容发送给Docker后台进程。

Dockerfile格式

# 注释
INSTRUCTION(命令) arguments(参数)

**最佳实践:**命令保持全部大写。虽然Docker本身并不要求一定需要大写,但是大写可以更好的区分命令与参数。

注意:#的注释只有在一行的开头才会认为是注释,出现在一行中的其他地方均会被当成正常字符。

常用Dockerfile命令

  • FROM <image>[:<tag>] [AS <name>]使用哪一个基础image来build(构建)新的image,每一个Dockerfile必须至少有一个FROM命令。如果不设置tag,默认使用lastest标签的image。
  • ENV <key> <value>设置环境变量,dockerfile本身可以使用${var}来使用环境变量。最终生成的容器中也可以通过不同程序调用系统的接口,获取到该环境变量。例如python的os包中的os.getenv()。
  • RUN <command>执行任意的shell命令。
  • CMD ["executable","param1","param2"]执行shell命令,和RUN的区别就是CMD指令只会执行最终的那一条设置,因此一般用来结尾执行某些只需要执行一次的命令。**注意:**该指令格式,RUN命令也支持。
  • LABEL <key>=<value>为image设置一些元数据,例如作者、版本等,使用docker inspect imagename可以查看image的label。
  • EXPOSE <port> [<port>/<protocol>...]对外界暴露指定的端口以及协议。
  • ADD [--chown=<user>:<group>] <src>... <dest>将src的文件、内容,新增到image的dest目标路径中。并清除src的源文件。
  • COPY [--chown=<user>:<group>] <src>... <dest>将src的文件、内容,复制到image的dest目标路径中。不会清除src的源文件。
  • VOLUME ["dir",...]生成一个挂载点。关于更多挂载点的内容,可以查看这里
  • USER <user>[:<group>]设置运行shell命令的用户与用户组。
  • WORKDIR /path/to/workdir工作路径,dockerfile中所有的命令都会以workdir为根目录。

构建/运行image

  • docker build -t imagename path构建image,并命名。
  • docker run -p 4000:80 imagename运行image并将暴露的80端口绑定至本机的4000端口,如果这里的image本地不存在,docker会尝试从远端直接pull并运行该image。

分享、上传image

  • docker login登录docker,需要先在hub.docker.com注册,所需的用户名不是邮箱而是唯一的用户名。
  • docker tag image username/repository:tagtag image。
  • docker push username/repository:tag发布image至远端。

常用指令列表:

  • docker ps # 查看运行中的container
  • docker image ls # 查看image list
  • docker image rm #删除指定的image
  • docker inspect # 查看image label信息
  • docker container ls # 查看container list
  • docker container ls --all # 查看全部模式的container
  • docker login # 登录docker
  • docker tag username/repository:tag # tag image
  • docker push username/repository:tag # 推送image至远端
  • docker run username/repository:tag # 运行image

欢迎大家关注我的个人博客:http://blog.geek-scorpion.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我想将frontend 也是用volumes,将其映射到/app/frontend目录,在/app/frontend下install以及build,如何实现 docker-compose.yml文件: version: '3' services: frontend: build: context: ./frontend dockerfile: Dockerfile ports: - 8010:80 restart: always backend: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: python manage.py runserver 0.0.0.0:8000 ports: - 8011:8000 restart: always celery-worker: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: celery -A server worker -l info --pool=solo --concurrency=1 depends_on: - redis - backend restart: always celery-beat: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: celery -A server beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler depends_on: - redis - backend restart: always redis: image: redis:latest ports: - 6379:6379 restart: always mysql: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=sacfxSql258147@ ports: - 8016:3306 volumes: - ./mysql:/var/lib/mysql restart: always frontend:dockerfile文件 FROM node:16.18.1 WORKDIR /app/frontend COPY package*.json ./ RUN npm install COPY . . RUN npm run build:prod FROM nginx:latest COPY --from=0 /app/frontend/dist/ /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
07-14

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值