Docker 学习笔记总结

Posted IT_Holmes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 学习笔记总结相关的知识,希望对你有一定的参考价值。

文章目录

1. docker 简介


项目的环境配置相当麻烦,换一台机器,就要重新来一次,非常费时。

Docker就给出了一套标准化解决方案,系统平滑移植,容器虚拟化技术

可以理解为docker把原始环境一摸一样地复制过来,通过镜像,达到一个平滑移植,跨平台的效果。。

Docker是基于Go语言实现的云开源项目。


传统虚拟机技术 与 容器虚拟化技术 的区别:

  • 虚拟机的使用过程:

    (缺点:需要多台虚拟机,资源占用多,冗余步骤多,启动慢。)

  • Docker容器虚拟化技术过程:


由于docker的出现,开发/运维(DevOps)混合型工程师,新一代开发工程师。

简而言之,就是一台物理机上面,可以跑多太容器,大大提升了物理服务器的CPU和内存的利用率。

2. docker 的 三个组成


docker官方:https://www.docker.com/

docker hub镜像仓库:https://hub.docker.com/

docker实质上是在已经运行的linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的linux主机。

docker(docker引擎)必须部署在linux内核的系统上。


查看自己的内核的两个命令:

cat /etc/redhat-release
uname -r 

Docker的三个基本组成:

  • 镜像(image)
  • 容器(container)
  • 仓库(repository)

Docker 镜像 、 Docker 容器 、Docker 仓库:

  • docker镜像就是一个只读模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
  • 容器类似一个微小的linux虚拟机,运行实例。例如:docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
  • 仓库就是集中存放镜像文件的场所。
    • 仓库分为公开仓库(public) 和 私有仓库(private) 俩种形式。
    • 最大的公开仓库是 Docker Hub (国外网站,访问速度很慢) , 一般使用国内的,如阿里云、网易云等等。

3. docker 的 工作原理


docker是一个client-server的结构系统,docker守护进程运行在主机上。

docker整体的执行原理如下:

4. centos系统上安装 docker


centos安装文档地址https://docs.docker.com/engine/install/centos/


官方安装文档:https://docs.docker.com/engine/install/centos/

第一步:确定你是centos7以上的版本。

第二步:根据情况,卸载旧版本。

# Uninstall old versions
# Older versions of Docker were called docker or docker-engine. If # these are installed, uninstall them, along with associated dependencies.

sudo yum remove docker \\
                  docker-client \\
                  docker-client-latest \\
                  docker-common \\
                  docker-latest \\
                  docker-latest-logrotate \\
                  docker-logrotate \\
                  docker-engine

第三步:yum 安装 gcc 相关。

# 保证 centos7 能够上外网。
$ yum -y install gcc
$ yum -y install gcc-c++

第四步:安装需要的软件包。

  • 执行 yum install -y yum-utils命令,安装软件包。

第五步: 设置stable镜像仓库。

  • 不要按照官方来配置镜像仓库,因为是国外资源,使用起来很慢,经常遇到下面的错误。

  • 执行命令一下命令,设置阿里云镜像仓库资源:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

第六步:更新yum软件包索引。相当于重建一下yum安装的索引,这样安装以后快一点。

$ yum makecache fast

第七步:安装 docker engine (docker引擎)。

$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

第八步:启动docker服务。

# 启动docker服务
$ sudo systemctl start docker
# 查看docker版本
$ docker version

第九步:执行一个helloworld,测试docker执行。

# 执行helloworld
$ docker run hello-world

出现以上内容,就表示docker服务安装成功,并且能够正常使用。


卸载docker步骤如下:

官方步骤如下:

5. 阿里云镜像加速器


进入阿里云官方,直接搜索,容器镜像服务:

创建容器镜像服务,实例列表:

根据阿里云文档,进行配置加速:

6. docker run命令执行流程


docker run命令执行流程:

7. docker 命令

7.1 帮助启动类命令


类似linux命令,docker的一些启动运行命令:

7.2 镜像命令


# 列出本地主机上的镜像
docker images 

# -a: 列出本地所有的镜像
docker images -a
# -q:只显示镜像ID
docker images -q


解释一下tag作用:同一个仓库源可以有多个不同的tag,tag不具体说明,默认安装的就是最新版本(latest版本)。一般我们都要指定tag标签版本的。


# 去远程仓库,模糊查找某个镜像名称
docker search [某个镜像的名字]

# --limit:只列出N个镜像,默认25个。
docker search --limit 5 [某个镜像的名字]



# 下载拉取镜像 , :TAG是指定版本 
docker pull 镜像名字[:TAG]
# 没有TAG就是最新版等同于 docker pull 镜像名称:latest


linux命令 : df -h 。 disk free 硬盘内存情况。

# 查看镜像/容器/数据卷所占的空间
docker system df 


# rmi就是remove image,就是移除某个image镜像
docker rmi [某个镜像名字ID]
# -f 参数:就是force,强制删除。
docker rmi -f [某个镜像名字ID]

# 删除多个image镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG ... 

# 删除全部镜像
docker rmi -f $(docker images -qa)
# 解释一下上面命令:
# docker images -qa 是查询全部镜像的imageID,将该命令获取的imageID传递给docker rmi -f 这个命令,这就是linux的一个用法。


(从上图不难看出,image ID其实很长,显示的时候仅仅显示了开头的一小部分。)


面试题:谈谈docker虚悬镜像是什么?

  • 解释:仓库名、标签都是<none>的镜像,俗称虚悬镜像 dangling image 。
  • 这种镜像一般都是要删除的!留着容易出问题!

