Docker常用命令--镜像


1、删除镜像image:
docker rmi -f name|imageId
$ docker rmi -f 7d9495d03763
$ docker rmi-fdocker-whale
 
2、将本地镜像推送到hub.docker.com上
首先找到你要推送的iamge_id,可以通过  docker images查看全部镜像
之后使用  docker tag 7d9495d03763 maryatdocker/docker-whale  会产生一个maryatdocker/docker-whale的镜像
使用docker login 登陆到远程hub.docker.com上,加上用户验证信息登陆
登陆成功之后 : docker push maryatdocker/docker-whale  将镜像推送到服务器上
 
3、从服务器上拉取镜像
首先删除本地存在名字相同的镜像
docker pull 镜像名称  拉取镜像
docker run maryatdocker/docker-whale 下载并运行镜像
 
4、查看镜像:本地镜像
查看本地所有镜像  : docker images 
根据名称查看某一个镜像: docker images 镜像名称
查看镜像的详细信息: docker inspect jametur01/apche2:webserver
 
5、查找镜像:从docker hub上查找镜像
docker search 镜像名称
 
7、构建镜像
前提: 登陆账号在docker hub上
两种方式:
1) docker commit 命令
     首先创建一个容器,并在容器中进行修改,最后在将修改提交为一个新镜像
     创建一个容器: sudo docker run -t -i ubuntu /bin/bash 
     对容器进行修改: 如安装apche
                    apt-get -ypp update
                    apt-get -y install apache2
     提交新修改的镜像: sudo docker commit 容器Id 目标镜像仓库和镜像名称
          也可以增加其他详细的信息: -m =A new customer images""  --author="James B"
2) docker build 和 Dockerfile文件(推荐使用)
     使用基于DSL语法的指令来构建一个Docker镜像,之后使用docker build 命令基于Dockerfile中的指令构建一个新的镜像
·    创建基本目录:
          mkdir static_web  ===============该目录为构建环境,docker中称该目录为上下文或是构建上下文
          cd static_web
          touch Dockerfile
     编写Dockerfile文件:
              Dockerfile文件:
                    FROM ubuntu:14.04   ===========指定一个已经存在的镜像当作基础镜像
                    MAINTAINER James Turnbull "james@example.com"  ===告诉镜像的作者是谁
                    RUN apt-get update   =====RUN 运行你指定的命令,每条RUN都会创建一个新的镜像层,执行成功提交镜像层
                    RUN apt-get install -y nginx    ==========默认情况下RUN是在shell里使用/bin/sh -c执行,若是在不支持shell可以使用exec格式
                    exec: RUN ["apt-get","install","-y","nginx"]
                    RUN echo 'hi, i am in you container' \>/usr/share/nginx/html/index.html
                    EXPOSE 80                  =============指定应用程序使用的端口号,可以使用多个EXPOSE指令向外部公开多个端口号
          Dockerfile中的指令按照顺序往下执行
               执行流程: Docker从基础镜像运行一个容器;执行每一条指令,对容器进行修改;执行类似docker commit的操作,提交一个新的镜像层;docker再基于刚提交的镜像运行一个新的容器;执行Dockfile中的下一条指令,直到所有指令都执行完毕
     构建新镜像:
          cd static_web
          sudo docker build -t="jamtur01/static_web:v1" .
                   -t 为新镜像指定仓库和名称,也可以制定标签v1,若是没有指定标签,docker会自动为镜像设置一个latest标签
       构建镜像粗壮乃构建缓存,若是想要去掉构建缓存需要添加参数: --no-cache,构建缓存的好处是可以实现简单的Dockerfile模板
 
 
