一.Docker的理念

一次镜像,处处运行.达成Docker容器在任何操作系统上都是一致的,实现应用跨平台、跨服务器.
解决运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术.

1.1 容器和虚拟机的区别

在这里插入图片描述

  • 虚拟机: 带环境安装的一种解决方案.它可以在一种操作系统里面运行另一种操作系级,比如在Windows10系统里面运行Linux系统CentOS7。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
    虚拟机缺点: 1资源占用多 2冗余步骤多 3启动慢
  • 容器: 可以将软件运行所需的所有资源打包到一个隔离的容器中。不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置
    总结: Docker容器在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。

1.2 docker容器

Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实列,可大大提升物理服务器的CPU和内存的利用率。

特点:
更快速的应用交付和部署√
更便捷的升级和扩缩容√
更简单的系统运维√
更高效的计算资源利用√

基本组成:
docker镜像 一个只读模板.它相当于是一个root文件系统。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
docker容器 实例类似于java中new出来的实例对象,容器是用镜像创建的运行实例。
docker仓库 集中存放镜像的地方.

在这里插入图片描述
在这里插入图片描述

二. docker安装

Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。
Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。因此,,Docker必须部署在Linux内核的系统上。如果其他系统想部署Docker就必须安装一个虚拟Linux环境。

docker镜像地址

docker安装方法

2.1 docker安装命令

欧拉22,centos8请看--> Docker 最佳实战

以下针对centos7

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

# 后台启动docker
sudo systemctl start docker
sudo systemctl enable docker

注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
# yum list docker-ce-selinux- --showduplicates | sort -r
# sudo yum -y install docker-ce-selinux-[VERSION]

# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令
# 经典网络:
# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# VPC网络:
# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo



# 卸载docker
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

以下针对ubuntu

# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

#更新源
sudo apt update
sudo apt-get update

#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#等待安装完成

#查看Docker版本
sudo docker version

# 后台启动docker
sudo systemctl start docker
sudo systemctl enable docker

2.2 docker基础常用命令

注意不要安装centos8否则yum都用不了
docker只加载镜像最小内核

systemctl stop docker # 停止
systemctl status docker # 查看docker状态
systemctl enable docker # 开机启动

docker info # 查看docker概要信息
docker --help # 查看docker总体帮助文档
docker 具体命令 --help # 查看docker命令帮助文档

# --name="容器新名称"
# -p 指定端口映射
# -d 守护线程启动
docker run -d 镜像名 # 注意一定要配合docker ps使用! 有的不支持后台启动,造成自杀. mysql,redis一般这样使用
docker exec -it 容器id /bin/bash # 重新进入容器终端交互,启动新进程的同时打开终端.退出不会停止容器
# docker attach 容器id # 重新进入容器终端交互,不启动新进程打开终端,退出会停止容器
docker run -it [--name=cen] centos /bin/bash # 以交互式容器启动,为容器重新分配一个伪输入终端.容器名称为cen的centos镜像实例容器
yum -y update # 更新yum源
yum -y install vim # 安装所需要的vim

exit # 退出交互式容器终端,容器停止; 
docker start 容器名或容器id # 启动已经停止运行的容器
docker restart 容器名或容器id # 重启容器
docker stop 容器名称或容器id # 停止容器
docker kill 容器名称或容器id # 强制停止容器

docker cp 容器id:容器内文件路径 目的主机路径 # 将容器内文件复制到主机上
docker cp 宿主机文件路径 <容器名称或者ID>:容器文件存放路径 # 将宿主机文件复制到容器中
docker export 容器id>文件名.tar #导出容器的内容留作为一个tar归档文件
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

查看操作

拉取完毕一般记得刷新配置source /etc/profile

# 我们使用REPOSITORY:TAG来定义不同的镜像
docker images  # 列出本地镜像 REPOSITORY镜像源 TAG版本号 IMAGE ID镜像id CREATED创建时间 SIZE大小
docker ps # 查看当前正在运行的容器
docker ps -a # 查看所有容器
docker search 镜像名 # 搜索镜像是否在远程库
docker pull 镜像名[:TAG] # 拉取镜像到本地镜p像
# 拉取完毕一般记得刷新配置source /etc/profile
docker system df  # 查看镜像/容器数据卷所占空间

docker logs 容器id # 查看容器日志
docker inspect 容器id # 查看容器内部细节

删除操作

docker rmi -f 镜像名 # 删除镜像
docker rmi -f 镜像id # 强制删除镜像

docker rm 容器id # 删除已经停止的容器
docker rm -f 容器id #强制删除容器
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器

commit提交镜像

ctrl+p+q # 退出,容器不停止
docker commit -m="提交信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名] # 继承当前容器 反向生成新镜像. 容器外使用

默认情况,仓库被创建在容器的/varliblregistry目录下,建议自行用容器卷映射,方便于宿主机联调

# 本地镜像发布到私服仓库

docker pull registry # 拉取私服仓库
#-p 5000:5000 分别暴露宿主机端口和容器内部端口
docker run -d -p 5000:5000 [-v 宿主机的路径:容器内的路径 --privileged=true] registry # 生成registry镜像的容器
docker commit -m="提交信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名] # 继承当前容器 反向生成新镜像. 容器外使用
curl -XGET http://127.0.0.1:5000/v2/_catalog # 验证私服库有啥
docker tag [ImageId] http://127.0.0.1:5000/[镜像名]:[镜像版本号] # 重新规范命名镜像

[root@VM-16-9-centos ~]# vi /etc/docker/daemon.json

{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}


sudo systemctl daemon-reload
sudo systemctl restart docker

docker pull 镜像名
curl -XGET http://127.0.0.1:5000/v2/_catalog # 验证私服库有啥

2.3配置阿里云镜像加速

用户唯一,加速拉取docker内容
在这里插入图片描述

在这里插入图片描述

2.4Docker镜像

docker镜像是分层的: UnionFs,(联合文件系统)Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统>的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以>通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
docker镜像加载原理: bootfe(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载>bootfs文件系统,在Docker镜像的最底层是引导文件系统boots。这一层与我们典型的LinuxUnix系统是一样的,包含booth加载器和内核。>>当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs (root fle system),在bootts之上。包含的就是典型Linux系统中的/dev, /proc, bin, letc等标准目录和文件。rootfs就是各种不同的操作>系统发行版,比如Ubuntu,Centos等等。

当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动-无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。

2.5本地镜像发布阿里云(非私有库)

在这里插入图片描述
在这里插入图片描述
上传和拉取请自行查阅官方文档

注意
在这里插入图片描述
之所以上传的容量减小了是因为UnionFs,(联合文件系统)的强大.只上传容器层的内容.

docker高级篇-初入分布式云原生-运维开发工程师

docker高级篇-初入分布式云原生-运维开发工程师

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