Docker学习记录

1.什么是Docker

在这里插入图片描述

介绍

Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分离,从而实现快速交付软件。借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。通过利用Docker快速交付,测试和部署代码的方法,可以显着减少你从编写代码到在生产环境中运行这些代码之间的时差。在学习Docker中以下4个概念需要知道

  1. 镜像(Image)
    Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、依赖库、资源、配置文件、运行时的配置参数(如:匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

  2. 容器(Container)
    镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义容器只读模板,容器是镜像运行时的具体实体。容器可以被创建、启动、停止、删除、暂停、重、重启等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间(namespace),具有隔离性。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间等。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全,从此再也不用担心本地多个应用需要不同版本的依赖导致的冲突问题了。

  1. 仓库(Repository)
    镜像构建完成后,一般会在当前宿主机上,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样一个服务,用来保存镜像。它与我们常用的maven reopsitory是一个类似的东西,只是装的东西不同而已。

每个Docker Registry可以包含多个仓库(Repository),一个仓库可以内可以有同一个软件不同版本的镜像。为了对同一镜像不同版本进行区分,每个镜像都有一个对应的标签(tag)用于标记其版本。我们可以通过

<仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

  1. Docker 架构
    Docker使用客户端-服务器架构。主要包含通过Docker客户端(client)和Docker守护进程(daemon)两部分。Docker客户端客户端是许多Docker用户与Docker交互的主要方式,负责与守护进程进行对话。Docker 守护进程则侦听Docker API请求并管理Docker对象(镜像、容器、卷等)。Docker客户端和守护程序可以在同一系统上运行,您也可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。

特点

1、更快速的交付和部署

开发者可以使用一个标准的Docker镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 可以快速创建容器以及快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker容器轻,且启动速度快,可以大量地节约开发、测试和部署的时间。

2、更高效的虚拟化

Docker 容器在运行时,不需要额外的虚拟机程序的支持。由于它是内核级的虚拟化,所以可以实现更高的性能和效率。

3、更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人计算机和服务器等。这种良好的兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个平台,十分有利于应用的迁移和扩展。

4、更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

除上述几个特点外,Docker还具有实现逻辑分离、适合与面向服务的架构配合使用等特点。

2.基本使用

系统命令

systemctl [option] docker 
系统命令选项值

启动:start

关闭:stop

重启: restart

开机自启: enable

查看运行状态:status

查看docker版本号信息
docker version
docker info
帮助命令

如果忘记了部分docker命令可使用帮助命令进行查看

docker --help

查看某一个命令具体的参数

docker images --help
查看镜像、容器、数据卷所占空间
docker system df 
获取容器或镜像的详细信息(元数据)
docker inspect [镜像名]

镜像命令

查看镜像列表
docker images
输出参数说明
REPOSITORY表示镜像的仓库源
TAG镜像的标签版本号
IMAGE ID镜像ID
CREATED镜像创建时间
SIZE镜像大小
搜索镜像
docker search --limit 5 [名称] #查询[名称]前5个的镜像信息
输出参数说明
NAME镜像名称
DESCRIPTION描述
STARS点赞数
OFFICIAL是否是官方的
AUTOMATED是否是自动构建的
拉取镜像
docker pull [镜像名字]			#默认拉取最新版本
docker pull [镜像名字]:[TAG]	#拉取指定版本的镜像

版本号相关信息可以前往docker仓库中搜索查看:https://hub.docker.com/

删除镜像
docker rmi 镜像ID 		 #删除单个
docker rmi 镜像ID:镜像ID	#删除多个

容器命令

启动容器
docker run [option] [NAME:TAG或IMAGE ID]

启动容器常用选择值

选项描述
–name指定名称
-v挂载文件
-p端口映射
-d后台运行
-i以交互模式运行容器,通常与 -t 同时使用
-t为容器重新分配一个伪输入终端,通常与 -i 同时使用

以启动nginx镜像为例

1.启动一个用于复制文件的 nginx 容器

docker run --name test-nginx -p 80:80 -d nginx

2.在虚拟机中创建目录

mkdir -p /dataFile/nginx/7015/html /dataFile/nginx/7015/conf.d /dataFile/nginx/7015/logs

3.将 nginx 容器内数据复制到存放数据的文件目录

#复制全局配置文件
docker cp test-nginx:/etc/nginx/nginx.conf /dataFile/nginx/7015
#复制默认server配置文件
docker cp test-nginx:/etc/nginx/conf.d /dataFile/nginx/7015/conf.d

4.关闭并删除测试容器

docker stop test-nginx
docker rm test-nginx

5.重新创建并启动nginx容器,并设置挂载目录

docker run --privileged=true -e TZ="Asia/Shanghai" -it -d --name my-nginx -p 7015:7015 -v /dataFile/nginx/html:/usr/share/nginx/html -v /dataFile/nginx/nginx.conf:/etc/nginx/nginx.conf -v /dataFile/nginx/conf.d:/etc/nginx/conf.d -v /dataFile/nginx/logs:/var/log/nginx 904b8cb13b93
命令描述
-p 7015:7015将宿主机7015端口映射到容器7015端口
–name my-nginx容器的名字
-v /dataFile/nginx/7015/nginx.conf:/etc/nginx/nginx.conf挂载nginx.conf配置文件
-v /dataFile/nginx/7015/conf.d:/etc/nginx/conf.d挂载nginx配置文件
-v /usr/local/docker/nginx/log:/var/log/nginx挂载nginx日志文件
-v /dataFile/nginx/7015/html:/usr/share/nginx/html挂载nginx内容
904b8cb13b93nginx镜像的Id
–privileged=truecontainer内的root拥有真正的root权限
-e TZ=“Asia/Shanghai”设置时区
-iti:即使没有连接也要保持标准输入保持打开状态 t:分配一个伪tty
-d在后台运行容器,并且打印容器id

nginx拓展:当已启动的nginx容器需要额外绑定宿主机端口时可通过修改配置文件实现

1、查看容器ID

# 获取容器/镜像的元数据
docker inspect 0ac8324a9b95

在这里插入图片描述

2、修改前先停掉容器,否则自动还原

docker stop 0ac8324a9b95

3、根据得到的容器id进入到容器目录,修改配置文件 hostconfig.jsonconfig.v2.json

cd /var/lib/docker/containers/[containerId]

hostconfig.json 文件需要修改的地方

#省略
    "PortBindings":{
        "7015/tcp":[
            {
                "HostIp":"",
                "HostPort":"7015"
            }
        ],
        #复制一个配置项修改为7016
        "7016/tcp":[
            {
                "HostIp":"",
                "HostPort":"7016"
            }
        ]
    }
#省略   

config.v2.json 文件需要修改的地方

#省略
        "Ports":{
            "7015/tcp":[
                {
                    "HostIp":"0.0.0.0",
                    "HostPort":"7015"
                }
            ],
            #复制一个配置项修改为7016
            "7016/tcp":[
                {
                    "HostIp":"0.0.0.0",
                    "HostPort":"7016"
                }
            ]
        }
#省略     

4、保存、退出、重启容器

# 重启docker服务
sudo systemctl restart docker.service 
# 启动容器
docker start 0ac8324a9b95

完成以上4个步骤,已重新为nginx容器添加新的端口映射了。

进入运行的容器

在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止

docker exec -it [容器ID] /bin/bash

直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止

docker attach [容器ID]
退出容器
方式说明
输入exit | 快捷键ctrl+dexit退出,容器停止
先按 ctrl + p,再按 qctrl+p+q退出,容器不停止
启动|重启|停止容器
docker [option] [容器ID或者容器名]
选项说明
start启动容器
restart重启容器
stop停止容器
kill强制停止容器
删除已停止的容器
docker rm [容器ID]
查看容器日志
docker logs [容器ID]
查看容器内运行的进程
docker top [容器ID]
获取容器/镜像的元数据
docker inspect [NAME|ID]
容器内拷贝文件到宿主机
docker cp [容器ID]:[容器内路径] [目的宿主机路径]
导入|导出镜像

save: 导出镜像

docker save -o [镜像名].tar [镜像名|ID]

load:导入镜像

docker load -i [镜像名].tar
导入|导出容器

export:导出容器内容并生成tar文件

docker export [容器ID] > [文件名].tar

import :从tar包中的内容创建一个新的文件系统再导入为镜像

cat [文件名].tar | docker import - [镜像用户|镜像名]:[镜像版本号]
容器内拷贝文件到宿主机
docker cp [容器ID]:[容器内路径] [目的宿主机路径]
导入|导出镜像

save: 导出镜像

docker save -o [镜像名].tar [镜像名|ID]

load:导入镜像

docker load -i [镜像名].tar
导入|导出容器

export:导出容器内容并生成tar文件

docker export [容器ID] > [文件名].tar

import :从tar包中的内容创建一个新的文件系统再导入为镜像

cat [文件名].tar | docker import - [镜像用户|镜像名]:[镜像版本号]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值