8、Dockerfile指令:
    。CMD :
          用于指定一个容器启动时要运行的命令,类似于RUN,只不过RUN是在镜像构建时要运行的命令,而CMD是在容器启动时需要运行的命令,这和docker run启动容器时指定要运行的参数非常相似:
          docker run -i -t jamtur01/statis_web /bin/true
          CMD ["/bin/true"], 也可以指定参数 CMD p["bin/bash","-1"]
      注: docker run中运行的命令会覆盖Dockerfile的CMD中的命令
     。ENTRYPOINT:
          和CMD的命令用法相同,作用相似,区别是,ENTRYPOINT指令提供的命令不容易在启动时被覆盖。实际上,docker run 命令行中指定的任何参数都会被当作参数再次传给ENTRYPOINT指令中指定的命令。如果确实需要覆盖ENTRYPOINT命令,可以通过docker run --entrypiont标志覆盖
            ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
          可以通过CMD和ENTRYPOINT一起用的方式使镜像既可以运行一个默认的命令,也可以通过docker run使指定可覆盖的选项或是标志
               如:ENTRYPOINT ["/usr/sbin/nginx"]
                   CMD ["-h"]
 
     。WORKDIR:
          用来在从镜像创建一个容器时,在容器内部设置一个工作目录,ENTRYPOINT 或是CMD的命令会在该目录下执行。
              WORKDIR /opt/webapp/ab
              RUN bundle install
              WORKDIR /opt/webapp
              ENTRYPOINT ["rackup"]
           docker run中使用 -w 覆盖工作目录
     。ENV :
          用来在镜像构建过程中设置环境变量,
               ENV  RVM_PATH /home/rvm
     。USER :
          指定该镜像一什么样的用户去运行
     。VOLUME :
          向基于镜像创建的容器添加卷,一个卷是可以存在于一个或多个容器内的特定的目录,这个目录可以绕过联合文件系统,并提供如下共享数据或是对数据进行持久化的功能。
               。卷可以在容器间共享和重用
               。一个容器可以不是必须和其他容器共享卷
               。对卷的修改是立时生效的
               。对卷的修改不会对更新镜像产生影响
               。卷会一直存在直到没有任何容器在使用它
          如: VOLUME ["/opt/project"] 将会为基于此镜像创建的任何容器创建一个名为/opt/project的挂载点,
               VOLUME ["/opt/project","/data"]指定多个卷
     。ADD :
          用来将构建环境下的文件和目录复制到镜像中。形式:ASS fromWhere  towhere 。 目的地址若是末尾/,则是文件夹,无/则是文件。文件源也可是URL格式
          如: ADD software.lic /opt/application/software.lic
          ADD在处理本地归档文件时,如gzip,bzip2,xz为源文件,则会自动对其进行unpack
          ADD latest.tar.gz /var/ww/  =============会将文件解压到/var/ww/目录下,若是该文件夹下已经存在该文件,不会进行覆盖操作
          注:ADD命令会使构建缓存失效,若是使用ADD向镜像添加文件夹或是文件,那么后续的命令就不能用之前的缓存
     。COPY :
          COPY命令类似于ADD命令,不同的是COPY命令只关心在构建上下文中复制本地文件,而不会去做文件提取和解压的共作。
          COPY  conf.d/ /etc/apche2/ ==>使conf.d文件夹下的内容复制到/etc/apche2/下
          文件源路径必须是一个与当前构建环境相对的文件或是目录,本地文件都放到和Dockerfile同一个目录下。不能复制该目录之外的任何文件,因为构建环境将会上传到Docker守护进程,而复制是在Docker守护进程中进行的。任何位于构建环境之外的东西都是不可用的。COPY指令的目的文职则必须是容器内部的一个绝对路径。
          任何由该命令创建的文件或是目录的GID和UID的值都为0.
     。ONBUILD 
          为镜像添加触发器trigger 。当一个镜像被用作其他镜像的基础镜像时触发器会被执行
          触发器会在构建过程中插入新指令,我们可以认为这些指令是紧跟在FROM之后指定的,触发器可以是任何构造指令。
               如: ONBUILD ADD . /app/src
                                   ONBUILD RUN cd /app/s& make
           可以用docker inspect命令查看 ONBUILD命令


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM