Docker镜像、容器、仓库及数据管理

这篇具有很好参考价值的文章主要介绍了Docker镜像、容器、仓库及数据管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用Docker镜像

获取镜像

使用docker pull命令,使用docker search命令可以搜索远端仓库中共享的镜像。

运行容器

使用docker run [OPTIONS] IMAGE [COMMAND] [ARG...]命令,如:docker run --name ubuntu_test --rm -it ubuntu:test /bin/bash,其中选项如下:

  • --name 指定容器名。
  • --rm 表示容器退出后将其删除。
  • -t选项让Docker分配一个伪终端并绑定到容器的标准输入上。
  • -i则让容器的标准输入保持打开。

查看镜像信息

使用docker images命令,列出已经下载下来的镜像。

docker image --filter命令可列出指定的参数

如:列出镜像的仓库名,idtag,中间用“ === ”分割

docker images --format "{{.Repository}} === {{.ID}} === {{.Tag}}"   

删除镜像

docker rmi [镜像标签或ID],注意docker rm是删除容器的命令,不要混淆。

创建镜像

方法有三种,使用docker commit命令基于已有镜像的容器创建、基于本地模板导入。基于Dockerfile创建。

docker commit

将容器的存储层保存下来成为镜像。docker commit命令会让镜像变的臃肿,实际环境中并不会这样使用。

命令语法:

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

选项包括:

  • -a,--author=""作者信息
  • -m,--message=""提交消息
  • -p,--pause=true提交时暂停容器

基于本地模板导入

先下载操作系统模板压缩包文件,然后使用docker import命令导入:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

基于Dockerfile定制镜像

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

1. 在一个空白目录,建立文件Dockerfile,内容如下:

FROM golang
RUN mkdir -p /go/src/study      \
    && go env -w GO111MODULE=off
COPY study /go/src/study
WORKDIR /go/src/study/photoweb/
RUN go build /go/src/study/photoweb/photoweb.go

FROM指令指定基础镜像,如果以scratch为基础镜像的话,意味着不以任何镜像为基础。

RUN指令用来执行命令行命令。

COPY指令复制本地文件到镜像中,需要注意的事本地文件必须是镜像构建上下文中的文件(docker build 命令最后一个参数指定),一般将要复制的文件拷到Dockerfile所在的目录中。WORKDIR指令指定工作目录,防止可执行文件找不到相关资源。

2. Dockerfile文件编写完成后执行命令docker build -t golang:test .创建镜像

Dockerfile多阶段构建

Dockerfile多阶段构建是一种优化 Docker 镜像构建的方法,它可以减少 Docker 镜像的大小和运行时的资源消耗。下面的示例中,第一阶段将可拷贝源码并执行文件app编译出来,在第二阶段只将可执行文件app拷贝到镜像中。节省了运行时不必要的空间(go源码或者编译期间所依赖的其他包)

# 第一阶段下载相关依赖编译出可执行文件app
FROM golang:1.9-alpine
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=0 GOOS=linux go build -a -installsuffix cgo -o app .

# 第二阶段只将可执行文件app复制到镜像中,运行的容器中并不需要下载git和mysql驱动包
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/go/helloworld/app .
CMD ["./app"]

保存和载入

Docker 还提供了docker load和docker save命令,用以将镜像保存为一个tar文件,然后传输到另一个位置上,再加载进来。 这是在没有 Docker Registry 时的做法, 现在已经不推荐, 镜像迁移应该直接使用 Docker Registry, 无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以。

保存镜像:docker save  ubuntu:test | gzip > ubuntu-test.tar.gz,使用docker save保存的镜像只能使用docker load载入

载入镜像:docker load -i ubuntu-test.tar.gz

镜像的实现原理

每个镜像都由很多层次构成,Docker使用Union FS将这些不同的层结合到一个镜像中。

操作容器

启动容器

使用docker run命令,当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统, 并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个ip地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

守护态运行:执行docker run命令时添加-d参数。

终止容器

使用docker stop命令终止容器,处于终止状态的容器可通过docker start命令来重新启动。

进入容器

使用docker attach或docker exec命令,两者的区别是执行attach后,中stdin中exit会导致容器停止,执行exec后,从stdin中exit不会导致容器的停止,所以推荐使用docker exec命令进入容器。

导出导入

使用docker export命令导出本地某个容器快照到本地文件,使用docker import命令从容器快照文件中再导入为镜像,例如:

$ docker ps -a

CONTAINER ID    IMAGE            COMMAND        CREATED        STATUS        PORTS        NAMES
7691a814370e    ubuntu:14.04     "/bin/bash"    36 hours ago   Exited(0) 21 hours ago  test

$ docker export 7691a814370e > ubuntu.tar
 

$ cat ubuntu.tar | docker import - test/ubuntu:v1.0

$ docker images
REPOSITORY    TAG    IMAGE ID      CREATED               VIRTUAL SIZE
test/ubuntu   v1.0   9d37a6082e97  About a minute ago    171.3MB

删除容器

使用docker rm命令,如果要删除一个运行中的容器,可以添加 -f 参数。Docker会发送SIGKILL信号给容器。清理掉所有处于终止状态的容器使用命令docker container prune

访问仓库

Docker Hub

 在网站 https://cloud.docker.com注册账号。