7.3 容器命令

7.3.1 docker run 命令详解


有镜像才能创建容器。

例如:下面在docker服务上面创建了一个ubuntu环境容器。

# 启动容器命令:
docker run [option] 镜像 [command] [arg...]

解释option参数选项:

  • –name=“容器新名字” : 为容器指定一个名称。
  • -d : 后台运行容器并返回容器ID,也即启动守护式容器(后台运行)。
  • -i :以交互模式运行容器,通常与 -t 同时使用。
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
  • 一般是-it 一起使用,it就是interactive交互式 、tty终端的意思。
  • -P:随机端口映射。
  • -p:指定端口映射。


实例:

# 从仓库拉去一个ubuntu系统(centos系统比ubuntu大一点)
docker pull ubuntu
# -it: it就是interactive交互式 、tty终端的意思
docker run -it ubuntu /bin/bash
# 用bash也可以。
docker run -it ubuntu bash 



# 列出当前所有正在运行的容器
docker ps [options]


NAMES:如果没有指定容器名称,那么系统就会随机分配一个名称。

执行了多次run命令,相当于创建了多个docker容器:

7.3.2 docker ps 命令详解


docker ps [options]命令:就是查看当前运行的容器。

参数命令如下:

7.3.3 容器服务的一些命令


退出容器方式:

  • run进去容器,exit退出,容器停止。
  • run进去容器,ctrl + p + q 退出,容器不停止。

启动已停止运行的容器:

docker start 容器ID或者容器名

重启容器:

docker restart 容器ID或者容器名

停止容器:

docker stop 容器ID或者容器名

强制停止容器:

docker kill 容器ID或者容器名

删除已经停止的容器:

docker rm 容器ID或者名字

# -f 强制删除
docker rm -f 容器ID或者名字

# 一次性删除全部(多个)容器实例: (生产环境绝对不能用!!)
docker rm -f $(docker ps -a -p)
# 以下也可以实现,xargs是linux的输入参数,docker ps -a -q的结果集放到xargs中作为输入参数,执行docker rm命令。
docker ps -a -q | xargs docker rm

7.3.4 容器的交互常用命令


之前是交互式容器,操作容器进行交互。

与之相反的是守护式容器。

启动守护式容器(后台服务器):

  • 大部分场景下,一般docker的服务是在后台运行的。-d 参数指定后台运行模式。
  • docker run -d 容器名 命令。

注意:
docker容器后台运行,就必须有一个前台进程!,原因如下:

不过像mysql,redis这些后台服务器,最好式后台守护式启动!


# 查看容器日志
docker logs 容器ID

一般那个容器出现问题了,就要查看日志去:


# 查看容器内的进行进程情况
docker top 容器ID


# 查看容器内部细节 inspect检查审阅的意思。
docker inspect 容器ID


进入正在运行的容器,如何再交互式访问该容器:

# 再次以交互式方式访问正在运行的容器ID , 以下两个命令都可以:
docker exec -it 容器ID /bin/bash
docker attach 容器ID

attach 和 exec的区别:

工作中,一般使用docker exec命令,这样退出容器终端,就不会导致容器停止。

7.3.5 容器备份的常用命令


从容器内拷贝文件到主机上:

# 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径

容器的导入和导出:

# 将容器导出,不指定路径的情况下默认导出再当前文件夹下面
# 相当于将整个容器备份了。
docker export 容器ID > 文件名.tar

# 将备份的tar文件,导入成一个镜像文件:
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
# 案例:
cat abc.tar | docker import - itholmes/ubuntu:1.0.0

8. 镜像的分层概念


镜像的概念:

分层的镜像效果:

这就涉及到了UnionFS(联合文件系统),Union文件系统是Docker镜像的基础。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。一层层的叠加。


docker镜像加载原理:

  • 了解rootsf 和 bootfs。

为什么平时安装的虚拟机centos都是好几个G,而docker才200M?

  • docker是基于容器的虚拟化,仅包含业务运行所需要的runtime环境,Centos/Ubuntu基础镜像仅170M;宿主机可以部署很多很多容器。
  • 对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,这也就为什么像vim的一些命令没有安装的原因。


为什么Docker镜像要采用这种分层结构?

容器层 与 镜像层 :

  • docker镜像层都是只读的,容器层是可写的。

9. commit 提交 容器


如何在容器内部安装vim?

# 1. 先交互式运行容器
docker run -it ubuntu
# 2. 更新包管理工具(一定想着更新一下包管理工具)
apt-get update
# 3. 安装vim
apt-get install vim

docker commit作用就是提交容器副本使之成为一个新的镜像:

# 提交格式如下:
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

我们给ubuntu容器内部安装vim,这样就相当于又加了一层镜像一层层的叠加,最后commit成为一个镜像。效果如下:

10. 本地镜像发布到阿里云上


本地镜像发布到阿里云的流程:


将本地镜像推送到阿里云的步骤:

第一步:进入阿里容器镜像服务控制台。

第二步:进入个人实例,先创建命名空间,在创建镜像仓库。


第三步:按照阿里云生成的命令进行相关操作。

将镜像推送到阿里云仓库,就走上图的第3个步骤:

从阿里上面拉去镜像,执行上图的第2个步骤:

以上是关于Docker 学习笔记总结的主要内容,如果未能解决你的问题,请参考以下文章

Docker 学习笔记总结

Docker 学习笔记总结

Docker 学习笔记总结

Docker 学习笔记总结

Docker 学习笔记总结

Docker 学习笔记总结