Docker入门到熟练掌握

本文围绕Docker展开,先介绍其基本组成,包括镜像、容器和仓库。接着讲解在CentOS 7环境下的安装步骤,以及阿里云镜像加速配置。还阐述了Docker的底层原理,对比其与虚拟机的速度优势。最后详细列举了Docker的常用命令,如帮助、镜像、容器等命令。

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

Docker安装

Docker的基本组成

在这里插入图片描述

镜像(image):

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

容器(container):

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。

启动,停止,删除,基本命令!

目前可以把这个容器理解为一个简易的linux系统

仓库(repository):

仓库就是存放镜像的地方!

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

Docker Hub

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

安装Docker

环境准备

  1. linux基础
  2. CentOS 7
  3. 远程连接工具

环境查看

# 系统内核 4.18
[root@localhost ~]# uname -r
4.18.0-240.el8.x86_64

安装

帮助文档:

# 1.卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  
# 2.需要的安装包
yum install -y yum-utils
  
# 3.设置镜像的仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的下载地址
yum-config-manager \
  	--add-repo \
  	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云

# 更新yum软件包索引
yum makecache fast # CenOS8去掉fast

# 4.安装docker相关的内容 docker-ce 社区  ee 企业版
yum install docker-ce docker-ce-cli containerd.io 
  
# CentOS8下载最新版报错,需加上 
  # 1. 加上 --nobest 下载低版本
  # 2. 安装 containerd.io 
  wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
	yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm 
	yum install -y docker-ce docker-ce-cli
  
# 5.启动docker
systemctl start docker
  
# 6.使用docker version查看

在这里插入图片描述

# 配置docker镜像加速源
vi /etc/docker/daemon.json # 添加以下内容
{
	"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

# 重新加载配置文件
systemctl daemon-reload 
systemctl restart docker.service

# 7.hello-world
docker run hello-world
  
# 8.查看下载的hello-world镜像
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
  
# 了解:卸载docker
  # 1.卸载依赖
	yum remove docker-ce docker-ce-cli containerd.io
  # 2.删除资源
  rm -rf /var/lib/docker 
  # /var/lib/docker docker的默认工作路径

# 9.设置docker开机自启
systemctl enable docker.service

阿里云镜像加速

1、登录阿里云,找到容器服务
在这里插入图片描述

2、找到镜像加速地址

在这里插入图片描述

3、配置使用

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://tjmqc3vy.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

回顾HelloWorld流程

在这里插入图片描述

在这里插入图片描述

底层原理

Docker是怎么工作的?

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

DockerServer接收到Docker-Client的指令,就会执行这个命令!

在这里插入图片描述

Docker为什么比虚拟机快?

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

2、Docker利用的是宿主机的内核,VM需要的是Guest OS

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

在这里插入图片描述

之后学习完所有的命令,再回过头来再看这段理论,就会很清晰!

docker的常用命令

帮助命令

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

查看帮助文档:https://docs.docker.com/reference/

在这里插入图片描述

镜像命令

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

在这里插入图片描述

[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
  
# 解释
REPOSITORY  镜像仓库的源
TAG 				镜像的标签
IMAGE ID 		镜像的id
CREATD			镜像的创建时间
SIZE				镜像的大小

# 可选项
  -a, --all             Show all images (default hides intermediate images)
  											列出所有镜像
  -q, --quiet           Only show image IDs
  											只显示id

**docker search ** 搜索镜像

[root@localhost ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10300     [OK]       
mariadb                           MariaDB is a community-developed fork of MyS…   3809      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   753                  [OK]

# 可选项,通过收藏来过滤
--filter=STARS=3000  搜索出来的镜像就是STARS大于3000的

[root@localhost ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10300     [OK]       
mariadb   MariaDB is a community-developed fork of MyS…   3809      [OK]       
[root@localhost ~]# docker search mysql --filter=STARS=5000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10300     [OK]   


docker pull 下载镜像

# 下载镜像 docker pull 镜像名字[:tag]
[root@localhost ~]# docker pull mysql          
Using default tag: latest			# 如果不写tag,默认就是latest
latest: Pulling from library/mysql
6ec7b7d162b2: Pull complete 	# 分层下载,docker images的核心 联合文件系统
fedd960d3481: Pull complete 
7ab947313861: Pull complete 
64f92f19e638: Pull complete 
3e80b17bff96: Pull complete 
014e976799f9: Pull complete 
59ae84fee1b3: Pull complete 
ffe10de703ea: Pull complete 
657af6d90c83: Pull complete 
98bfb480322c: Pull complete 
6aa3859c4789: Pull complete 
1ed875d851ef: Pull complete 
Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址

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

# 指定版本
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
6ec7b7d162b2: Already exists 
fedd960d3481: Already exists 
7ab947313861: Already exists 
64f92f19e638: Already exists 
3e80b17bff96: Already exists 
014e976799f9: Already exists 
59ae84fee1b3: Already exists 
7d1da2a18e2e: Pull complete 
301a28b700b9: Pull complete 
529dc8dbeaf3: Pull complete 
bc9d021dc13f: Pull complete 
Digest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

# 查看当前下载镜像
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         5.7       f07dfa83b528   43 hours ago    448MB
mysql         latest    a347a5928046   43 hours ago    545MB
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB

docker rmi 删除镜像!

docker rmi -f IMAGE ID # 删除指定镜像ID
docker rmi -f IMAGE ID IMAGE ID IMAGE ID IMAGE ID# 删除多个镜像
docker rmi -f $(docker images -aq) # 删除全部的镜像

在这里插入图片描述

容器命令

说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image

# 参数说明
--name="name" 容器名字 tomcat01 tomcat02 用来区分容器
-d 						后台方式运行
-it						使用交互方式运行,进入容器查看内容
-p						指定容器的端口 -p 8080:8080
		-p ip:主机端口:容器端口
		-p 主机端口:容器端口(常用)
		-p 容器端口
		容器端口
-P						随机指定端口

# 测试,启动并进入容器
[root@localhost ~]# docker run -it centos /bin/bash
[root@d5c922af01f8 /]# ls # 查看容器内的centos,基础版本,很多命令都是不完善的!
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@d5c922af01f8 /]# 

# 从容器中退到主机
[root@58226835200d /]# exit
exit
[root@localhost /]# cd /
[root@localhost /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@localhost /]# 

在这里插入图片描述

列出所有的运行的容器

# docker ps 命令
	 # 列出当前正在运行的容器
-a # 列出当前正在运行的容器+带出历史运行过的容器
-n=? # 显示最近创建的指定数目的容器
-q   # 只显示容器的编号

[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                     PORTS     NAMES
58226835200d   centos        "/bin/bash"   4 minutes ago   Exited (0) 4 minutes ago             hopeful_elgamal
d5c922af01f8   centos        "/bin/bash"   9 minutes ago   Exited (0) 5 minutes ago             pensive_dijkstra
147fa8f96542   hello-world   "/hello"      4 hours ago     Exited (0) 4 hours ago               nervous_brown
b6bf39fed802   hello-world   "/hello"      4 hours ago     Exited (0) 4 hours ago               gracious_haslett
[root@localhost /]# 

退出容器

exit # 直接容器停止退出
Ctrl + P + Q # 容器不停止退出
docker attach 容器id # 回到后台运行的容器中
docker exec -it 容器id /bin/bash # 回到后台运行的容器中

删除容器

docker rm 容器id								   # 删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq)		   # 删除所有的容器
docker ps -a -q|xargs docker rm -f # 删除所有的容器
# 镜像和容器的区别?镜像是类,容器是实例

启动和停止容器的操作

docker start 容器id		# 启动容器
docker restart 容器id # 重启容器
docker stop 容器id		# 停止当前正在运行的容器
docker kill 容器id		# 杀掉当前正在运行的容器
# run是从镜像中开启一个新的容器进行运行,start是将已有的容器进行运行

常用的其他命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值