登陆登出:docker login和docker logout命令

拉取镜像:使用docker search从仓库中查找镜像,使用docker pull命令拉取镜像。

推送镜像:docker push username/ubuntu:17.10命令,username为账号用户名。

私有仓库

使用官方提供的工具docker-registry构建私有的镜像仓库。

容器运行:docker run -d -p 5000:5000 --restart=always --name registry registry,默认情况下,仓库会被创建在容器的/var/lib/registry 目录下。可以通过 -v 参数来将镜像文件存放在本地的指定路径。

在私有仓库上传、搜索和下载镜像:

  • 先使用docker tag来标记一个镜像。例如私有仓库地址为127.0.0.1:5000,标记命令为docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
  • 然后使用docker push上传标记的镜像。命令为docker push 127.0.0.1:5000/ubuntu:latest
  • 使用curl查看仓库中的镜像。命令为curl 127.0.0.1:5000/v2/_catalog
  • 从仓库中下载镜像,命令为docker pull 127.0.0.1:5000/ubuntu:latest
  • Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 配置来取消这个限制,或者配置能够通过 HTTPS 访问的私有仓库。在文件/etc/docker/daemon.json中添加如下内容:
{
    "registry-mirror": [
    "https://registry.docker-cn.com"
    ],
    "insecure-registries": [
    "192.168.199.100:5000"
    ]
}

数据管理

在Docker内部以及容器之间管理数据的方式主要有数据卷(Volumes)和挂载主机目录(Bind mounts)两种。

数据卷可供一个或多个容器使用的特殊目录,它绕过UFS,具有下面的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷 默认会一直存在,即使容器被删除

创建数据卷

docker volume create my-vol

查看数据卷:docker volume ls;查看指定的数据卷的信息如下:

$ docker volume inspect my-vol
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]

启动容器时挂载数据卷:执行docker run时使用--mount参数指定要挂载的数据卷。例如:

$ docker run -d -P \
    --name web \
    # -v my-vol:/wepapp \
    --mount source=my-vol,target=/webapp \
    training/webapp \
    python app.py

在主机里使用命令docker inspect web查看容器的信息,其中数据卷信息在"Mounts" Key 下面

删除数据卷:docker volume rm my-vol,清理数据卷命令docker volume prune

除了挂载创建的数据卷,还可以使用--mount标记指定直接挂载一个本地主机的目录到容器中去。Docker 挂载主机目录的默认权限是读写,用户也可以通过增加readonly指定为只读 。文章来源地址https://www.toymoban.com/news/detail-702126.html

到了这里,关于Docker镜像、容器、仓库及数据管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker的数据管理及端口映射与容器互联(使用centos镜像)

    目录 Docker数据管理 1.数据卷 2.数据卷容器 Docker端口映射 Docker容器互联 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。         数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数

    2024年02月12日
    浏览(43)
  • Docker数据管理与搭建私有仓库

    特点 数据卷存在于宿主机的文件系统中,独立于容器,与容器的生命周期是分离的。 数据卷可以是目录,也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现容器间的数据共享和交换。 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数

    2024年02月22日
    浏览(25)
  • Docker 的数据管理与镜像

    管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿

    2024年02月11日
    浏览(27)
  • Docker数据管理和镜像创建

    管理Docker容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DATa Volumes Containers)。 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容

    2024年02月15日
    浏览(27)
  • 06. 管理Docker容器数据

    目录 1、前言 2、Docker实现数据管理的方式 2.1、数据卷(Data Volumes) 2.2、数据卷容器(Data Volume Containers) 3、简单示例 3.1、数据卷示例 3.2、数据卷容器示例 在生产环境中使用 Docker,一方面,需要对数据进行保存或者在多个容器之间进行数据共享;另一方面,在 Docker 的容器

    2024年02月14日
    浏览(31)
  • Docker数据管理(数据卷与数据卷容器)

    目录 一、数据卷(Data Volumes) 1、概述 2、原理 3、作用 4、示例:宿主机目录 /var/test 挂载同步到容器中的 /data1 二、数据卷容器(DataVolumes Containers) 1、概述 2、作用 3、示例:创建并使用数据卷容器 三、容器互联:--link 管理 Docker 容器中数据主要有两种方式: 数据卷(Da

    2024年02月11日
    浏览(44)
  • docker配置文件挂载(容器数据管理)

    在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。 这就是因为容器与数据(容器内文件)耦合带来的后果。 要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。 数据卷(volume) 是一个虚拟目录,指向宿

    2024年02月15日
    浏览(42)
  • Docker基本操作之数据卷(容器数据管理)

    您的“关注”和“点赞”,是认可,是支持,是动力。 如意见相佐,可留言。 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。 本文首发在IT羊资源网。 《IT羊资源网》,网址:https://www.ityangzy.com IT羊资源网是IT世界的羊群! 一个致力于科技、信息技术

    2024年02月13日
    浏览(34)
  • Docker 的数据管理与Dockerfile 镜像的创建

    ------------------Docker 的数据管理--------------------- 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见

    2024年02月07日
    浏览(30)
  • Linux6.12 Docker 数据管理和镜像的创建

    第四章 LINUX Docker 数据管理和镜像的创建 一、Docker 的数据管理 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers) 1.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操

    2024年02月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包