一.Docker的基本组成

1.Docker是什么?

Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分离,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 快速交付、测试和部署代码的方法,您可以显着减少编写代码和在生产环境中运行之间的延迟。

2.我可以使用Docker做什么?

快速、一致地交付您的应用程序
Docker 通过允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作来简化开发生命周期。容器非常适合持续集成和持续交付 (CI/CD) 工作流程。
响应式部署和扩展
Docker 基于容器的平台允许高度可移植的工作负载。Docker 容器可以在开发人员的本地笔记本电脑、数据中心的物理或虚拟机、云提供商或混合环境中运行。
Docker 的可移植性和轻量级特性还使得动态管理工作负载、根据业务需求近乎实时地扩展或拆除应用程序和服务变得容易。
在相同硬件上运行更多工作负载
Docker 是轻量级和快速的。它为基于管理程序的虚拟机提供了一种可行且经济高效的替代方案,因此您可以使用更多计算容量来实现业务目标。Docker 非常适合高密度环境以及需要用更少资源完成更多工作的中小型部署。

3.Docker使用的是客户端-服务端(C/S)架构程序,什么是C/S、B/S?
客户端-服务端(C/S),俗称Client-Server(C/S)。例如:QQ,迅雷等,这种需要安装软件才能与服务器进行数据通信的方式就是C/S架构。
浏览器-服务端(B/S),俗称Browser-Server(B/S)。例如:仅需访问网址,就可以看片的方式就属于B/S架构。

Docker 使用客户端-服务器架构。Docker_客户端与 Docker守护进程_对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序_可以_ 在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序使用 REST API,通过 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。
在这里插入图片描述

镜像(image):
Docker 镜像就是一个只读的模板,可以通过这个模板来创建容器。一个镜像是可以创建多个容器的,就好像java里的类和对象一样,类是镜像,容器是对象。
容器(container):
Docker 利用容器来运行应用。容器是从镜像创建而来的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
仓库(repository):
仓库就是存放镜像的地方,分为公有仓库(Public)和私有仓库(Private)两种形式,其中官方仓库 Docker Hub是国外的,而国内很多公司,像阿里云,华为云等都有自己的容器服务,Docker默认使用的是国外的仓库,我们在国内访问就很慢,所以我们在学习的时候就需要配置镜像加速。
我们需要注意的是Docker本身并不是容器,它只是创建容器的工具,是应用容器引擎。
Build, Ship and Run 译为:构建镜像,运输镜像,运行镜像
Build(构建镜像):镜像就像是集装箱包括文件以及运行环境等等资源。
Ship(运输镜像):主机和仓库间运输,这里的仓库就像是超级码头一样。
Run (运行镜像):运行的镜像就是一个容器,容器就是运行程序的地方。

二.Docker在线安装

基本要求:Linux要求内核3.0以上、CentOS 需要是7版本的

1.使用uname命令验证-查看即可
[root@iZbp10xkd0ts74qqt1yjlyZ /]# uname -r
5.10.112-11.2.al8.x86_64
2.如果已经安装过Docker,先卸载已安装的Docker。
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

在这里插入图片描述

3.安装yum工具包和存储驱动
yum install -y yum-utils
4.设置镜像的仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
#上述方法默认是从国外的,不推荐

#推荐使用国内的,阿里云docker镜像
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.安装docker

注意 : docker-ce 社区版 而ee是企业版。这里我们使用社区版即可。

yum install docker-ce docker-ce-cli containerd.io
6.启动docker
systemctl start docker
7.安装后查看Docker版本
docker version

在这里插入图片描述

8.配置阿里云镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决这个问题。
登录阿里云->搜索 “ 容器镜像服务 ”->获取加速器地址
在这里插入图片描述

通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器

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

注意:阿里云的本人自己账号的镜像地址(需要自己注册有一个属于你自己的):https://xxxx.mirror.aliyuncs.com

9.验证配置是否成功
docker info

在这里插入图片描述

三.Docker内网环境的离线安装

由于在很多情况下需要安装docker的虚拟机或服务器无法访问互联网,因此需要离线安装docker。
下载安装包
访问https://download.docker.com/linux/static/stable/选择合适的版本并下载
在下用的是:https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过MobaXterm工具直接上传到linux目录)
以下操作在拟安装的机器上进行

