初始Docker

Docker是一个轻量级容器技术,提供了一种标准化的环境打包方式,解决了跨平台部署和环境一致性问题。它通过镜像实现应用的快速部署,适用于节省项目环境搭建时间、保证环境一致性、持续集成和微服务场景。Docker比虚拟机更轻便、性能更好,通过Docker命令可以管理镜像和容器,如`docker run`、`docker ps`、`docker rm`等。此外,配置Docker加速器能提升下载速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker概述

什么是docker

Docker本质上是一个采用虚拟化技术的容器,基于Linux容器进行再封装,使用户不用关心容器的管理,而简化应用操作。

Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

docker 为什么会出现?

背景介绍:

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协助我们需要关心的问题很多,这也是很多互联网公司不得不面对的问题,

特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。

Docker之所以发展如此迅速,也是运维它给出了一个标准化的解决方案。

环境配置如此麻烦,换一台机器,就要重新来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境

一模一样的复制过来。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。

之前在服务器配置一个应用的运行环境,要安装各种软件,安装和配置这些东西有多麻烦就不必多说了。

它还不能跨平台。假设我们是在Windows上安装的这些环境,到了Linux又得重新安装。况且就算不跨操作系统,换另一台同样的操作系统的服务器,要移植应用也是非常的麻烦的。

Docker镜像的设计,使得Docker得以打破过去【程序即应用】的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况。限定最大的cpu使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。

总结成一句话:docker的标准化让快速扩展,弹性伸缩变得简单

docker应用场景
1、场景一:节省项目环境部署时间
1)单项目打包
  1. 每次部署项目到测试、生产等环境,都要部署一大堆依赖的软件、工具,时间久,出错概率大。

  2. Docker主要理念就是环境打包部署,可在任意Docker Engine运行。

  3. 我们只需要将每个项目环境打包到镜像,push到镜像仓库,当有需要部署这个项目时,直接pull镜像启动容器,这个项目就可以访问了!一次构建多次部署,一劳永逸。

2)整套项目打包
  1. 比如有一个产品可以整套部署到客户那里,以往都是派一名实施工程师到客户那部署。

  2. 如果用了Docker,我们可以前期将这套项目封装打包起来,实现一键部署,分分钟钟搞定,就不需要再派人过去了。比如官方的Docker Compose编排工具。

3)新开源技术试用
  1. 有时,我们想调研一些开源项目,我们可以直接从公共镜像仓库pull项目官方做好镜像启动容器即可。
2、场景二:环境一致性
  1. 项目在开发电脑本地运行没问题,到了测试或生产环境就运行不起来。

  2. Docker将项目环境打包成镜像,可以在任何Docker Engine部署。

3、场景三:持续集成
  1. 一个项目版本快速迭代的测试场景,需要一个合理的CI(持续集成)/CD(持续部署)环境支撑。

  2. CI/CD是一个周期性自动化项目测试流程,包括构建、部署、测试、发布等工作,很少需要人工干预。

  3. Docker通过项目镜像构建和快速部署,打通测试环境与生产环境,高度保持多个环境之间一致性。

4、场景四:微服务
  1. 微服务指尽可能细粒度拆分业务程序架构,由多个独立服务组成业务系统。

  2. Docker容器作为这些独立服务的部署单元,每个服务单独部署到一个docker容器中。

docker的历史

2010年,几个搞IT的年轻人在美国成立以一家公司docCloud,做一些pass的云计算服务,他们将自己的容器化技术,命名为Docker,刚诞生的时候没有引起行业的注意,由于公司活不下去,2013年Docker开源,从此走入开发者的视野,开源后每个月都会更新一个版本

2014年4月9日,Docker1.0发布

在容器技术之前,我们都是使用虚拟机技术VM

虚拟机十分笨重,容器十分轻巧

docker中的名词概念
镜像(image)

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务

容器(container)

Docker利用容器技术,独立运行一个或者一组应用, 可以理解为一个简易的Linux系统。

仓库(repository)

仓库就是存放镜像的地方

分为公有仓库和私有仓库

Docker Hub(默认是国外的仓库)

可以通过阿里云等配置国内镜像加速

Docker安装

# 1)安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 2)移除系统中的旧版本的docker
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 3)添加Docker软件包源(否则doker安装的不是新版本)
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 切换docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新软件包索引
yum makecache fast

# 4)安装Docker CE  docker客户端  容器
yum install docker-ce docker-ce-cli containerd.io

# 5)启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker

# 5)测试docker是否安装成功(hello-world是官方提供的一个测试镜像)
docker run hello-world

# 6)查看docker基本信息
docker info
docker version

# 移除docker
yum remove docker-ce docker-ce-cli containerd.io

# 删除docker的文件
rm -rf /var/lib/docker
配置docker加速器
# 修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://1evgikmo.mirror.aliyuncs.com"]
}
EOF
# 重新加载
systemctl daemon-reload
# 重新启动docker
systemctl restart docker
hello-world运行流程

在这里插入图片描述

底层原理
Docker是怎么工作的?

1、Docker是一个Client-Server结构 的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!

DockerServer接收到Docker的指令,执行命令。
在这里插入图片描述

Docker为什么比VM快?

1、Docker有着比虚拟机更少的抽象层。

2、Docker 用的是宿主机的内核,vm需要的是GuestOS

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

