Docker快速入门

前言

     博主在一个月前刚刚学习docker的时候,其实就计划着写一篇相关的文章来学习记录,但是时间一直不充裕(打游戏,刷剧),直到最近发现一个很痛苦的事实,之前学过的差不多忘了,又得很麻烦的查资料,所以这篇文章应运而生。

    关于docker,我的理解就是在操作系统的基础上创建一个个操作系统实例,但是这个实例满足相关应用的运行环境需求,无需部署和调试。比如我想在一台Linux服务器上安装一个DM数据库,按照常规操作,我得把它的安装包下好,然后解压,按照提示进行环境部署调试和特殊配置等等。如果是在两三台机器上重复部署还能有点新鲜感,增加熟练度,但是如果是在1000台机器上呢?只能*&……%¥#¥%……&*了。这个时候就需要docker技术了,它可以实现把你第一次部署的DM数据库、相关配置以及创建的表等等做成一个盒子,然后通过批量分发到1000台机器上,需要用的时候我们就进入盒子里,里面有我们想要的一切。当然这只是我的大致总结,实际上docker远远不止这点东西。

一、Docker的三大核心概念

1.1 Docker镜像

     Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache 应用程序(或用户需要的其他软件)。可以把它称为一个Apache镜像。
     镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。

1.2 Docker容器

    Docker 容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。镜像和容器的关系,就像是面向对象程序设计中的类和实例一样。
    可以把容器看做是一个简易版的Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
    值得注意的是镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

1.3 Docker仓库

    Docker 仓库类似于代码仓库,它是 Docker 集中存放镜像文件的场所。
    有时候会看到有资料将 Docker 仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu 操作系统镜像的仓库称为Ubuntu 仓库,其中可能包括14.04、12.04等不同版本的镜像。仓库注册服务器的示例如图所示。

二、Docker的安装与卸载

2.1 Docker的在线安装

下面这篇博客对于docker的在线安装写的非常漂亮详细,所以这里我就不在赘述了。唯一需要注意的就是他说的验证是否安装成功这一步,如果小伙伴们失败了,请转到我这篇博客的 3.1.1

https://blog.csdn.net/weixin_39789370/article/details/112698471

2.2 Docker的卸载

2.2.1 杀掉docker进程

# 查看docker相关进程
ps aux | grep docker
# 杀掉相关进程,我这里是 kill -9 1575 17023 17025
kill -9 pid
# 然后大伙应该有个 /usr/bin/dockerd 的进程杀不掉,没关系,等到第三步删除完docker相关包就没了

2.2.2 删除docker所在目录

rm -rf /etc/docker

rm -rf /run/docker

rm -rf /var/lib/dockershim

rm -rf /var/lib/docker

2.2.3 移除docker相关包

# 查看docker相关包
yum list installed | grep docker

 然后将查出来的包依次执行yum remove,eg: yum remove containerd.io.x86_64

2.2.4 查看是否卸载成功

# 没执行成功就成功了
docker version

2.3 Docker的离线安装 (Centos环境)

    在实际工作中,因为安全等问题,大部分都是内网环境,所以如何对docker进行离线安装很有必要。以下操作全是在Centos环境中使用root用户进行

2.3.1 docker安装包下载

下载地址:https://download.docker.com/linux/static/stable/x86_64/

建议下载v20.10.14之后的版本,因为之前版本有个较严重的安全漏洞。然后上传到公司内网服务器上,由于我使用的是Linux虚拟机,所以上传到内网后还得传输到我的Linux服务器上,这里我通过scp命令,从我的Windows服务器传输到Linux上,其中scp是个很实用方便的命令,博主觉得这个命令很有必要掌握。

scp C:/Users/pwj/Desktop/docker-20.10.16.tgz  root@192.168.122.131:/root

2.3.2 开始安装

