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命令