Dockerfile常用命令

1.简介
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

2.构建三步骤
编写Dockerfile文件
docker build
docker run

3.Dockerfile解析过程
3.1 Dockerfile内容基础知识
(1)每条保留字指令都必须为大写字母且后面要跟随至少一个参数
(2)指令按照从上到下,顺序执行
(3)#表示注释
(4)每条指令都会创建一个新的镜像层,并对镜像进行提交
3.2 Docker执行Dockerfile的大致流程
(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit 的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成
Dockerfile常用命令_第1张图片
4.Dockerfile结构体系
4.1 保留字指令
FROM : 基础镜像,当前镜像是基于哪个镜像的
MAINTAINER : 镜像维护着的姓名和邮箱地址
RUN:容器构建时需要运行的命令
EXPOSE: 当前容器对外暴露的端口号
WORKDIR: 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV: 用来在构建镜像过程中设置环境变量
ADD: 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY: 类似于ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内<目标路径>位置。(COPY src dest)(COPY [“src”,“dest”])
VOLUME: 容器数据卷,用于数据保存和持久化工作
CMD: 指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT: 指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。(追加 不会被覆盖)
ONBUILD: 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

5 . 案例
5.1 base镜像(scratch)
DockerHub 中99%的镜像都是通过base镜像中安装和配置需要的软件构建出来的
5.2 自定义镜像myUbuntu
(1)编写Dockerfile文件
在根目录下创建一个文件夹myDocker,并创建一个Dockerfile文件

cd /
sudo mkdir myDocker
cd myDocker
sudo gedit Dockerfile2

在Dockerfile2(因为我之前在这个文件夹下有个Dockerfile,所以这次新建一个在后面添加个2,按自己意愿) 中添加:

FROM ubuntu:18.04
MAINTAINER wjy

ENV MYPATH /usr/local      #设置环境变量
# ADD sources.list /etc/apt/
WORKDIR $MYPATH
#COPY test  ./test   #将宿主机目录里的内容 复制 到 镜像/usr/local/test目录下
RUN apt-get update    #更新包索引
RUN apt-get -y install vim    #创建镜像时 安装vim
RUN apt-get -y install net-tools
RUN apt-get -y install gedit

EXPOSE 80                      #对外端口号

CMD echo $MYPATH             #打印
CMD echo "success--------ok!"
CMD /bin/bash                 #使用bash解释器

(2)然后build

sudo docker build -f /myDocker/Dockerfile2 -t myubuntu:1.0 .  #-t后面的标签必须得小写,不然会出错,最后一个"." 表示在当前文件夹下执行   

经过一系列构建,myubuntu:1.0构建成功了
Dockerfile常用命令_第2张图片
Dockerfile常用命令_第3张图片
(3)运行

sudo docker run -it myubuntu:1.0

或者指定名字或端口号:

sudo docker run -it --name myUbuntu ubuntu:18.04  #新建一个Ubuntu18.04容器 ,取别名myUbuntu ,并启动
sudo docker run -it -p 8888:8080 tomcat #docker端口8888映射tomcat端口8080    p 指定端口
sudo docker run -it -P tomcat    # dockerP随机生成端口 映射 tomcat 端口8080

如果想将宿主机上的文件拷到容器中,也可以在创建好容器后在使用docker cp来拷贝:
例如:将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。

docker cp /www/runoob 96f7f14e99ab:/www/

将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。

docker cp /www/runoob 96f7f14e99ab:/www

将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。

docker cp  96f7f14e99ab:/www /tmp/

(4)导出镜像

sudo docker save -o /home/xxx/ubuntu_16.04.tar  ubuntu:16.04  #将ubuntu:16.04导出到 /home/xxx/ 名字为ubuntu_16.04.tar

Dockerfile常用命令_第4张图片
从上图可以看到 容器的初始目录变成了/usr/local,同时也可以使用 vim gedit 等工具了

(4)列出镜像的变更历史,docker history +镜像名

sudo docker history 

Dockerfile常用命令_第5张图片
5.4 本地镜像推到阿里云
(1)查看镜像,进入myubuntu:1.0镜像生成的容器,重新commit一个2.0版本的镜像

sudo docker images
sudo docker run -it myubuntu:1.0

ctrl +P+Q 不停止退出

sudo docker ps 
sudo docker commit -m "new myubuntu 2.0" -a wjy af5fb67febf3 myubuntu:2.0

下图可以看到生成了myubuntu:2.0版本的镜像
Dockerfile常用命令_第6张图片
(2)推向阿里云
进入阿里云网页:阿里云
自己可以注册账号,注册好后在容器镜像服务中点击创建镜像仓库
Dockerfile常用命令_第7张图片
进去后先点击 创建命名空间
Dockerfile常用命令_第8张图片

Dockerfile常用命令_第9张图片
Dockerfile常用命令_第10张图片
下一步,选本地仓库,创建镜像仓库

在这里插入图片描述
点击 管理,找到下面位置
Dockerfile常用命令_第11张图片

sudo docker login --username=哈书说大话 registry.cn-hangzhou.aliyuncs.com

会出现以下问题,一直没解决。。。
在这里插入图片描述
剩下的两条命令就是将ImageId改成自己的,镜像版本号改成自己想要的就行了。
遗憾的是上述那个问题没解决,希望哪位大神不吝赐教。。。
5.3 小结
Dockerfile常用命令_第12张图片

你可能感兴趣的:(Docker,docker)