在dockerfile
dockerfile常用指令
FROM 指定base镜像
MAINTAINER 设定镜像的作者
COPY 将文件build context到镜像(上下文)
ADD 和COPY类似 如果scr为归档文件,文件会被解压到dest
ENV 设置环境变量
ENV tools net-tools
RUN yum install $tools
EXPOSE 指定容器中的进程监听某个端口,docker可以将这个端口暴露出来
VOLUME 将文件或目录声明为volume(卷) 等效于 -v 参数
WORKDIR 为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录
RUN 在容器中运行指定命令
CMD 在容器中运行指定命令
ENTRYPOINT 设置容器启动时运行的命令
例
FROM busybox
WORKDIR /test
RUN touch tmp
COPY tmp2 .
ADD bun.tar.gz .
ENV welcome "you are in my container"
1、RUN执行命令并创建镜像层,RUN经常在安装软件时使用
2、CMD设置容器启动后执行的命令及其参数,但是可以被docker run后面跟的命令行参数替换掉
3、ENTRYPOINT设置容器启动时运行的命令
两种命令风格
- shell
<命令> <命令>
RUN apt-get install python3
CMD echo "Hello world"
ENTRYPOINT echo "Hello world”
- exec
<命令> [“指令”,”参数”,”对象”]
ENV name cloud man
ENTRYPOINT [“bin/bash”,”-c”,”echo hello $name"]
RUN在当前镜像的顶层执行命令,创建新的镜像层
RUN apt-get update && apt-get install -y xxx xxx \ xxxx \ xxxxx
CMD指令允许用户指定容器的默认执行的命令
此命令会在docker run 没有指定其他命令的时候运行
1、docker run 指定了其他命令 CMD 指定的命令失效
2、如果dockerfile中有多条CMD命令,只有最后一条生效
ENTRYPOINT指令可让容器以应用程序或者服务的形式运行
不同于CMD的指令ENTRYPOINT指令不会被忽略,一定会被执行
,即使 docker run 指定其他命令
在多个docker host上使用镜像
1、使用相同的dockerfile在其他host 上重新构建镜像
2、将镜像上传到公共Registry,host直接下载使用
3、搭建私有的Registry
特定的镜像名由 repository和tag
组成
- image name = repository:tag
如果运行命令时没有指定tag 默认使用latest
# docker build -t ubuntu:latest .
Tag 常用于描述镜像的版本
latest其实并没用特殊的含义
docker tag 镜像名 镜像名
使用公共Registry
docker hub 是docker公司维护的公共镜像库
docker login -u username
修改镜像的repository与hub账号匹配 docker 为了区分不同用户的同名镜像
格式为:
username/repository:tag
docker push cinder/ubuntu-vim:16:04
官方维护的镜像没有用户名
Docker 会上传镜像的每一层如果base镜像是hub 上pull 的其实hub已经有全部的镜像层,只有很少的内容被上传
如果想上传同一个repository的所有镜像,省略tag就可以了
搭建本地Registry
# docker run -d -p 5000:5000 -v /data/:/var/lib/registry registry:2
>-d:后台运行容器
-p:将容器的端口映射到host主机(registry服务端口5000)
-v:将容器的/var/lib/redistry目录映射到host/data
images 显示镜像列表
history 显示镜像构建历史
commit 从容器创建新镜像
build 从 Dockerfile 构建镜像
tag 给镜像打 tag
pull 从 registry 下载镜像
push 将 镜像 上传到 registry
rmi 删除 Docker host 中的镜像
search 搜索 Docker Hub 中的镜像
网友评论