Docker概述及常用命令

本文详细介绍了Docker的基本概念、组件、安装流程、镜像加速以及常用命令。Docker作为一个轻量级的应用容器引擎,解决了项目线上环境配置的难题,实现了应用的快速部署和升级。通过Docker,开发者可以将应用及其依赖打包到容器中,实现跨平台运行。文中还提到了Docker相比传统虚拟机的高效性,并提供了阿里云镜像加速的配置方法。此外,列举了Docker的常用命令,包括镜像管理、容器操作和其他重要命令。

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

1.Docker概述

  • 简介

Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

  • 背景

项目线上环境的配置是十分麻烦的,特别是不是很熟悉Linux的朋友。每一个机器都要部署环境(Redis集群、ES…),而且Windows到Linux也有很多坑,费时费力。

我们开发好一个项目,打成一个jar或war包很容易,但是部署前服务器的环境安装和配置可能一天又过去了还装不好!想着如何可以在打成jar包的时候把我们开发时的环境也带上?

jar ----> 服务器(Redis、ES、JDK、Mysql…) 需要开发+运维

jar+容器(Redis、ES、JDK、Mysql…) ----> 服务器 (即项目带上环境安装打包)开发人员就能搞定

Docker给出了以上问题的解决方案!

image-20210713093205697

JRE–多个应用(端口冲突)—原来都是交叉的!
隔离:Docker核心思想!打包装箱!每个箱子是互相隔离的。通过该机制,可以将服务器利用到极致。

  • 相关网站

官方网站:

https://www.docker.com/

官方文档:(超详细)

https://docs.docker.com/

仓库地址:(类似github)

https://hub.docker.com/

docker中文网:

https://www.docker.org.cn/index.html

菜鸟教程:

https://www.runoob.com/docker/docker-tutorial.html

  • 作用

传统虚拟机

在这里插入图片描述

Docker

在这里插入图片描述

区别:

  1. 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  2. 容器内的应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
  3. 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。

DevOps(开发、运维)

  • 应用更快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像发布测试,一键运行

  • 更便捷的升级和扩容

项目打包成一个镜像

  • 更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的。

  • 更高效的计算资源利用

2. Docker基本组成

Docker架构图

在这里插入图片描述

镜像( image ) :
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===>run ==> tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器( container ) :
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。启动,停止,删除,基本命令!目前就可以把这个容器理解为就是一个简易的linux系统

仓库(repository ) :
仓库就是存放镜像的地方!

仓库分为公有仓库和私有仓库!

Docker Hub (默认是国外的)

阿里云…都有容器服务器(配置镜像加速)

3. Docker使用

3.1 操作环境

使用阿里云服务器

环境参数:

系统版本信息

在这里插入图片描述

内核参数:3.10.0-1160.11.1.el7.x86_64

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vOANR7iP-1626274830897)(C:/Users/Gangbb/AppData/Roaming/Typora/typora-user-images/image-20210713124130815.png)]

3.2 Docker安装

下载地址:https://docs.docker.com/engine/install/

在这里插入图片描述

  1. 卸载旧版本docker
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

在这里插入图片描述

  1. 安装需要的工具包
yum install -y yum-utils
  1. 设置docker镜像仓库
# 1.官网默认镜像(国外的,很慢)
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 2.阿里云镜像(推荐,快得多)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 安装最新的docker引擎

先更新下软件包的索引

yum makecache fast

在这里插入图片描述

安装引擎

# ce-社区版 ee-企业版 (一般都是用社区版)
yum install docker-ce docker-ce-cli containerd.io

在这里插入图片描述

Ps:如果想要安装指定版本:

# VERSION_STRING是版本号
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
  1. 启动docker
systemctl start docker

启动后查看docker信息:

docker version

在这里插入图片描述

说明启动成功!

  1. helle world测试
  • 拉取hello world
docker run hello-world

在这里插入图片描述

  • 查看hello world镜像
docker images

在这里插入图片描述

  1. 如果需要卸载docker
# 1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

# 2. 删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

3.3 阿里云镜像加速

  1. 登录到阿里云控制台,搜索容器镜像服务

