Docker 镜像使用

11 Docker 镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

下面我们来学习:

  • 管理和使用本地 Docker 主机镜像
  • 创建镜像

11.1列出镜像列表

我们可以使用docker images来列出本地主机上的镜像。

在这里插入图片描述
各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

统计镜像的个数:docker images | wc -l

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 20.10、15.10 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为20.10的ubuntu系统镜像来运行容器时,命令如下:


docker run -t -i ubuntu:20.10 /bin/bash

参数说明:

  • -i: 交互式操作。
  • -t: 终端。

ubuntu:20.10: 这是指用 ubuntu 20.10 版本镜像为基础来启动容器。

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

如果要使用版本为 15.10 的 ubuntu 系统镜像来运行容器时,命令如下:


docker run -t -i ubuntu:15.10 /bin/bash 

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

11.2获取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull命令来下载它。

下载完成后,我们可以直接使用这个镜像来运行容器

11.3 查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search命令来搜索镜像。

比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search命令搜索 httpd 来寻找适合我们的镜像。

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。

11.4拖取镜像

我们决定使用上图中的 httpd 官方版本的镜像,使用命令 docker pull来下载镜像。

下载完成后,我们就可以使用这个镜像了。

11.5删除镜像

镜像删除使用 docker rmi命令,比如我们删除 hello-world 镜像:


docker rmi hello-world

11.6 删除所有镜像


docker rmi $(docker images -q)  
# 不建议大家尝试

11.7 创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 从已经创建的容器中更新镜像,并且提交这个镜像(docker commit命令)
  • 使用 Dockerfile 指令来创建一个新的镜像

11.7.1 使用docker commit 命令

我们创建一个基于ubuntu20的镜像。更新镜像并安装wget和vim
首先需要使用已有镜像来创建一个容器。

docker pull ubuntu:20.10

docker run -it --name ubuntu20 ubuntu:20.10

在这里插入图片描述
在运行的容器内使用 apt-get update命令进行更新。


apt-get update

注意:apt-get update就是访问服务器,更新可获取软件及其版本信息,但仅仅给出一个可更新的list,更新软件列表,并不更新软件。

安装wget

wget  # 先看下是否存在
apt-get install wget   #安装
wget   # 再次查看wget是否存在

安装vim

vim   # 先查看是否存在
apt-get install vim  # 安装
vim  # 再次查看是否存在

使用exit退出容器

此时 ID 为 ef942b7be7ee的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。创建一个镜像


docker commit -m="has update" -a="thomas Guo" ef942b7be7ee thomas/ubuntu:v8

各个参数说明:

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • e218edb10161:容器 ID
  • thomas/ubuntu:v8: 指定要创建的目标镜像名

使用 docker images命令来查看我们的新镜像 thomas/ubuntu:v8


docker images

基于新镜像来启动一个容器


docker run -t -i thomas/ubuntu:v8 /bin/bash

查看wget和vim是否存在

wget

vim

11.7.2 使用docker build 构建镜像

推荐使用这种方式构建镜像,尽量不要使用docker commit

我们使用命令 docker build, 从零开始来创建一个新的镜像。

为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

该文件内容如下,你可以通过 vim Dockerfile 来创建并编辑这个文件

FROM    centos:8.2.2004
MAINTAINER      Thomas "thomas@sina.com"

RUN     /bin/echo 'root:111111' |chpasswd
RUN     useradd thomas
RUN     /bin/echo 'thomas:11111' |chpasswd
RUN     mkdir test
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

注:从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令

这是一种输出的形式:


echo 用户名:密码 | chpasswd

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过docker build命令来构建一个镜像。


docker build -t thomas/centos:8.2  .

# 请注意:命令的后面是有一个 . 的

请注意:上面这个命令最后面是有一个 . 的

在这里插入图片描述
在这里插入图片描述
参数说明:

  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images查看创建的镜像已经在列表中存在,镜像ID为8e3226f1261d

在这里插入图片描述
我们可以使用新的镜像来创建容器


 docker run -t -i thomas/centos:8.2  /bin/bash
 

在这里插入图片描述
从上面看到新镜像已经包含我们创建的用户 thomas。

设置镜像标签

我们可以使用docker tag命令,为镜像添加一个新的标签。


docker tag 8e3226f1261d thomas/centos:dev

docker tag 镜像ID,这里是 8e3226f1261d,用户名称、镜像源名(repository name)和新的标签名(tag)。

使用 docker images命令可以看到,ID为860c279d2fec的镜像多一个标签。

在这里插入图片描述

11.8 Docker File 指令

在这里插入图片描述
Dockerfile的指令根据作用可以分为两种:构建指令和设置指令。

  • 构建指令用于构建image,其指定的操作不会在运行image的容器上执行;
  • 设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行。

Dockerfile 官方参考文档:https://docs.docker.com/engine/reference/builder/#usage

附录

目前常用的命令

查看命令如何使用:docker

查看docker 版本: docker version

查看docker 信息: docker info

拉取镜像 :docker pull nginx:latest

查看本地镜像: docker images

查看本地指定镜像 docker images nginx

删除镜像 docker rmi nginx

运行容器: docker run -it -d --name=ddd nginx

停止容器: docker stop 容器名称或者容器id

启动已存在的容器: docker start 容器名称或者容器id

删除容器: docker rm 容器名称或者容器id

查看运行中的容器: docker ps

查看最后创建的容器: docker ps -l

查看所有容器(包括未运行的) docker ps -a

进入容器: docker exec  -it 容器名称或者容器id /bin/bash

查看容器里的进程: docker top 容器名称或者容器id

查看容器终端输出的信息: docker logs 容器名称或者容器id

查看容器里web服务器的日志 docker logs -f 容器名称或者容器id

查看容器内部的详细信息 docker inspect 容器名称或者容器id

查看容器的端口映射情况: docker port 容器名称或者容器id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值