使用镜像

一)获取镜像

查看网络中的镜像:

docker search redis

从Docker镜像仓库获取命令的格式是:

docker pull [选项] [Docker Registry 地址[:端口号]] 仓库名[:标签]

具体的选项可以通过docker pull --help查看,例子:

docker pull ubuntu:18.04 #默认地址为Docker Hub,仓库名(<用户名>/<软件名>格式)中默认用户名libray

二)列出镜像

列出已经下载的镜像:

docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 568c4670fa80 weeks ago 109MB
ubuntu 18.04 93fd78260bd1 weeks ago .2MB

显示包括中间层镜像的所有镜像:

docker image ls -a

列出部分镜像:

docker image ls ubuntu

使用过滤参数:

docker image ls -f since=ubuntu:16.04

仅列出ID:

docker image ls -q

这里的size并非镜像的实际所占的内存空间,要查看镜像、容器、数据卷所占用空间:

docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images .3MB .3MB (%)
Containers 0B 0B
Local Volumes 0B 0B
Build Cache 0B 0B

三)删除镜像

docker image rm [选项] <镜像1> [<镜像2......>]

其中镜像1,镜像2可以是镜像的ID,名称,摘要

举例:

docker image rm $(docker image ls -q redis)
docker image rm $(docker image ls -q since=ubuntu:18.04)

四)使用Dockerfile定制镜像

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

1.使用FROM指定基础镜像

FROM指令是必备指令,且必须是第一条指令。例子

FROM ubuntu:18.04
#使用空白镜像为基础镜像
FROM scratch

2.使用RUN执行命令

RUN指令用来执行命令,其格式有两种

1)shell格式:RUN <命令>    例如:

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

2)exec格式:RUN ["可执行文件","参数1","参数2"]

Dockerfile中的每一个指令都会建立一层,RUN也不例外,错误写法:

FROM debian:stretch

RUN apt-get update
RUN apt-get install -y gcc libc6-dev make wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN mkdir -p /usr/src/redis

正确写法:

RUN buildDeps='gcc libc6-dev make wget' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components= \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps #清理命令

3.构建镜像

构建命令需要在Dockerfile文件所在的目录执行,命令格式为:

docker build [选项] <上下文路径/URL/>

例如

docker build -t nginx:v3 .

4.理解镜像构建上下文(Context) 

当构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。

5.其他docker build用法

1)直接用git repo构建

docker build https://github.com/twang2218/gitlab-ce-zh.git#:11.1
#其中构建目录为/11.1/

2)用tar包构建

docker build http://server/context.tar.gz

3)从标准输入中读取

docker build - < Dockerfile
cat Dockerfile | docker build -

五)Dockerfile命令详解

1.COPY

该命令用于复制文件,其格式为:

COPY [--chown=<user>:<group>] <源路径>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]

注意:使用该指令复制的文件,各种元数据都会被保留。例子:

COPY hom* /mydir/
COPY hom?.txt /mydir/
COPY --chown=:mygroup files* /mydir/
COPY --chown=bin files* /mydir/
COPY --chown= files* /mydir/
COPY --chown=: files* /mydir/

<目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径

2.CMD容器启动命令

用于指定默认容器主进程的启动命令。

CMD命令格式:

shell 格式:CMD <命令>
exec 格式:CMD ["可执行文件", "参数1", "参数2"...]
参数列表格式:CMD ["参数1", "参数2"...]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。

例如:

CMD echo $HOME

3.ENTRYPOINT入口点

https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/entrypoint.html

4.ENV设置环境变量

5.ARG构建参数

6.VOLUME定义匿名卷

7.EXPOSE暴露端口

8.WORKDIR指定工作目录

六)使用多阶段构建

FROM golang:1.9-alpine as builder

RUN apk --no-cache add git

WORKDIR /go/src/github.com/go/helloworld/

RUN go get -d -v github.com/go-sql-driver/mysql

COPY app.go .

RUN CGO_ENABLED= GOOS=linux go build -a -installsuffix cgo -o app .

FROM alpine:latest as prod

RUN apk --no-cache add ca-certificates

WORKDIR /root/

COPY --from= /go/src/github.com/go/helloworld/app .

CMD ["./app"]

构建镜像

docker build -t go/helloworld: .

对比三个镜像的大小:

docker image ls
REPOSITORY        TAG   IMAGE ID         CREATED            SIZE
go/helloworld d6911ed9c846 seconds ago .47MB
go/helloworld f7cf3465432c seconds ago .47MB
go/helloworld f55d3e16affc minutes ago 295MB

我们可以使用 as 来为某一阶段命名:

FROM golang:1.9-alpine as builder

例如当我们只想构建 builder 阶段的镜像时,增加 --target=builder 参数即可