# 解压安装包
tar -zxvf docker-20.10.16.tgz
# 将docker 相关命令拷贝到 /usr/bin
cp docker/* /usr/bin/
# 将docker注册成系统服务
vim /etc/systemd/system/docker.service

然后在docker.service文件中填入如下内容

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
 
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
 
[Install]
WantedBy=multi-user.target
# 添加执行权限
chmod +x /etc/systemd/system/docker.service
# 重新加载配置文件
systemctl daemon-reload
# 启动docker服务
systemctl start docker
# 查看服务状态
systemctl status docker
# 设置开机自启
systemctl enable docker.service
# 查看docker版本,如果输出的版本号正确,基本就安装成功了
docker version

三、Docker的基本操作

3.1 使用docker镜像

3.1.1 配置镜像下载源

    Docker 运行容器前需要本地存在对应的镜像,如果镜像没保存在本地,Docker会尝试先从默认镜像仓库下载镜像(默认使用Docker Hub 公共注册服务器中的仓库),用户也可以通过配置,使用其他的镜像仓库。
    这里建议使用国内的镜像仓库,因为国外源不稳定且速度慢,有些小伙伴在测试docker拉取 hello-world 镜像时,就因为docker默认使用的是国外源,导致下载不成功。
    
# 通过创建编辑此配置文件,自定义镜像下载源
vim /etc/docker/daemon.json

然后在此文件中加入如下内容,我这里是切换成了国内的阿里云和七牛云,从这两个仓库中拉取镜像。

{
 "registry-mirrors":["https://reg-mirror.qiniu.com/",
  "https://alzgoonw.mirror.aliyuncs.com"]
}
# 然后重启docker服务,配置即可生效
systemctl restart docker

如果重启失败,则检查一下配置文件格式是否正确。然后这只是对于Centos上的操作,如果有其他需求,可以查看下面这个链接。

Docker 镜像加速 | 菜鸟教程 (runoob.com)

docker pull

docker pull 镜像名[:TAG]   # 下载镜像到本地,其中TAG是镜像的标签,往往用来表示版本信息如果不写TAG,默认为latest

# 下载一个版本号为14.04的ubuntu镜像
docker pull ubuntu:14.04

https://hub.docker.com

大伙可以进入上面这个网站,搜索自己想要下载的镜像名,然后就可以了解该镜像的更多信息,比如有哪些版本号之类的。

docker images

# 查看本地主机上的镜像信息
docker images

其中镜像的 ID 信息十分重要,它唯一标识了镜像。在使用镜像 ID 的时候,一般可以使用该ID 的前若干个字符组成的可区分串来替代完整的ID。

docker tag

给本地镜像添加新的标签

# docker tag 原有标签 新添加标签
docker tag ubuntu:14.04 pwj:1.0

docker rmi

docker rmi 镜像名[:TAG]  #根据标签删除镜像

其中,当一个镜像有多个标签时,只会删除该镜像多个标签中的指定标签,并不会影响镜像文件本身,但是当只有一个标签时,删除该标签也会删除镜像。如下图所示:

可以看出有多个标签时,docker仅仅Untagged,移除标签。但是只有一个标签时,则会Deleted,去删除镜像文件。

docker rmi -f 镜像ID  #直接删除镜像文件本身,删除该镜像所有的标签。

docker save

导出镜像到本地文件,例如导出本地的ubuntu:14.04镜像为文件ubuntu_14.04.tar,如图所示:

docker load

载入镜像,可以将导出的tar文件再导入,从而可以在内网环境下得到镜像,例如将文件ubuntu_14.04.tar导入镜像到本地镜像列表,如下所示:

3.2 操作docker容器

docker ps -a

查看容器信息

docker create 和 docker start

创建容器,启动容器

docker run

创建并启动容器,等价于先执行docker create命令,再执行docker start命令。

# 创建一个ubuntu容器,并启动一个bash终端
docker run -it ubuntu:14.04 /bin/bash

Create命令和run命令支持的选项都十分复杂,主要包括如下几大类:与容器运行模式相关、与容器和环境配置相关、与容器资源限制和安全保护相关。这里我就简单介绍几种常用的

–name=“Name” 给容器起名字
-d 后台运行
-it 使用交互方式运行,进去容器查看内容
-p 指定端口 -p 8088:8088 主机端口:容器端口
# 停止容器
docker stop ID或容器名
# 强制停止容器
docker kill ID或容器名
# 删除容器
docker rm ID或容器名
# 强制删除容器,可以删除运行中的容器
docker rm -f ID或容器名
# 查看容器里面的进程
docker top ID或容器名
# 进入容器,并分配一个新的终端
docker exec -it ID或容器名 /bin/bash
# 退出容器
exit     

docker export

导出容器,即导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。之后可将导出的tar文件传输到其他机器上,然后再通过导入命令导入到系统中,从而实现容器的迁移。

# docker export -o 导出tar文件名 容器ID或名字
docker export -o test_export.tar c7

docker import

导入容器,前面导出的文件可以使用docker import命令导入变成镜像。需要注意的是容器导出的文件只能用此命令导入,无法使用docker load。反之亦然

docker import test_export.tar  test:v1.0

此时有一个地方需要注意,在使用是由容器导入的镜像时,我们在创建容器时会出现如下错误: 

原因:被docker export出来的镜像在启动的时候需要指定command

解决方法:查看该容器的command,然后添加即可正常创建容器。如下所示

# 查看容器信息,不截断字符
docker ps -a --no-trunc

# 在末尾加上查询到的command即可
docker create -it test:v1.0 "/bin/bash"

3.3 访问docker仓库

3.3.1 搭建本地私有仓库

安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境

# 这将自动下载并启动一个registry容器,创建本地的私有仓库服务
docker run -d -p 5000:5000 registry

3.3.2 管理私有仓库

首先查看本机IP地址,其地址为192.168.122.131:5000。在 daemon.json 文件中添加如下内容并重启,接着启动私有仓库容器。

vim /etc/docker/daemon.json 
{
 "registry-mirrors":["https://reg-mirror.qiniu.com/",
  "https://alzgoonw.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.122.131:5000"] #添加此段,“,”不可少,ip是本机IP地址
}

然后开始测试上传和下载镜像。选择本地一个镜像修改标签为 192.168.122.131:5000/test,如下所示: 

# 使用docker push上传标记的镜像
docker push 192.168.122.131:5000/test

# 查看私有仓库中的镜像信息,确认是否上传成功
curl -XGET http://192.168.122.131:5000/v2/_catalog

 上传镜像成功,接着测试从私有仓库下载镜像

# 先删除本地原有镜像
docker rmi 192.168.122.131:5000/test
# 查看镜像,确认是否删除成功
docker images
# 从私有仓库下载镜像
docker pull 192.168.122.131:5000/test
# 查看镜像,确认是否下载成功
docker images


总结

    以上就是这篇博客要讲的内容,本文旨在使初学者快速入门Docker,所以仅仅简单介绍了Docker的使用,而Docker其实还有更多的细节和技术等着大家去学习运用。最后如果这篇文章有什么错漏和写的不好的地方,也请大家帮我指正。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值