1、解压缩安装包
tar -zxvf docker-20.10.6.tgz 
2、复制解压缩后的文件到指定文件夹
 cp docker/* /usr/bin/ 
3、注册编辑docker服务
vim /etc/systemd/system/docker.service
4、复制下列内容到该文档中
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
5、添加权限后启动
chmod +x /etc/systemd/system/docker.service
6、重新加载配置文件、和启动Docker
systemctl daemon-reload
#启动Docker
systemctl start docker
8、设置开机自启
systemctl enable docker.service
9、验证是否安装成功
systemctl status docker
docker -v

四.运行第一个容器

我们以 Nginx 为例,体验 Docker 是如何运行容器的

# 下载镜像
docker pull nginx

# 运行容器
docker run --name nginx-container -p 80:80 -d nginx

命令解读:

  • docker run : 创建并运行一个容器
  • –name : 给容器起一个名字, 比如叫做 nginx-container
  • -p : 将宿主机端口与容器端口映射, 冒号左侧是宿主机端口, 右侧是docker容器端口
  • -d : 后台运行容器
  • nginx : 镜像名称 , 例如nginx

浏览器输入虚拟机地址即可访问 Nginx
在这里插入图片描述

五.Docker服务基本操作

启动docker服务
 systemctl start docker
查看Docker状态

查看docker是否启动了,是否是运行状态

systemctl status docker

在这里插入图片描述

设置Docker开机自启
systemctl enable docker
禁用Docker开机自启
systemctl disable docker
重新启动Docker服务
 systemctl restart docker
查看Docker信息
docker info
停止docker服务
systemctl stop docker
加载已有的镜像到Docker中:
docker load < xxx.tar # xxx.tar表示镜像文件
查看Docker内的镜像列表
docker images
查看容器列表
# 格式	
	docker ps [参数]
	docker ps # 查看当前系统中正在运行的容器列表

#参数
	-a : 查看系统中所有的容器。
	-q : 仅显示容器的ID
创建容器
# 格式
	docker run [参数] [镜像名称] [运行容器的启动命令]
# 参数
	-d : 以守护进程的方式运行一个容器
		docker run -d [镜像名称] [cmd]
	--name : 指定容器的名称
		docker run -d --name [容器名称] [镜像的名称] [cmd]
	-p : 指定端口映射
		docker run -d -p 宿主主机端口:容器内端口 [镜像名称] [cmd]
	-P :随机端口映射
		docker run -d -P [镜像名称] [cmd]
	-i : 打开标准输出
	-t : 创建一个伪终端
		docker run -it [镜像名称] [cmd]
	-v : 挂载目录到容器中
		docker run -v 宿主主机目录:容器内目录  [镜像名称] [cmd]
	--rm : 容器生命周期结束时立即删除
		docker run --rm [镜像名称] [cmd]
	-e : 在容器中创建一个环境变量
		docker run -e NAME=Centos -d [镜像名称] [cmd]
	--link : 连接上一个容器,实现网络互通
		docker run --link 被连接的容器的名称:连接别名 [镜像名称] [cmd]
	-h : 设置容器主机名
		docker run -h "主机名"  [镜像名称] [cmd]
# docker run 运行流程
1、检查本地是否用指定镜像,如果没有则去对应的仓库下载镜像
2、启动容器,如果指定了命令则使用指定的命令,如果没有则使用默认的命令
3、返回容器ID
进入容器

容器启动后,需要进入容器做相关的操作,这个时候就需要进入到容器内部。

# 容器ID可以通过查看容器列表获得
docker attach [容器ID] # 个人最常用
docker exec -it [容器ID] /bin/bash # 这种方式也是可以的
删除镜像和容器
  • 删除镜像
docker rmi [镜像ID] # 如果镜像有关联容器,将执行失败
docker rmi -f [镜像ID] # 强制删除镜像,同时删除关联的容器
  • 删除容器
docker rm [容器ID] # 删除容器,如果容器在运行貌似也是删不掉的
docker rm -f [容器ID] # 强制删除
不进入容器情况下在容器内执行命令
docker exec -d [容器名称] /bin/bash -c [需要执行的命令] -g "daemon off;"

示例:

docker exec -d my_container_name /bin/bash -c "nohup java -jar /home/my/xxx.jar > /home/my/log/xxx.log 2>&1 &" -g "daemon off;"

文章推荐:

服务器安装所需:
阿里云服务器申请免费试用图文教程(个人和企业均可申请):
https://blog.csdn.net/SoulNone/article/details/126902213

安装rabbitmq图文详解步骤
https://blog.csdn.net/SoulNone/article/details/126902764
在这里插入图片描述

各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。

免责声明:本文章仅用于学习参考

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