docker build --target builder -t username/imagename:tag .

构建时从其他镜像复制文件

上面例子中我们使用 COPY --from=0 /go/src/github.com/go/helloworld/app . 从上一阶段的镜像中复制文件,我们也可以复制任意镜像中的文件。

COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf

Docker操作笔记(一)使用镜像的更多相关文章

  1. docker学习笔记3:镜像操作(查找和下载)

    一.查看本地镜像 只有下载后,镜像才会保存在本地(docker环境所在的主机),通过如下命令可以查看本地已经存在的镜像. 命令:dokcer images 上面命令列出本地所有已经存在的镜像,显示的信 ...

  2. Docker学习笔记之从镜像仓库获得镜像

    0x00 概述 之前我们说到了,Docker 与其他虚拟化软件的一处不同就是将镜像管理纳入到了功能之中.实现虚拟化只是程序能够无缝移植的一部分,而有了镜像管理,就真正取代了我们在移植过程中的繁琐操作. ...

  3. docker操作笔记

    1.查看docker版本:docker info /docker  version2.使用 docker run 命令来在容器内运行一个应用程序.如输出helloworld:docker run ub ...

  4. Docker操作笔记(二)容器

    容器 一.启动容器 启动一个容器有两种方式: 1.基于镜像新键并启动一个容器: 所需要的主要命令为docker run docker run ubuntu:18.04 /bin/echo " ...

  5. Docker学习笔记二 使用镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10408363.html  Docker运行容器前,需本地存在对应镜像,若没有则Docker从镜像仓库下载该镜像.  镜 ...

  6. Docker操作笔记(三)数据管理

    数据管理 一.数据卷 数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷 可以在容器之间共享和重用 对 数据卷 的修改会立马生效 对 数据卷 的更新,不会 ...

  7. Docker操作删除所有容器镜像

    借鉴博客:https://www.cnblogs.com/yanyouqiang/p/8301856.html https://blog.csdn.net/wy_97/article/details/ ...

  8. Docker学习笔记:Alpine镜像+Python3安装+http服务器

    编写Dockerfile文件使用最新的Alpine镜像并安装Python3环境,如下: 因为python高于3.4则不会默认安装pip,需要手动安装. 试了很多其他办法都没安装上,唯有下载get-pi ...

  9. Docker操作笔记(四)使用网络

    使用网络 Docker允许通过外部访问容器或容器互联的方式来提供网络服务. 一.外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. 当 ...

随机推荐

  1. PHP基础之$_SERVER的详细参数与说明

    这几天准备静下心来看看平时忽略的一些PHP基础知识,也算是一个复习吧. 今天准备复习的是$_SERVER这个变量. 说明:$_SERVER 是一个包含了诸如头信息(header).路径(path).以 ...

  2. Java基础 -- final关键字

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  3. Luogu P2057 [SHOI2007]善意的投票

    题目链接 \(Click\) \(Here\) 考虑模型转换.变成文理分科二选一带收益模型,就一波带走了. 如果没有见过这个模型的话,这里讲的很详细. #include <bits/stdc++ ...

  4. css 函数

    css还有一些强大的函数: 1. calc 可以混合多种单位来计算 div { font-size: calc(100vw/5 + 1rem - 100px) } 2. max.min.clamp m ...

  5. OS + CentOS / http_proxy / https_proxy / dalishangwang / repo

    s OS + Linux RedHat / redhat7 / redhat 7 / redhat 6 / redhat 5 https://lindows.iteye.com/blog/456637 ...

  6. CMDB服务器管理系统【s5day91】:数据库表结构补充

    1.表机构补充图 2.用户信息表(UserProfile) 1.解决了什么问题 1.这台服务器是谁管理的?2.真正出问题了我敢上去改代码了?不能3.所以一台机器必须有运维人员和业务负责人,但是业务负责 ...

  7. 我对SAP Business One 项目实施的理解

    一.什么是SAP: 大家都知道ERP是什么,ERP是企业资源计划管理系统.是指建立在信息技术基础上,集信息技术与先进管理思想于一身,以系统化的管理思想,为企业员工及决策层提供决策手段的管理平台.那么问 ...

  8. JS异步加载的三种方案

    js加载的缺点:加载工具方法没必要阻塞文档,个别js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作. 有些工具方法需要按需加载,用到再加载,不用不加载. 一.def ...

  9. H5_0001:localStorage本地存储

    localStorage的优势 1.localStorage拓展了cookie的4K限制 2.localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小的针对于前端页面的数 ...

  10. CSS 书写规范

    class 类名的命名应该以功能为依据: 例如: .btn-danger;  .btn-warning CSS组件 一个组件==一个独立的功能模块 针对一个组件,通过功能描述样式   组件命名,功能描 ...