Docker
Docker
简介
产生背景
项目的开发环境和部署环境不一致,部署环境配置难度大。集群技术的发展,集群的相同配置操作难度大。
基本理念
使用Go语言实现的云开源项目,"一次编译,处处运行",只需要一次配置环境,就可以在其他环境一键部署,软件即容器,虚拟化。
虚拟化技术
虚拟机:一种带环境安装的解决方案,模拟整套操作系统,笨重。
容器:将所有运行环境打包成互相隔离的容器,不进行硬件虚拟。
开发/运维(DevOps)
开发自运维、一次开发,处处运维。
官方资料
环境安装
系统要求
1. CentOS 7(64位)
2. CentOS6.5(64位)及以上
3. 系统内核版本为2.6.32-431以上
基本结构
- 镜像(image):只读模板,一个镜像可以创建多个容器。
- 容器(container):运行一个或多个应用,简易版Linux。
- 仓库(repository):集中存放镜像,私有库、公有库。
安装方法
CentOS 6.8 安装
yum install -y epel-release
yum install -y docker-io
vi /etc/sysconfig/docker
service docker start
验证安装
CentOS 7 安装
1. yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
2. yum-config-manager --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3. yum-config-manager --enable docker-ce-edge
4. yum-config-manager --enable docker-ce-test
5. yum-config-manager --disable docker-ce-edge
6. yum install docker-ce
#安装特定版本
7. yum list docker-ce --showduplicates | sort -r
yum install docker-ce-<VERSION STRING>
8. systemctl start docker #开启
#测试 会自动跑一个hello 容器
docker run hello-world
#####以上是官方给出的方法################################
############实际我第一次安装只用到了下面的命令#############
#下载一个repo 到repo的文件夹中
wget https://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
#使用yum 命令安装docker-ce 也就是docker 社区版
yum install docker-ce -y
Hello World
阿里镜像仓库
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://l608quqb.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#开机自动启动
sudo systemctl enable docker
运行Hello World:docker run hello-world
运行原理
C/S结构,应用程序及其环境运行在容器中,比虚拟机有更少的抽象层,利用宿主内核,不虚拟硬件,不虚拟新的容器运行环境,利用宿主启动速度快。
常用命令
帮助命令
docker version
docker info
docker help
镜像命令
docker imgages [-a][-q]
docker search [-s]
docker pull
docker rmi -f [name:version][ID]
docker rmi -f $(docker -q) 删去全部
容器命令
#启动方式
docker run -i -t centos 进入了CentOS
-d:以后台运行容器,返回容器ID,守护式容器
-i:以交互模式运行容器
-t:为容器重新分配终端
-P:随机端口映射
-p:指定端口映射
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
#查看容器使用历史
docker ps
-a:运行中+历史
-l:最近创建
-n:最近n个
-q:静默模式
--no-trunc:不截断输出
宿主bash:exit:退出并关闭
ctrl+p+q:返回主机
#返回容器
docker attach [id] 返回容器
#停止容器
docker restart/stop [name][id]
docker kill [name][id]
#删除容器
docker rm -f $(docker -a -q) 删除容器
dockeer -a -q |xargs docker rm -f 批量删除容器
docker log
docker top [id]
docker inspect [id]
docker cp [id]
####################
docker run -itd [id]:uri uri
镜像
联合文件系统(UnionFS)
一种分层、轻量级并且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层低价,可以将不同目录挂在到同一个虚拟文件系统下。
镜像加载原理
bootfs(boot file system):包含Bootloader和Kernel,镜像最底层为bootfs,加载完成后,内核导入内存,内存使用权转交给内核,卸载bootfs。
rootfs(root file system):包含/dev、/bin、/et等标准目录和文件。
容器数据卷
将容器中的数据卷映射宿主系统中,将容器中的重要数据进行保存,容器之间可以共享数据,防止数据丢失,数据持久化
特点:
- 数据卷可以在容器之间共享重用数据
- 所有数据卷的更改将直接生效
- 数据卷数据修改不会包含到镜像更新
- 数据卷生命周期持续到没有容器使用为止
#复制文件命令
docker cp 容器ID:容器内路径 宿主主机路径
#使用方法
#1.使用命令 -v
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro /宿主机绝对路径目录:/容器内目录:rw 镜像名
#报错时添加 --privileged = true
#目录不存时创建
#2.数据卷容器
#创建DockerFile容器卷
FROM
VOLUME["/dataVolumn1","/dataVolumn2",] //数据卷
CMD echo "Run Success"
CMD /bin/bash
docker build -f DockerFild的路径 -t 命名[作者/名称] .
#根据DockerFile创建镜像
docker images
#查看镜像
#提供一个专门用于挂载数据卷的容器,即数据卷用法,挂载时只需要挂载到对应容器即可
docker run -it --name datacontainer 镜像名
docker run -it --name container --volumes-from datacontainer 镜像名
DockerFile
FROM
VOLUME["/dataVolumn1","/dataVolumn2",] //数据卷
CMD echo "Run Success"
CMD /bin/bash
docker build -f DockerFild的路径 -t 命名[作者/名称] .
#根据DockerFile创建镜像
docker images
#查看镜像
docker run -it --name container --volumes-from datacontainer 镜像名
#继续运行其他容器时即可直接挂载容器卷
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库