【Docker-01】Docker基础入门

Docker与虚拟机相比优势:

  • 快,启动停止秒级实现
  • 占用较少资源,一个主机上可以同时运行数千个Docker容器
  • 类似Git的操作来方便用户获取、分发和更新应用镜像,学习成本低
  • 通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率

Docker可以使用隔离容器来同时启动n个不同应用,基本不消耗二外的系统资源
在这里插入图片描述

传统的虚拟机是在硬件层面实现虚拟化,需要有二外的虚拟机管理工具和虚拟机炒作系统层,Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

在这里插入图片描述

核心概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)
镜像

类似虚拟机需要安装的系统镜像,包含完整的Ubuntu系统可以称为Ubuntu镜像。

镜像是创建Docker容器的基础

容器

类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。

容器是从镜像创建的应用运行实例,可以进行操作,而这些容器都是相互隔离、互不可见的。

镜像自身是只读的,容器从镜像启动的时候,会在镜像的最上层创建一个可写层,镜像本身保持不变。

仓库

类似于代码仓库,是Docker集中存放镜像文件的场所。
在这里插入图片描述
更具所存储的镜像公开分享与否,Docker仓库可以分别为公开仓库和私有仓库两种形式。

安装

CentOS

sudo yum install -y docker

启动服务
service docker start

查看镜像信息

docker images 可以查看本地主机上已有的镜像
例如:
在这里插入图片描述
分别显示的为:来源仓库、镜像版本信息(唯一)、镜像ID、创建时间、镜像大小

修改标签tag命令:

docker tag ubuntu:latest nihao:666
效果如下:
在这里插入图片描述
改tag的镜像id完全一致,说明改便签只是创建了一个快捷方式。

获取镜像详情

docker inspect IMAGEID
例如:
该命令返回的是一个json格式数据

[root@VM_0_10_centos ~]# docker inspect 7698f282e524
[
    {
        "Id": "sha256:7698f282e5242af2b9d2291458d4e425c75b25b0008c1e058d66b717b4c06fa9",
        "RepoTags": [
            "docker.io/ubuntu:latest",
            "nihao:666"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "",
        "Created": "2019-05-15T21:20:25.927610362Z",
        "Container": "3a6a6b99b2a49c01ba77ebf65d43121a41c0fc34c7ecb6d708771e68ff950a02",
        "ContainerConfig": {
            "Hostname": "3a6a6b99b2a4",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:6dba68421bcf398ca037dd630d3b221cc4b894a90f218165175f3d057bcccfb1",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "18.06.1-ce",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:6dba68421bcf398ca037dd630d3b221cc4b894a90f218165175f3d057bcccfb1",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 69859102,
        "VirtualSize": 69859102,
        "GraphDriver": {
            "Name": "overlay2",
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/48b47eab4773a5ba9355bf6fdf893c623e8f8ce499e3ad414b908eb7a552c975/diff:/var/lib/docker/overlay2/652d9f5309bc1b8a9abfd8459db579f97aef512f41bec1d556b818a48e0b8e0f/diff",
                "MergedDir": "/var/lib/docker/overlay2/126509d21d9523a68fe4e929820939af3b8d6ec923edc8a5133a2093d416d9c4/merged",
                "UpperDir": "/var/lib/docker/overlay2/126509d21d9523a68fe4e929820939af3b8d6ec923edc8a5133a2093d416d9c4/diff",
                "WorkDir": "/var/lib/docker/overlay2/126509d21d9523a68fe4e929820939af3b8d6ec923edc8a5133a2093d416d9c4/work"
            }
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:02571d034293cb241c078d7ecbf7a84b83a5df2508f11a91de26ec38eb6122f1",
                "sha256:270f934787edf0135132b6780cead0f12ca11690c5d6a5d395e44d290912100a",
                "sha256:8d267010480fed7e616b9b7861854042aad4ef5e55f8771f2c738061640d2cb0"
            ]
        }
    }
]

也可以通过-发参数来指定查看参数
docker inspect -f {{".参数名"}}

查找镜像

docker search 镜像名
例如:
在这里插入图片描述

删除镜像

docker rmi IMAGE,其中IMAGE可以为标签也可以为ID
例如:
在这里插入图片描述
使用标签删除同一ID的镜像不会相互影响。

但是如果使用ID删除,会删除该ID指向的所有镜像,然后删除镜像本身。

不过当该镜像存在容器时,镜像无法删除。

