paas架构之docker——镜像管理

1. 镜像管理

1.1. 列出镜像

  Sudo docker imageshtml

   

1.2. 查看镜像

  Sudo docker images xxxxmysql

  

1.3. 拉取镜像

  Sudo docker pull ubuntunginx

   

1.4. 查找镜像

  Sudo docker search mysqlgit

  

1.5. 删除镜像

  sudo docker rmi xxxxx (force)github

  

1.6. 构建镜像

1.6.1. Docker commit

  不推荐,建议使用docker build+ docker fileweb

1.6.2. Docker Build + Dockerfile

  建立static_web目录sql

  建立Dockerfile配置文件:docker

  

  Build:ubuntu

  

1.6.3. 从git仓库构建镜像

  1)  git建立dockerfile缓存

   输入文件内容:

  # vesion: 0.0.1

  FROM ubuntu:14.04

  MAINTAINER Jay Zhan "zhanchenjin.2008@163.com"

  RUN apt-get install -y nginx

  RUN echo 'Hi, I am in you container' > /usr/share/nginx/html/index.html

  EXPOSE 8090

  

 

  2)  获取github中dockerfile文件的raw连接

  https://raw.githubusercontent.com/duruo850/docker/master/test.dockerfile

  简写

  https://rawgit.com/duruo850/docker/master/test.dockerfile

 

  3)  使用该连接build

  sudo docker build -t="jay/web_from_git" \

  https://rawgit.com/duruo850/docker/master/test.dockerfile

  

  

 

  4)  查看镜像

   

  5) 缓存镜像

  Docker的每一次构建都会缓存一个本地的镜像,因此从哪一步出错,就进入前镜像输入该命令便可知道什么问题;

  若是构建过程都是同样的,将采用同一个镜像

   

  若是不想使用缓存,好比apt-get update命令,将不会刷新apt包缓存,这时候须要不使用缓存

  sudo docker build –no-cache -t="jay/web_from_git" .

 

  6)  从镜像启动容器

  sudo docker run -i -t -p 10080:80 --name static_web2 jay/static_web nginx -g "daemon off;"

  使用宿主机的10080端口映射虚拟机的80端口

 

  查看宿主机的10080端口效果:

  

  

  和咱们nginx的index.html的输出内容一致

 

  7)  将镜像推送到docker hub

  报错:unauthorized: access to the requested resource is not authorized

  解决:须要使用docker login先登录

   

  只能上传到docker hub帐户对应的仓库(docker hub 帐户/xxxxxx),不能够上传到root仓库(xxxxx),

   

  

  

   去docker hub帐户查看仓库:

  

1.6.4. 自动构建

  源代码托管于github

  Github代码有变化时,dockerhub自动获取Dockerfile,自动构建docker容器

  Github

  Github代码的根目录须要提供Dockerfile配置文件

  

  DockerHub

  

  

  

  

  

  

 

1.6.5. Dockerfile指令

  • CMD命令

  CMD指令指定一个容器启动时要运行的命令。和RUN命令有些相似,只是RUN命令是构建是要运行的命令。RUN命令能够覆盖CMD命令

 

  新建dockerfile:

   

  构建镜像:

   

  启动镜像:

   

  RUN命令覆盖:

  Ls命令覆盖了/bin/bash命令

  • ENTRYPOINT命令

  ENTRYPOINT和CMD命令惟一区别就是不会被RUN命令覆盖

  RUN的命令行的参数会被当作参数再次传递给ENTRYPOINT命令

  RUN可使用—entrypoint标志覆盖该命令

  • WORKDIR命令

  建立镜像构建新容器时,在容器内部设置一个工做目录,ENTRYPOINT和/或者CMD命令都会在此目录下执行

  RUN可使用-W标志覆盖该命令

  • ENV命令

  在镜像构建过程当中设置环境变量

  环境变量会持久保存到镜像构建的任何容器中

  RUN可使用-e标志来传递环境变量,这些变量将只会在运行时有效

  • USER命令

  用来指定该镜像的运行用户

  RUN可使用-u标志来覆盖该变量

  若是不指定用户组,默认用户组为root

  • VOLUME命令

  用来向基于镜像构建的容器添加卷,数据共享功能

  • ADD命令

  用来将构建环境下的文件和目录复制到镜像中,

  能够添加构建环境的任何文件

  会将一些归档文件(gzip,tar,xz,bzip2)等解开,而后再放到目标目录

  若是目录位置不存在的话,Docker将会为咱们建立这个全路径,

  ADD命令使得构建缓存变得无效

  • COPY命令

  与ADD命令相似,不过COPY不会像ADD那样去提取和解开归档文件

  只能复制构建目录下的文件,和Dockerfile处于同一个目录

  若是目录位置不存在的话,Docker将会为咱们建立这个全路径,

  • ONBUILD命令

  为镜像添加触发器,当一个镜像被当作其余镜像的基础镜像时,该镜像的触发器将会执行

 

  为了防止递归调用,这些命令不能用在ONBUILD中:FROM, ONBUILD, MAINTAINER等

相关文章
相关标签/搜索