在这里插入图片描述

  1. 找到镜像加速地址

在这里插入图片描述

  1. 配置使用
# 1. 创建一个目录
sudo mkdir -p /etc/docker

# 2. 编写配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://6f5o0pi2.mirror.aliyuncs.com"]
}
EOF

# 3. 服务重启
sudo systemctl daemon-reload

# 4. 重启docker
sudo systemctl restart docker

在这里插入图片描述

4. Docker运行流程和原理

运行流程

在这里插入图片描述

底层原理

Docker是一个Client - Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!DockerServer接收到Docker-Client的指令,就会执行这个命令!

在这里插入图片描述

Docker为什么比虚拟机快

1、Docker有着比虚拟机更少的抽象层。
2、docker利用的是宿主机的内核,vm需要是Guest Os.

在这里插入图片描述

所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导性的操作。虚拟机是加载Guest OS,分钟级别的,而docker 是利用宿主机的操作系统吗,省略了这个复杂的过程,秒级!

对比图

在这里插入图片描述

5. Docker的常用命令

5.1 帮助命令

# 显示docker版本信息
docker version

# 显示docker的系统信息,包括镜像和容器的数量
docker info

# docker 帮助命令
docker --help 或者 docker 某命令 --help

官网的命令查看地址:https://docs.docker.com/reference/

别人的docker命令笔记:https://www.docker.org.cn/dockerppt/106.html

5.2 镜像命令

5.2.1 查看所有镜像

docker images

[root@LYX ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
tomcat        9.0       c0e850d7b9bb   2 months ago   667MB
tomcat        latest    c0e850d7b9bb   2 months ago   667MB
minio/minio   latest    305cf2390a4e   2 months ago   184MB
hello-world   latest    d1165f221234   4 months ago   13.3kB

REPOSITORY = 镜像的仓库源
TAG = 镜像的标签
IMAGE ID = 镜像的id
CREATED = 镜像的创建时间
SIZE = 镜像的大小

docker images其他可选项

[root@LYX ~]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)  (列出所有镜像)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs   (只显示镜像的id)

在这里插入图片描述

5.2.2 搜索镜像

可以在官网的网页搜索:https://registry.hub.docker.com/

在这里插入图片描述

命令搜索:

docker search xxx

在这里插入图片描述

docker search其他可选项(一些筛选条件)

[root@LYX ~]# docker search --help

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
      
 例如:docker search mysql -filter=STARS=3000

5.2.3 下载镜像

docker pull 镜像名[:tag]

示例(不指定版本下载):

