七叶笔记 » golang编程 » DockerFile 命令总结

DockerFile 命令总结

FROM [:] [AS ]: 设置基础镜像

FROM alpine:latest 

RUN \ [“executable”, “param1”, “param2”]: 执行shell脚本。进来少使用RUN,因为没执行一次 docker 就会增加一层只读层。

RUN /bin/bash -c 'source $HOME/.bashrc; \echo $HOME'等同于RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'等同于RUN ["/bin/bash", "-c", "source $HOME/.bashrc; echo $HOME"] 

CMD [“executable”,”param1″,”param2″] \ [“param1″,”param2”] \ command param1 param2: Docker File中只有一个CMD,多于一个将执行最后一个。它的意思差不多就是启动容器后执行的默认命令。

FROM *:*CMD ["catalina.sh", "run"] 

LABEL = = … : 镜像标签

LABEL "com. example .vendor"="ACME Incorporated"LABEL com.example.label-with-value="foo"LABEL version="1.0"LABEL description="This text illustrates \that label-values can span multiple lines." 

EXPOSE [/…]: 暴露容器的端口

EXPOSE 80/tcpEXPOSE 80/udp 

ENV \ =: 设置容器 环境变量 。可以使用docker run –env =修改环境变量

ENV myName John DoeENV myDog Rex The DogENV myCat fluffy 

ADD [–chown=:] … \ [–chown=:] [“”,… “”]: 拷贝一个新文件,或者文件夹或者远程文件的 URLS,把他们添加到,镜像的文件系统中。 为绝对路径或者由WORKDIR定义的相对路径。

 
  1. ADD hom* /mydir/ # 添加所有以 "hom" 开头的文件

  2. ADD hom?.txt /mydir/ # ? 替换任何单个的字符, e.g., "home.txt"

  3. ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/

  4. ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/

  5. ENV cpath /home/zb

  6. ARG zbpath=/home/lala

  7. WORKDIR $cpath

  8. ADD **. jpg $cpath

  9. ADD **.jpg $zbpath

  10. # 添加含有特殊字符的文件或者文件夹时如“[]”,需要遵循 golang 的规则将它们进行转义,以防它们为匹配模式

  11. ADD arr[[]0].txt /mydir/ # 复制一个文件名为 "arr[0].txt" 到 /mydir/

  12. # 通过 --chown 指定添加文件或者文件夹的用户名和组名

  13. ADD --chown=55:mygroup files* /somedir/

  14. ADD --chown=bin files* /somedir/

  15. ADD --chown=1 files* /somedir/

  16. ADD --chown=10:11 files* /somedir/

COPY [–chown=:] … / [–chown=:] [“”,… “”]: 与 ADD命令差不多。

ENTRYPOINT [“executable”, “param1”, “param2”] / command param1 param2: 容器启动后执行该命令。如果定义ENTRYPOINT 那么CMD形式就变为CMD [“param1″,”param2”] json数组中变为ENTRYPOINT的第一个参数和第二个参数

ARG VERSION=latestFROM alpine:$VERSIONENTRYPOINT ["ls", "-la"] 

ENTRYPOINT与CMD的比较

1.当有多个ENTRYPOINT CMD它们都只执行最后一个

2.当容器为一个可执行文件时应该定义ENTRYPOINT

3.当同时定义ENTRYPOINT 和 CMD时,CMD为ENTRYPOINT的默认参数

4.当docker执行run命令时,在里面指定CMD时,CMD将会被重写。

VOLUME [“/data”]: 在制作镜像时挂载卷。会在宿主机上自动生成一个对应的共享目录。

 
  1. RUN mkdir /data1

  2. RUN touch /data1/2a.txt

  3. VOLUME /data1

  4. # 通过命令 docker inspect hasVvolume

  5. "Mounts": [

  6. {

  7. "Type": "volume",

  8. "Name": "0d63fcdf621ee728bb85dfcc2b30f3acddf6489a0e93b81ced17f05860497321",

  9. "Source": "/var/lib/docker/volumes/0d63fcdf621ee728bb85dfcc2b30f3acddf6489a0e93b81ced17f05860497321/_data",

  10. "Destination": "/data1",

  11. "Driver": "local",

  12. "Mode": "",

  13. "RW": true,

  14. "Propagation": ""

  15. }

  16. ]

  17. ========================================================================================================================

  18. # 也可以通过 docker run -v 来挂载共享目录,这时 Source 指出 -v 时定义的目录

  19. "Mounts": [

  20. {

  21. "Type": "bind",

  22. "Source": "/Users/zhangbo/Desktop/data1",

  23. "Destination": "/data1",

  24. "Mode": "",

  25. "RW": true,

  26. "Propagation": "rprivate"

  27. }

  28. ]

