上一章中我们讲了一些docker的基本概念,以及构建镜像,并运行,以及docker的基本概念和如何docker进行shell交互,比如说使用docker run -it --rm 镜像名称 base命令,
虚悬镜像
当新镜像和原来的镜像同名的时候,原镜像则会将名字取消掉,取而代之的则是新的镜像,原来的镜像就会显示
使用$ docker image ls -f dangling=true命令查看
一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。 $ docker image prune
$ docker image ls -a 查看中间层镜像
列出部分镜像
docker image ls ubuntu
$ docker image ls ubuntu:14.04
-f是fifter的缩写 ,也就是过滤的意思
docker image ls -f since=mongo:3.2
-q 列出镜像id,配合-f 列出镜像id 作为 docker rm的参数
go格式化
$ docker image ls --format "{{.ID}}: {{.Repository}}"
删除本地镜像
docker image rm [选项] [ ...],一般情况下 使用id作为参数删除就可以,但是我们也可以用长id的前三位就可以表示镜像了,但是更常用的则是
--digests 摘要信息进行删除,
当前镜像之中,如果属于某个容器,不乱容器启动没启动,都不可以删除,应该先删除容器,再删除镜像,命令则是docker rm
下面则是构建一个nginx的镜像
docker run --name webserver -d -p 80:80 nginx,可以看到nginx 映射了80端口,这个时候就可以访问本台虚拟机的nginx了
你也可以使用exec命令执行脚本
docker exec -it webserver bash
root@3729b97e8226:/# echo '
Hello, Docker!
' > /usr/share/nginx/html/index.html
root@3729b97e8226:/# exit
这样我们就修改了容器的底层,再次访问本机则可以看到
使用 Dockerfile 定制镜像
dockerfile文件第一行必须是from指令,FROM 指定基础镜像,但是使用FROM scratch 则表示不以任何镜像为基础的镜像
RUN 执行命令
run有两种方式:
RUN echo 'Hello, Docker!' /usr/share/nginx/html/index.html这种称之为shell
下面则是exec方式
exec 格式: RUN ["可执行文件", "参数1", "参数2"] ,
FROM debian:jessie RUN apt-get update RUN apt-get install -y gcc libc6-dev make RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" RUN mkdir -p /usr/src/redis RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 RUN make -C /usr/src/redis RUN make -C /usr/src/redis install
不过这种方式没有必要,因为每run一次,就会新建一层镜像,等到我们命令执行完成之后,则会新建7个镜像,
构建镜像
那么就在刚刚创建的文件夹中使用
docker build d -t nginx:v3 命令构建镜像吧,
build命令格式为:
docker build [选项] <上下文路径>
镜像构建上下文(Context)
docker上下文路径,表示docker会将这个上下文路径中的内容打包给docker远程仓库,这里需要记住的是,上下文路径都是相对路径,../或者/opt 会发现docker找不到路径上的文件,因为这已经超出了docker的目录范围,
甚至build 命令可以直接使用url 构建镜像
docker build https://github.com/twang2218/gitlab-ce-zh.git#:8.14
使用压缩包构建
docker build http://server/context.tar.gz