Docker Hub中有很多可以直接用的镜像,网址:https://hub.docker.com/search?q=&type=image
命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
其中选项:
地址的格式:<域名/IP>[:端口号],默认地址是 Docker Hub(docker.io
)
仓库名:<用户名>/<软件名>,其中docker hub中用户名默认为Library
docker pull的实现步骤:用户通过docker client发送命令,docker daemon接收到命令后向docker registry发送image下载请求,下载后存放在本地。示意图如下(来源:https://zhuanlan.zhihu.com/p/187505981):
此处以拉取Ubuntu18.04版本为例,输入命令
docker pull ubuntu:18.04
出现报错
no matching manifest for windows/amd64 10.0.18363 in the manifest list entries
解决方法:在设置中的docker engine中的experimental设置为true,即可成功拉取
docker image ls
$ docker image rm [选项] <镜像1> [<镜像2> ...]
其中可以镜像可以是镜像的短ID(id的前面几个字符)、镜像长ID、镜像名或镜像摘要
有时删除镜像时发生报错:Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container da38f2757b97 is using its referenced image 545e4e38d9db,表明现在有容器正在使用该镜像导致无法删除,将对应容器删除后即可删除。
查看所有容器:docker ps -a
删除所有容器:docker rm $(docker ps -a -q)
删除行为:Untagged、Deleted
一个镜像可能会有多个标签,删除镜像操作实际上是删除某个标签的镜像,执行命令后则取消了符合标准的镜像标签,这就是Untagged
但是可能删除时不会删除所有镜像标签,所以docker rm命令不一定会发生delete行为,只有镜像所有的标签取消,才会触发deleted
通过命令行创建文件并在文件中编写指令
其中,FROM 镜像名 可以指定一个镜像为基础,而如果指定镜像为scratch,则表示不以任何镜像为基础。
RUN指令是执行命令行的命令,有shell和exec两种格式,其中shell格式后接命令,而exec格式后接可执行文件。
镜像的层数是有最大限制的,没运行一个RUN指令即创建一层,所以要避免冗余的,若命令都是为了同一个目的,可以只用一层RUN执行,Shell类行尾添加 \ 命令进行换行,使用&&将各个所需命令串联。
每一层构建最后的时候需要清理掉无关的文件,比如下载、展开的文件,apt缓存文件等
此处实验的是教程中定制nginx镜像
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
编写好了dockerfile使用docker build构建镜像
docker build命令格式:docker build [选项] <上下文路径/URL/->
在Dockerfile文件所在的目录执行:docker build -t nginx:v3 .
需要注意的是,最后需要加 . ,否则会出现以下报错,.表示当前目录
docker build" requires exactly 1 argument.
构建镜像时,经常需要将一些本地文件复制进镜像,而docker build命令是在服务端构建镜像,所以构建时需要指定上下文的路径,docker build
?命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。Dockerfile中的COPY、ADD等指令便会在上下文目录找文件。
?
docer run命令参数:
-a stdin:**?指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d:**?后台运行容器,并返回容器ID;
-i:**?以交互模式运行容器,通常与 -t 同时使用;
-P:**?随机端口映射,容器内部端口**随机**映射到主机的端口
-p:**?指定端口映射,格式为:**主机(宿主)端口:容器端口**
-t:**?为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb":**?为容器指定一个名称;
--dns 8.8.8.8:**?指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com:**?指定容器DNS搜索域名,默认和宿主一致;
-h "mars":**?指定容器的hostname;
-e username="ritchie":**?设置环境变量;
--env-file=[]:**?从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2":**?绑定容器到指定CPU运行;
-m :**设置容器使用内存最大值;
--net="bridge":**?指定容器的网络连接类型,支持 bridge/host/none/container:?四种类型;
--link=[]:**?添加链接到另一个容器;
--expose=[]:**?开放一个端口或一组端口;
--volume , -v 主机的文件夹:容器的文件夹**?绑定一个卷
使用-i -t可以进入交互模式
docker run -t -i ubuntu:18.04 /bin/bash
通过exit命令退出交互模式
2、其他一些命令
# 停止容器 id为容器的id
docker stop 'id'
# 启动容器 id为容器的id
docker start'id'
# 重启容器 id为容器的id
docker restart 'id'
# 删除容器 id为容器的id
docker rm 'id'
# 进入容器 id为容器的id
docker exec -it 'id' bash
#查看所有已经创建的包括终止状态的容器
docker container ls -a
#清理所有处于终止状态容器
docker container prune
#导出本地容器
docker export 'id'
#从容器快照文件导入镜像
docker import 路径/镜像名 或指定URL/某个目录导入
#导入镜像存储文件到本地镜像库
docker load
容器快照文件会丢弃历史记录与元数据信息,仅保留容器快照状态。
镜像存储文件会保留完整记录。
在开发 XAML(WPF/UWP) 应用程序中,有时候,我们需要创建自定义控件 (Custom Con...
虽然已经放弃了Windows 7,不过微软今天还是为它发布了新的更新,但是一般人就算...
文章目录 安装 go 安装 Codis 安装 jdk 安装 zookeeper 启动 Codis搭建集群 安装...
一.linux文本查找命令 在说linux正规表达式之前,还介绍下linux中查找文本文件常...
在开发过程中,经常会通过实例的vm.$refs(this.$refs)取得通过ref注册过的组件,...
第一章 框架概述 1.1 软件开发常用结构 三层架构包含的三层 界面层User Interfac...
1.妈妈小时候告诉我,不要做一个不三不四的人,所以现在我很二。 2.学校,你得...
我们写程序的目的就是使它在任何情况下都可以稳定工作。一个运行的很快但是结果...
前言 在上一篇笔记 《变分量子对角化》 里面我们简单介绍了一下VQSD的概念接下来...
本文实例讲述了基于正则表达式实现UL下LI的样式替换功能。分享给大家供大家参考...