例如:利用ubuntu镜像创建实例
docker run ubuntu echo ''hello world
利用·docker ps -a命令可以查看本机存在容器
在这里插入图片描述
可以看到一个退出状态的容器,在试图删除镜像的时候,会提示有容器存在,无法删除。
可以使用-f参数强行删除,不推荐
docker rmi -f ubuntu
强制删除会生成一个标签为none的临时镜像,原来被强删的镜像换了新的ID存在于系统中
正确的方法应该是,先删除容器,再删除镜像
删除容器可以通过id删除,例如删除b41be78a02cb这个容器,就可以:
docker rm b41

创建镜像

三种方法:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。
这里先主要介绍前两种,基于Dockerfile创建后面会详细的去说。

基于已有镜像的容器创建

该方法主要使用docker commit命令,格式如下:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

例如:
首先启用一个镜像:
docker run -it ubuntu:18.04 /bin/bash
然后对其进行修改,创建一个文件,之后退出:

root@dea03cf2bc92:/# touch test
root@dea03cf2bc92:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  test  usr
boot  etc  lib   media  opt  root  sbin  sys  tmp   var
root@dea03cf2bc92:/# exit

记住该创建的容器id为:dea03cf2bc92
该容器与原镜像已经发生了改变,然后通过容器id提交新的镜像:
docker commit -m '这是一个新的镜像' -a '作者' dea03cf2bc92 test:1.0
查看本地镜像列表:

~$ docker images
REPOSITORY          TAG          IMAGE ID            CREATED             SIZE
test                   1.0                   0d4b889599d4        7 seconds ago       69.9MB
ubuntu              14.04               2c5e00d77a67        5 days ago            188MB
ubuntu              18.04               7698f282e524         5 days ago             69.9MB

基于本地模板导入

主要使用doker import命令
模板来自于本地导出的,或者从OPENVZ 下载,模板下载地址
例如下载了ubuntu-18.04的模板包,可用下面命令导入:
cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:18.04

存出和载入镜像

存出镜像

docker save该命令支持-o,导出镜像到指定位置
docker save -o ubuntu_18.04.tar ubuntu:18.04

载入镜像

docker load该命令支持-i,从指定文件中读取
docker load -i ubuntu_18.04.tar
或者:
docker load < ubuntu_18.04.tar

上传镜像

先去docker官网注册个账户
然后使用docker login来进行登录操作
登陆后,使用docker push进行上传

例如:
上传我刚才做的test镜像
首先修改tag
docker tag test:1.0 Docker用户名/test:latest
上传:
docker push Docker用户名/test
然后就会开始上传:

 docker push hexu0614/test
The push refers to repository [docker.io/hexu0614/test]
9039fc091fc7: Pushed
8d267010480f: Pushed
270f934787ed: Pushed
02571d034293: Pushed
latest: digest: sha256:ce965c32afe3ceb63cfe65190370830541434650673d7ddee6f9ab02054bfb32 size: 1150

去dockerhub查看刚才上传的镜像:
在这里插入图片描述
这样 关于Docker的简单操作就结束了,下次开始深入Docker,学习其核心概念,容器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您提供有关Docker Compose的教程。Docker Compose是一个用于定义和运行多个Docker容器的工具。它允许您使用一个简单的YAML文件来描述应用程序的服务、网络和卷等配置。 以下是一个基本的Docker Compose教程的步骤: 1. 安装DockerDocker Compose:首先,确保您已经在您的机器上安装了DockerDocker Compose。您可以从官方网站上下载并按照它们的安装指南进行安装。 2. 创建一个新的项目目录:在您的项目目录中创建一个新的文件夹,用于存放Docker Compose文件和相关的应用程序文件。 3. 创建一个docker-compose.yml文件:在项目目录中创建一个名为docker-compose.yml的文件。这个文件将会包含您的应用程序的各个服务的配置信息。 4. 定义服务:在docker-compose.yml文件中,您可以使用services关键字来定义您的各个服务。每个服务都应该有一个唯一的名称,并指定要使用的Docker镜像、端口映射等信息。 5. 定义网络:如果您的应用程序需要多个服务之间进行通信,您可以使用networks关键字来定义网络。这将允许服务之间通过容器名称进行通信。 6. 定义卷:如果您需要在容器之间共享数据或持久化存储,您可以使用volumes关键字来定义卷。 7. 运行应用程序:完成docker-compose.yml文件的编写后,使用docker-compose命令来运行您的应用程序。在项目目录中,运行以下命令:`docker-compose up`。这将会根据您的配置启动所有的服务。 这只是一个简单的教程,帮助您入门Docker Compose。当然,Docker Compose还有许多其他强大的功能和选项,您可以根据自己的需要进行更多的学习和实践。 请注意,这只是一个概述,并不能涵盖Docker Compose的所有细节和用法。我建议您查阅官方文档和其他资源,以获取更详细的信息和示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值