容器中共享目录

# 使用 --volumes-from,达到容器中文件夹共享docker run -itd --name noVvolume-v-1 --volumes-from noVvolume-v 48cd9e43b6a9 

USER [:] / [:]: 给镜像添加一个用户

WORKDIR /path/to/workdir or WORKDIR to_workdir /path/to/workdir: 为 RUN, CMD, ENTRYPOINT, COPY, ADD 创建工作目录

ENV DIRPATH /pathWORKDIR $DIRPATH/$DIRNAMERUN pwd 

ARG [=] : docker file中的变量

 
  1. FROM busybox

  2. ARG user1="zhang bo"

  3. ARG buildno

  4. RUN echo $user1

  5. RUN echo $buildno

  6. Step */* : RUN echo $user1

  7. ---> Running in a56a602a8f87

  8. zhang bo

  9. Removing intermediate container a56a602a8f87

  10. ---> 3e9c6ec19129

  11. Step */* : RUN echo $buildno

  12. ---> Running in 6598768a1080

预制变量

 
  1. FROM ubuntu

  2. ARG CONT_IMG_VER

  3. ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0}

  4. RUN echo $CONT_IMG_VER

  5. # 可以通过 --build-arg 标签进行给定的预制的变量。--build-arg <varname>=<value>

  6. docker run --build-arg CONT_IMG_VER=******* .

docker 常用命令如下

管理命令:

 
  1. container 管理容器

  2. image 管理镜像

  3. network 管理网络

  4. node 管理Swarm节点

  5. plugin 管理插件

  6. secret 管理Docker secrets

  7. service 管理服务

  8. stack 管理Docker stacks

  9. swarm 管理Swarm集群

  10. system 查看系统信息

  11. volume 管理卷

  12. 如:docker container ls 显示所有容器

普通命令:

 
  1. attach 进入一个运行的容器

  2. build 从一个DockerFile构建镜像

  3. commit 从容器创建一个镜像

  4. cp 从容器和主机文件系统之间拷贝文件

  5. create 创建一个容器

  6. diff 检查容器文件系统上的更改

  7. events 从服务器获取实时事件

  8. exec 在正在运行的容器中运行命令

  9. export 将容器的文件系统导出为tar存档

  10. history 显示镜像的历史记录

  11. images 查看镜像列表

  12. import 从归档文件中创建镜像

  13. info 显示系统范围的信息

  14. inspect 返回Docker对象的低级信息

  15. kill kill运行中的容器

  16. load 从存档或者STDIN加载镜像

  17. login 登陆docker镜像仓库

  18. logout 退出docker镜像仓库

  19. logs 获取一个容器的日志

  20. pause 暂停一个或多个容器中的所有进程

  21. port 查看端口映射或容器的特定映射列表

  22. ps 查看容器列表

  23. pull 从镜像仓库拉取镜像

  24. push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

  25. rename 重命名容器

  26. restart 重启容器

  27. rm 删除容器

  28. rmi 删除镜像

  29. run 创建一个新的容器并运行一个命令

  30. save 将指定镜像保存成 tar 归档文件

  31. search 从Docker Hub搜索镜像

  32. start 启动容器

  33. stats 实时显示容器资源使用情况的统计信息

  34. stop 停止容器

  35. tag 标记本地镜像,将其归入某一仓库

  36. top 展示一个容器中运行的进程

  37. unpause 恢复容器中所有的进程

  38. update 更新容器配置

  39. version 显示Docker的版本信息

  40. wait 阻塞直到容器停止,然后打印退出代码

  41. 如:docker images 显示所有镜像

相关文章