Docker容器技术
随着云计算和微服务架构的普及,容器技术成为了软件开发、测试和部署过程中的重要组成部分。其中,Docker作为容器技术的代表之一,以其简便易用的特点赢得了广大开发者的青睐。
Docker允许开发者在轻量级、可移植的容器中打包和运行应用程序及其依赖项。Docker 通过容器化提供了一种标准化的方式来构建、部署和运行应用程序,使得应用程序可以在任何地方以一致的方式运行。
什么是Docker?
Docker是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖项打包进一个可移植的容器中,从而可以在任何安装了Docker的Linux或Windows机器上运行。Docker容器就像是一个轻量级的虚拟机,但它并不包含操作系统;相反,它依赖于主机操作系统的内核功能,如命名空间(Namespace)和控制组(Control Group,简称Cgroup),以实现资源隔离和环境的一致性。
或者说,docker是管理容器的引擎,类似VMworkstation,为应用提供打包,部署的平台。
Docker 的核心概念
1. 容器
- 容器 是一个轻量级、可移植的封装单元,包含了运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。
- 容器与宿主机操作系统共享内核,因此容器相比于虚拟机更加轻量级,启动速度快。
2. 镜像
- 镜像 是容器的只读模板,定义了容器的运行环境。
- 镜像是通过 Dockerfile 构建的,Dockerfile 是一个文本文件,包含了创建镜像所需的所有指令。
- Docker Hub 是一个公共的镜像仓库,用户可以从中下载和上传镜像。
3. Dockerfile
- Dockerfile 是一个文本文件,包含了构建 Docker 镹像所需的一系列指令。
- 常见的指令包括
FROM
(指定基础镜像)、RUN
(运行命令)、CMD
(默认启动命令)、EXPOSE
(暴露端口)等。
4. Docker Compose
- Docker Compose 是一种工具,用于定义和运行多容器 Docker 应用。
- 通过一个 YAML 文件来配置应用的服务、网络和卷,简化了多容器应用的部署和管理。
Docker 的优势
1. 轻量级
- Docker 容器与宿主机共享内核,占用资源少,启动速度快。
2. 一致性
- 应用程序在不同环境(开发、测试、生产)中运行时保持一致,因为容器环境是完全定义好的。
3. 隔离性
- 每个容器都有自己独立的文件系统、网络空间等,彼此之间互不干扰,提高了安全性。
4. 可移植性
- Docker 容器可以在任何安装了 Docker 引擎的系统上运行,包括不同操作系统和硬件平台。
5. 可复用性
- Docker 镜像可以被多次使用,简化了环境配置过程。
6. 版本控制
- Docker 镜像支持版本控制,可以方便地回滚到之前的版本。
docker在企业中的应用场景
Docker 的安装
SaaS-软件即服务
SaaS是软件即服务。英文全称是Software as a Server。概念:即云端已经将操作系统到运行环境到软件的客户端都已经搭建好了,使用方不需要安装任何环境或软件,只需要访问客户端就能直接使用、
举例:类似于在我的毕业生管理系统上,我先自己利用云端搭建好平台,然后如果有学校想要使用的话直接分配给他们一些账号和密码,他们就可以直接访问我搭建好的系统进行操作了。
PaaS-平台即服务
PaaS是平台即服务,英文全称是Platform as a Server。概念:利用云端搭建好操作系统或软件层面的如数据库、中间件等供用户使用,使得用户无需关注底层的基础设施和运行环境,只需要利用这些环境运行自己的应用和数据。
举例:就好比学校要使用我的就业管理系统进行管理,但是不想自己搭建机房和环境,所以就直接本地用少量的机器搭建客户端,将数据库、中间件或部分接口放在云端,请求时直接请求云端的接口和数据。
在企业中docker作为业务的最小载体而被广泛应用
通过docker企业可以更高效率的部署应用并且更具节省资源
docker与虚拟化的对比
如图所示,在虚拟化之中,每个虚拟机都需要一个独立的操作系统,这将会占用巨量的系统资源,并且降低运行密度。操作系统的重启以及部署也需要占用相当的时间。而docker容器在这方面就更具有优势。
部署docker
容器工作方法
1. Linux 系统上的安装
- 添加 Docker 仓库:
]# cd /etc/yum.repos.d
]# vim docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/dockerce/linux/centos/7/x86_64/stable/
gpgcheck=0
[centos]
name=extras
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64
gpgcheck=0
- 安装 Docker-ce并启动服务:
#安装docker
]# yum install -y docker-ce
#编辑docker启动文件,设定其使用iptables的网络设定方式,默认使用nftables
[root@docker ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
--iptables=true
]# systemctl enable --now docker
]# docker info
- 激活内核网络选项:
在rhel7中,需要配置内核网络
]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
]# sysctl --system
]# systemctl restart docker
2. Windows 和 macOS 系统上的安装
- 安装 Docker Desktop:
- 访问 Docker 官方网站下载 Docker Desktop:https://www.docker.com/products/docker-desktop
- 按照安装向导完成安装。
Docker 的基本操作
1. 镜像管理
-
搜索镜像:
docker search ubuntu
参数
NAME 镜像名称
DESCRIPTION 镜像说明
STARS 点赞数量
OFFICIAL 是否是官方的 -
拉取镜像:
docker pull ubuntu
-
列出本地镜像:
docker images
-
删除镜像:
docker rmi ubuntu
-
导出镜像
docker image save nginx:latest -o nginx-latest.tar.gz docker image save nginx:latest nginx:1.26-alpine -o nginx.tag.gz
2. 容器管理
-
启动容器:
docker run -it ubuntu bash
-d
#后台运行
-i
#交互式运行
-t
#打开一个终端
--name
#指定容器名称
-p
#端口映射 -p 80:8080 把容器8080端口映射到本机80端口
--rm
#容器停止自动删除容器
--network
#指定容器使用的网络 -
列出正在运行的容器:
docker ps docker ps -a docker inspect busybox
分别是查看当前容器,查看所有容器,查看目标容器运行的详细信息
-
停止容器:
docker stop container_id_or_name
-
删除容器:
docker rm container_id_or_name
-
重新进入容器
docker attach centos7
-
在容器中执行命令
docker exec -it 【test】 ifconfig
【test】是docker容器的名字
3. 网络管理
-
创建自定义网络:
docker network create my_network
-
连接容器到网络:
docker run -it --name my_container --network my_network ubuntu bash
4. 卷管理
-
创建卷:
docker volume create my_volume
-
挂载卷到容器:
docker run -it -v my_volume:/mnt/data ubuntu bash