Docker操作笔记(一)使用镜像
使用镜像
一)获取镜像
查看网络中的镜像:
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操作笔记(一)使用镜像的更多相关文章
- docker学习笔记3:镜像操作(查找和下载)
一.查看本地镜像 只有下载后,镜像才会保存在本地(docker环境所在的主机),通过如下命令可以查看本地已经存在的镜像. 命令:dokcer images 上面命令列出本地所有已经存在的镜像,显示的信 ...
- Docker学习笔记之从镜像仓库获得镜像
0x00 概述 之前我们说到了,Docker 与其他虚拟化软件的一处不同就是将镜像管理纳入到了功能之中.实现虚拟化只是程序能够无缝移植的一部分,而有了镜像管理,就真正取代了我们在移植过程中的繁琐操作. ...
- docker操作笔记
1.查看docker版本:docker info /docker version2.使用 docker run 命令来在容器内运行一个应用程序.如输出helloworld:docker run ub ...
- Docker操作笔记(二)容器
容器 一.启动容器 启动一个容器有两种方式: 1.基于镜像新键并启动一个容器: 所需要的主要命令为docker run docker run ubuntu:18.04 /bin/echo " ...
- Docker学习笔记二 使用镜像
本文地址:https://www.cnblogs.com/veinyin/p/10408363.html Docker运行容器前,需本地存在对应镜像,若没有则Docker从镜像仓库下载该镜像. 镜 ...
- Docker操作笔记(三)数据管理
数据管理 一.数据卷 数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷 可以在容器之间共享和重用 对 数据卷 的修改会立马生效 对 数据卷 的更新,不会 ...
- Docker操作删除所有容器镜像
借鉴博客:https://www.cnblogs.com/yanyouqiang/p/8301856.html https://blog.csdn.net/wy_97/article/details/ ...
- Docker学习笔记:Alpine镜像+Python3安装+http服务器
编写Dockerfile文件使用最新的Alpine镜像并安装Python3环境,如下: 因为python高于3.4则不会默认安装pip,需要手动安装. 试了很多其他办法都没安装上,唯有下载get-pi ...
- Docker操作笔记(四)使用网络
使用网络 Docker允许通过外部访问容器或容器互联的方式来提供网络服务. 一.外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. 当 ...
随机推荐
- 洛谷P1233 木棍加工题解 LIS
突然发现自己把原来学的LIS都忘完了,正好碰见这一道题.|-_-| \(LIS\),也就是最长上升子序列,也就是序列中元素严格单调递增,这个东西有\(n^{2}\)和\(nlog_{2}n\)两种算法 ...
- 分布式监控系统开发【day38】:报警自动升级代码解析及测试(八)
一.报警自动升级代码解析 发送邮件代码 def action_email(self,action_obj,action_operation_obj,host_id,trigger_data): ''' ...
- Ubuntu 开机自动挂载硬盘
1.查看Linux硬盘信息: $ sudo fdisk -l 2.格式化硬盘(根据需要确定文件系统): sudo mkfs.xfs /dev/sdb 3.创建/data目录 sudo mkdir /d ...
- mysql 以数组的形式插入更新表
在项目中用php+mysql,需要插入数据,但是数据库表字段又很长,如果用常规的insert into table (c) values ('dd')的话,将是很长的sql语句,而且一不小心,就弄错了 ...
- 牛牛与数组 (简单dp)
题目链接 这种题一看就是dp啊,dp[i][j]表示第i位放j的方案数,转移方程为dp[i][j]=dp[i-1][k]{k<=i||k%i!=0},当然我们可以三层循环来找,但数据显然会超时, ...
- SQL 两个表有关联,通过其中一个表的列,更新另一个表的列。
换了工作又开始写SQL了. update dic_rate_package set post_next_day=t.post_next_day from dic_package t inner joi ...
- JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)
相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术 ...
- 022_word中如何正确的使用正则表达式进行搜索
一.word中正则表达式详解 https://www3.ntu.edu.sg/home/ehchua/programming/howto/PowerUser_MSOffice.html 实战举例: ( ...
- ubuntu 16.04扩充root 分区
ubuntu使用过程中,提示root分区剩余空间不足,剩余200多M时还可以进行一些操作,剩余几M时拷贝等命令都不能够执行. 扩充root分区步骤如下: 1.查看root分区所在位置: 命令: sud ...
- 【原创】大数据基础之Hive(1)Hive SQL执行过程之代码流程
hive 2.1 hive执行sql有两种方式: 执行hive命令,又细分为hive -e,hive -f,hive交互式: 执行beeline命令,beeline会连接远程thrift server ...