1.Docker是什么?
Docker 是一个开源的容器化平台,主要用于开发、运输和运行应用程序。它通过提供轻量级的虚拟化机制,使得开发者可以在一个隔离的环境中运行和管理应用程序及其依赖项。Docker 的核心组件包括镜像(Image)、容器(Container)、Docker 引擎(Docker Engine)和 Docker Hub。
以下是 Docker 的主要概念和功能:
- 镜像(Image):
- 镜像是一个轻量、独立、可执行的软件包,包含了运行某个应用程序所需的所有代码、运行时、库、环境变量和配置文件。可以将镜像看作是一个应用程序的模板。
- 容器(Container):
- 容器是镜像的运行实例。每个容器都是一个隔离的进程,可以在任何支持 Docker 的操作系统上运行。容器之间相互隔离,并且可以独立于主机操作系统进行部署和管理。
- Docker 引擎(Docker Engine):
- Docker 引擎是一个轻量级的运行时和工具集,用于创建、管理和运行容器。它包括一个服务端守护进程(Docker Daemon)、一个 REST API 接口和一个命令行界面(CLI)。
- Docker Hub:
- Docker Hub 是一个云端的镜像仓库,允许用户存储、共享和管理 Docker 镜像。用户可以从 Docker Hub 拉取公共镜像,也可以推送自己的镜像到 Docker Hub。
Docker 的优势
- 轻量级:
- 与传统的虚拟机相比,Docker 容器共享操作系统内核,不需要额外的操作系统开销,因此启动速度快,资源消耗少。
- 一致性和可移植性:
- Docker 镜像包含了应用程序及其所有依赖项,可以在任何运行 Docker 的环境中一致地运行,从而消除了"在我机器上可以运行"的问题。
- 敏捷性和效率:
- 开发者可以快速构建、测试和部署应用程序,通过 Docker 容器可以轻松地在不同环境之间迁移和扩展应用。
- 隔离性:
- 每个容器在一个隔离的环境中运行,确保应用程序之间不会互相干扰,并且可以更容易地管理应用程序的依赖关系。
Docker 使用场景
- 持续集成和持续部署(CI/CD):
- Docker 使得开发和运维团队可以在整个应用生命周期中保持一致的环境,从而加快软件交付周期。
- 微服务架构:
- Docker 非常适合部署和管理微服务,每个微服务可以在一个独立的容器中运行,便于扩展和维护。
- 云计算和多云环境:
- Docker 容器可以轻松地在各种云环境中迁移和运行,支持混合云和多云策略。
总的来说,Docker 通过容器化技术,简化了应用程序的开发、部署和运行过程,提供了一种高效、灵活和可靠的解决方案。
2.个人简单理解
docker就一个Liunx虚拟机,属于阉割版的系统,这个系统只会出现对应应用程序所需要的所有代码、运行时、库、环境变量和配置文件,好处就是体积小,性能好
3.那我们为什么需要使用docker呢?
因为我们平时不管是开发,还是测试,运维部署环境,都需要一步一步的安装程序所需要的依赖包和相关插件,如此反复工作效率非常地下,如果我们学会了使用docker,那就可以直接简单一点可以实现几行命令,即可一键部署环境。
4.什么是镜像和容器
镜像:Docker将应用程序及其所需要的以来,函数库,环境,配置文件打包在一起,称为镜像
容器:镜像中的应用程序运行后形成的进程就是容器,只是dockers会给容器做隔离,对外不可见
5.Docker架构
dockers是一个cs架构的程序,由两部分组成
服务端:docker守护进程,复制处理docker指令,管理镜像,容器
客户端:通道命令或RestAPI向服务端发送指令,可以在本地或远程服务器发送指令。
6.安装Docker
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。
6.1卸载(可选)
如果之前安装过旧版本的docker,可以使用命令卸载
python
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine # 卸载老版本Docker
/etc/systemd -name '*docker*' -exec rm -f {} ; #清除配置文件和依赖文件
find /etc/systemd -name '*docker*' -exec rm -f {} \;
find /lib/systemd -name '*docker*' -exec rm -f {} \;
6.2安装docker
.在下载docker之前, 最好安装yumutils,并配置yumutils的yum-config-manager来设置稳定版的仓库/源, 方便之后的更新
bash
yum install -y yum-utils # 安装
然后更新本地镜像源(根据实际情况使用)
bash
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 配置
然后输入命令:
bash
yum install docker-ce
docker-ce为社区免费版
6.3启动docker
docker应用需要用到各种端口,逐一修改i防火墙设备,非常麻烦因此建议
启动docker前一定要关闭防火墙!
启动docker前一定要关闭防火墙!
启动docker前一定要关闭防火墙!
bash
#关闭
systemctl stop firewalld
#禁止开机启动防火墙
systemctl disable firewall
通过命令启动docker:
bash
systemctl start docker #启动docker服务
systemctl stop docker #停止docker服务
systemctl restart docker #重启docker服务
然后输入命令,可以查看docker版本
bash
docker -v
6.4配置镜像
docker官方镜像仓库网速较差,我们需要设置国内镜像,我们可以参考一下菜鸟教程的配置方法
7.Docker基本操作
7.1镜像相关命令
-
镜像名称一般分两个部分组成:[repository]:[tag]
-
在没有指定tag,默认是lastest.代表最新版本的镜像
7.2镜像操作命令
7.3举例我们安装一个Nginx环境
7.3.1docker hub镜像网站拉取镜像
首先去镜像仓库搜索nginx 镜像,比如docker hub
官方镜像地址:https://hub.docker.com/
7.3.2拉取镜像
bash
# 1.获取镜像(默认为最新版本)
docker pull nginx
# 2.获取镜像(指定版本)
docker pull nginx:1.24.0
7.3.4查看镜像
bash
# 2.查看本地镜像
docker images
# REPOSITORY :镜像名称
# TAG :镜像标签(版本)
# IMAGE ID :镜像ID
# CREATED :创建时间
# SIZE : 镜像大小
7.3.5镜像导出磁盘
bash
#镜像导出
# -o 指定镜像文件名称
# nginx:latest 为镜像名称和TAG
docker save -o nginx.tar nginx:latest
bash
#如果需要导入镜像,首先需要把原有的镜像进行删除处理,才能进行镜像导入
docker rmi nginx:lastest
#查看镜像
docker images
# 查看docker load 使用
docker load --help
# -i 是指需要读取的镜像文件
docker load -i nginx.tar
8.操作容器
8.1创建Nginx容器
bash
# docker run :创建并运行一个容器
# --name :给容器起一个名字,比如叫mn
# -p:将宿主端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
# -d:后台运行容器
# nginx :镜像名称,例如nginx
docker run --name some-nginx -p 8080:80 -d nginx
8.2 容器操作
bash
#查看容器是否运行,不支持查看未允许的容器
docker ps
#返回结果
# contaidner id 唯一id
#image 镜像名称
# command 容器内容运行的命令
# created 创建时间
# status 运行状态
#ports 端口
# names 名称
### 查看容器允许日志
```bash
#查看容器运行日志
docker logs mn
#查看容器运行日志
# -f 持续输出日志信息
docker logs -f mn
#停止容器操作
docer stop mn
#再次启动容器
docker start mn
# 查看所有容器(包含已经停止的容器)
docker ps -a
# 强制删除容器,包含在允许的容器
# -f 强制删除
docker rm -f mn
8.3 进入Nginx容器
进入容器,修改HTML文件内容,添加"你好"
bash
进入容器,进入我们刚刚创建的nginx容器命令为:
docker exec -it mn bash
docker exec :进入容器内容,执行一个命令
-it:给当前进入的容器创建一个标准输入,输出终端,允许我们与容器交互
mn :要进入的容器的名字
bash :进入的容器后执行的命令,bash是一个liunx终端交互命令
9. 数据卷
bash
当Docker容器运行的时候,会产生一系列的数据文件,这些数据文件会在关闭Docker容器时,直接消失的。但是其中产生部分的数据内容,
我们是希望能够把它给保存起来,另作它用的。关闭Docker容器=删除内部除了image底层数据的其他全部内容,即删库跑路
#1.不便于修改
当我们要修改Nginx的html内容时,需要进入容器内部修改,很不方便
#2.数据不可复用
在容器内的修改对外是不可见的,所有修改对新创建的容器是不可复用的
#3.升级维护困难
数据在容器内,如果要升级容器必然删除旧容器,所有数据都跟着删除了
数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录
bash
数据卷操作的基本语法如下:
docker volume [COMMAND]
docker vloime 命令是数据卷操作,根据命令后跟随的command 来确定下一步的操作
create 创建一个volume
imspect 显示一个或多个volume的信息
ls 列出所有的volume
prune 删除未使用volume
rm 删除一个或多个指定的volume
创建一个数据卷,并查看数据卷在宿主机的目录位置
#查看帮助文档
docker volume --help
#创建数据卷
docker volume create html
#查看数据卷
docker volume ls
#数据卷存放在那个位置
docker volume inspect html
#Mountpotint 存放位置
#删除未使用的指定数据卷
docker volume prune
#删除指定数据卷
docker volume rm html
9.1 数据卷挂载
我们以Nginx镜像举例使用,挂载完成数据卷,我们就不需要进入容器内修改数据
bash
#然后挂载数据卷 -v 数据卷:docker容器的目录文件 如果数据卷不存在,会自定创建数据卷
docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx
#查看数据卷
docker inspect html
#进入数据卷
cd /var/lib/docekr/volumes/html/_data
# 修改HTML文件
vi index.html
9.2 目录挂载到容器上
我们以Mysql数据库镜像举例使用,我们可以把配置文件直接挂载到容器上,便于管理配置文件
bash
#查看镜像文件
docker images
#创建文件
mkdr -p mysql/data
mkdr -p mysql/conf
# 换行符 \
#允许mysql
docker run \
-- name mysql
-e MYSQL_ROOT_PASSWORD=123 \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25
我们可以通过两种方式实现数据的持久化,避免了容器停止或者删除升级导致的数据丢失问题
以上的内容为学习笔记,只能为大家提供一个简单Docker入门学习,大佬勿喷,有误请指正!!!