Docker容器虚拟机(VM)
操作系统与宿主机共享OS宿主机OS上运行宿主机OS
存储大小镜像小,便于存储与传输镜像庞大(vmdk等)
运行性能几乎无额外性能损失操作系统额外的cpu、内存消耗
移植性轻便、灵活、适用于Linux笨重、与虚拟化技术耦合度高
硬件亲和性面向软件开发者面向硬件运维者

Docker常用命令

帮助命令
docker version    # docker 版本信息
docker info       # docker 的系统信息,包括镜像和容器的数量 
docker 命令 --help  # 帮助命令

帮助命令地址:

https://docs.docker.com/engine/reference/commandline/cli/

docker镜像命令
docker images

查看本地主机上所有的镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8EQfJB5P-1623681473980)(images/image-20210614143019666.png)]

REPOSITORY: 镜像的仓库源

TAG: 镜像的标签

IMAGEID: 镜像的id

CREATED: 镜像的创建时间

SIZE: 镜像的大小

可选参数:

-a 查看当前docker中的所有的镜像

-q 仅查看镜像的id

docker search imagesname

使用docker搜索镜像

docker search mysql

在这里插入图片描述

NAME 搜索结果的名称

DESCRIPTION 描述

STARS 收藏

可选项, 通过stars来过滤

 --filter=STARS=3000    # 搜索STARS大于3000的
docker pull

拉取镜像

docker pull mysql

[root@jiyun-clone-111 ~]# docker pull mysql
Using default tag: latest  # 如果不写tag, 默认是latest
latest: Pulling from library/mysql
69692152171a: Pull complete  # 分层下载  docker images的核心  联合文件系统
1651b0be3df3: Pull complete
951da7386bc8: Pull complete
0f86c95aa242: Pull complete
37ba2d8bd4fe: Pull complete
6d278bb05e94: Pull complete
497efbd93a3e: Pull complete
f7fddf10c2c2: Pull complete
16415d159dfb: Pull complete
0e530ffc6b73: Pull complete
b0a4a1a77178: Pull complete
cd90f92aa9ef: Pull complete
Digest: sha256:d50098d7fcb25b1fcb24e2d3247cae3fc55815d64fec640dc395840f8fa80969  # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  # 真实地址

docker pull mysql 等价于 docker pull docker.io/library/mysql:latest

通过tag指定版本下载

docker pull mysql:5.7

指定的版本必须是存在的

在这里插入图片描述

docker rmi -f

rmi remove images 移除镜像

-f # 按id删除

docker rmi -f d1165f221234

在这里插入图片描述

docker rmi -f 镜像id1 镜像id2

删除多个

docker rmi -f $(docker images -aq)

删除全部镜像

容器命令

拉取centos镜像

docker pull centos

新建容器并启动
docker run [可选参数] image

# 参数说明
--name="Name"    # 容器名称,容器启动以后用来区分的名称
-d				 # 以后台方式运行
-it 			 # 以交互方式运行, 进入容器查看内容
-p				 # 指定容器的端口 -p 8080:8080
	-p 四种用法
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口
    -p 容器端口
    
-P				 # 随机指定端口


# 测试,启动并进入容器
docker run -it centos /bin/bash

在这里插入图片描述

# 退出容器
exit

# 只退出不停止容器
ctrl + p + q
列出所有的容器

docker ps

# docker ps 命令
	# 列出当前正在运的容器
-a  # 列出当前正在运行的容器(包含历史运行的容器)
-n=?# 显示最近创建的容器
-q  # 只显示容器的编号

在这里插入图片描述

删除容器
# 删除容器
docker rm 容器id                # 删除指定的容器, 不能删除正在运行的容器
docker rm -f 容器id             # 强制删除指定的容器id
docker rm -f $(docker ps -aq)  # 递归删除所有的容器
docker -a -q | xargs docker rm # 删除所有的容器
启动和停止容器
# 启动和停止容器
docker strat 容器id    # 启动停止的容器
docker restart 容器id  # 重启容器
docker stop 容器id     # 停止容器id
docker kill 容器id     # 杀死容器
常用的其它命令
后台启动容器
docker run -d centos  

# -d 启动容器以后,使用dokcer ps发现容器停止了

# docker 默认认为当前容器没有被使用,所以自动结束了进程
查看日志
docker logs -tf 容器

# 编写脚本: docker run -d centos /bin/sh -c "while true;do echo haishangyueming;sleep 1; done"

# 显示日志
-tf      # 显示日志
--tail number  # 要显示日志条数
docker logs -tf --tail 10 容器id  
查看容器中的进程信息
docker top 容器id

[root@server ~]# docker top 81abcd607f77
UID                 PID                 PPID                C                   STIME               TTY     
root                1474                1458                0                   21:18               pts/0    
查看镜像的元数据
[root@jiyun-clone-111 ~]# docker ps -q
27273fe99438

# docker inspect 容器id
docker inspect 27273fe99438

在这里插入图片描述

进入正在运行的容器
docker exec -it 容器id /bin/bash  # 以交互模式进入正在运行的容器

docker attach 容器id  # 进入正在运行的容器

# 区别
docker exec     # 进入容器后开启一个新的终端(常用)
decker attach   # 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到本地
docker cp 容器id:容器内路径 本地路径
docker cp 81abcd607f77:/home/test.py /home
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值