[root@LYX ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql # 不写tag,默认下载最新版
b4d181a07f80: Pull complete  # 分层下载:docker image的核心 联合文件系统
a462b60610f5: Pull complete 
578fafb77ab8: Pull complete 
524046006037: Pull complete 
d0cbe54c8855: Pull complete 
aa18e05cc46d: Pull complete 
32ca814c833f: Pull complete 
9ecc8abdb7f5: Pull complete 
ad042b682e0f: Pull complete 
71d327c6bb78: Pull complete 
165d1d10a3fa: Pull complete 
2f40c47d0626: Pull complete 
Digest: sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b # 签名
Status: Downloaded newer image for mysql:latest 
docker.io/library/mysql:latest # 真实地址

# 由最后一行可知:docker pull mysql = docker pull docker.io/library/mysql:latest

示例(指定版本下载):

先去官网搜索到所支持的版本

在这里插入图片描述

[root@LYX ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
b4d181a07f80: Already exists # 可以看到前面下载的最新版已经带有这些东西,可以公用,就不用下载了,极大减少内存。
a462b60610f5: Already exists 
578fafb77ab8: Already exists 
524046006037: Already exists 
d0cbe54c8855: Already exists 
aa18e05cc46d: Already exists 
32ca814c833f: Already exists 
52645b4af634: Pull complete 
bca6a5b14385: Pull complete 
309f36297c75: Pull complete 
7d75cacde0f8: Pull complete 
Digest: sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

看看结果:

在这里插入图片描述

5.2.4 删除镜像

根据id删除:

docker rmi -f 镜像id

示例:

在这里插入图片描述

批量删除:

docker rmi -f 镜像id 镜像id 镜像id 镜像id...

删除全部容器:

docker rmi -f $(docker images -ap)

5.3 容器命令

**说明:**我们有了镜像才可以创建容器。

  1. 下载一个centos镜像
docker pull centos
  1. 新建容器并创建
docker run [可选参数] image

# 参数说明
--name="Name" 		# 容器名字,用于区分容器
-d            		# 后台方式运行
-it           		# 使用交互方式进行,进入容器查看内容
-p            		# (小写p)指定容器的端口 -p 8080:8080
	-p 主机端口:容器端口     # 主机端口映射容器端口(常用)
	-p ip:主机端口:容器端口  # 上面的基础再带个ip
	-p 容器端口
-P			  		# (大写P)随机指定端口

测试

[root@LYX ~]# docker images   
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
mysql         latest    5c62e459e087   2 weeks ago    556MB
tomcat        9.0       c0e850d7b9bb   2 months ago   667MB
tomcat        latest    c0e850d7b9bb   2 months ago   667MB
minio/minio   latest    305cf2390a4e   2 months ago   184MB
hello-world   latest    d1165f221234   4 months ago   13.3kB
centos        latest    300e315adb2f   7 months ago   209MB
[root@LYX ~]# docker run -it centos /bin/bash  # (启动并进入容器)
[root@c32b27564ef1 /]# ls  #(查看容器内的 centos的 目录)
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
# 容器内的centos跟外面没有半点关系,而且只是centos的基础版本,很多命令不完善

退出容器

在这里插入图片描述

  1. 查看所有运行中的容器
# 查看所有运行中的容器
docker ps

# 查看所有运行过的容器(运行中+历史运行过的)
docker ps -a

# 最近创建的容器
docker ps -a -n=x

在这里插入图片描述

在这里插入图片描述

# 只显示容器编号
docker ps -q  docker ps -aq

在这里插入图片描述

  1. 退出容器
# 容器直接停止并退出
exit
# 快捷键方式,容器不停止退出
Ctrl + P + Q 
  • exit:离开容器,并关闭容器,这种好比要出门了,且要关灯,只有等下次重新启动该容器后,才会再次打开灯。
  • Ctrl + p + q:暂时离开容器,还会回来,这种好比临时出门,下楼拿快递就回来,此时状态容器状态还是 up 运行中。
  1. 删除容器
# 删除指定容器,不能删除正在运行的容器,如需强制删除需要 rm -f
docker rm 容器id

# 删除所有容器
docker rm -f $(docker ps -aq)

# 通过管道删除所有容器 (查出所有容器过滤到docker rm)
docker ps -a -q|xargs docker rm

在这里插入图片描述

  1. 启动和停止容器
# 启动容器
docker start 容器id

# 重启容器
docker restart 容器id

# 停止当前正在运行的容器
docker stop 容器id

# 强制停止当前容器
docker kill 容器id

5.4 其他重要命令

  1. 后台启动容器
docker run -d 镜像名

示例:

在这里插入图片描述

运行后发现并没有centos在运行!

坑: docker 容器使用后台运行,就必须要有一个前台进程,dokcer发现没有应用,就会自动停止。

  1. 查看日志
docker logs -tf --tail 日志条数 容器id
  1. 容器中进程信息
docker top 容器id
  1. 查看镜像的元数据
docker inspect 容器id
  1. 进入当前正在运行的容器

因为我们通常都是使用后台方式运行的,需要进入容器,修改一些配置。

# 方式一
docker exec -it 容器id bashshell(例如:/bin/bash)

在这里插入图片描述

# 方式二
docker attach 容器id

两者区别:

  • docker exec:进入容器后开启一个新的终端,可以在里面操作(常用)
  • docker attach:进入容器正在执行的终端,不会启动新的进程
  1. 从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径

PS:拷贝是一个手动的过程,未来我们使用 -v 卷技术,可以实现自动备份

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值