当前位置:主页 > 查看内容

Task02:Docker镜像与容器

发布时间:2021-07-17 00:00| 位朋友查看

简介:Docker镜像与容器 一、Docker镜像 1、获取镜像【docker pull】 Docker Hub中有很多可以直接用的镜像网址 https://hub.docker.com/search?qtypeimage 命令格式为 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 其中选项 地址的格式域名/……

Docker镜像与容器

一、Docker镜像

1、获取镜像【docker pull】

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,即可成功拉取

2、列出镜像

docker image ls

3、删除镜像

$ 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

3、Dockerfile制作镜像

通过命令行创建文件并在文件中编写指令

其中,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等指令便会在上下文目录找文件。

?

二、Docker容器

1、新建并启动容器

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

容器快照文件会丢弃历史记录与元数据信息,仅保留容器快照状态。

镜像存储文件会保留完整记录。

;原文链接:https://blog.csdn.net/qq_40968165/article/details/115653235
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