Docker是什么?
如何通俗解释Docker是什么? - 知乎Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各…https://www.zhihu.com/question/28300645Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。
1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。
沙箱机制_一个努力的菜鸟的博客-CSDN博客_沙箱机制1.为什么需要沙箱机制?默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:(1) 为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制(2) 为程序提供一个受限的运行环境:这就是沙箱机制2.什么是沙箱机...https://blog.csdn.net/weixin_41490593/article/details/994123152.你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。
总之docker就是集装箱原理。
Docker与虚拟机的区别?
- Docker是一个系统进程;虚拟机是在操作系统上的操作系统
- Docker体积小,启动速度快、性能好;虚拟机体积大。启动速度慢、性能一般
Docker镜像和容器
镜像与容器类似于Java中的类与对象的关系。
Docker执行流程图
Docker结构组成
- 服务端:接收命令或远程请求,操作镜像或容器
- 客户端:发送命令或者请求到Docker服务端
DockerHub(镜像托管服务器)
- 一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry(Docker镜像注册中心)
安装Docker
Linux系统要求CentOS 7.0以上
Install Docker Engine on CentOS | Docker DocumentationInstructions for installing Docker Engine on CentOShttps://docs.docker.com/engine/install/centos/1. 卸载老版本Docker(可选)
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 需要虚拟机联网,安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
3. 修改本地镜像源
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
4. 安装Docker
yum install -y docker-ce
# docker-ce为社区免费版本
# -y 表示安装过程中的询问,自动选择y,全自动
5. 关闭防火墙
如何关闭防火墙:
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
云服务器直接放行所有端口即可,如何放行如下链接
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决。
参考阿里云的镜像加速文档:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
sudo mkdir -p /etc/docker # 在etc文件夹下创建docker文件夹
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://arpg5zxj.mirror.aliyuncs.com"]
}
EOF # 在docker文件夹下创建daemon.json文件,并写入阿里镜像
sudo systemctl daemon-reload # 重新加载该文件
sudo systemctl restart docker # 重启docker服务
镜像操作指令
拉取镜像:docker pull )> docker pull nginx
查看镜像:docker images
删除镜像:docker rmi )> docker rmi nginx:latest
保存镜像为压缩版:docker sava )> docker save -o nginx.tar nginx:latest
加载压缩包为镜像:docker load )> docker load -i nginx.tar
查看镜像帮助文档:docker [镜像名] --help
查看镜像具体信息(版本号等):docker image inspect 镜像名
.....
如下图:
镜像服务器
Docker Hubhttps://registry.hub.docker.com/
拉取示例
1. 首先去镜像仓库搜索xxx镜像,如:DockerHub上搜索nginx镜像
2. 根据搜索拉取相关镜像,通过命令:docker pull xxx:[tag]。如:docker pull nginx:1.20.2,不写版本号默认为最新版
3. 通过命令:docker images ,查看拉取到的镜像
容器操作命令
创建容器并运行一个容器:docker run
简单示例:docker run --name my-nginx1 -p 80:80 -v html:/usr/share/nginx/html -d nginx
PS:-p表示服务器端口与容器端口映射,服务器端口可以随便写,只要没被占用
-d表示后台运行容器
-v表示挂载数据卷到容器上
示例:-v html:/usr/share/nginx/html 把html数据卷挂载到容器内的/root/html这个目录中
查看所有运行的容器及状态:docker ps
PS:默认只展示正在运行的容器,-a表示展示所有容器
查看容器运行日志:docker logs [容器名]
简单示例:docker logs my-nginx1 -f
PS:-f表示跟踪日志
进入容器执行命令:docker exec -it 容器名 要执行的命令(不推荐)
简单示例:docker exec -it my-nginx1 bash
PS:虽然exec可以让我们进入容器修改文件,但是在容器内修改文件是不推荐的
暂停容器:docker pause 容器名
取消暂停:docker unpause 容器名
停止容器运行:docker stop 容器名
重新开启容器:docker start 容器名
删除指定容器:docker rm 指定容器名
PS:不能删除正在运行的容器,添加 -f 强制删除正在运行的容器
访问容器
访问容器方式:服务器地址 + 端口号
示例(Nginx↑):http://docker服务器:80
数据卷(解决容器内文件不方便修改)
数据卷解决了哪些问题
数据卷的作用
数据卷 (volume)是一个虚拟目录,指向宿主机文件系统的某个目录。
宿主机文件——>数据卷<——容器文件
间接实现了宿主机文件与容器文件的双向绑定。
数据卷操作命令
docker volume [commend]
创建数据卷:docker volume create 数据卷名
查看所有数据卷:docker volume ls
查看指定数据卷详情:docker volume inspect 数据卷名
删除指定数据卷:docker volume rm 数据卷名
删除所有未使用的数据卷:docker volume prune
挂载数据卷到容器
方式一:创建容器时挂载数据卷
docker run --name my-nginx1 -d -v html:/usr/share/nginx/html -p 80:80 nginx
创建容器
--name 容器名称
-d(后台运行)
-v 宿主机数据卷:容器内文件夹
-p 宿主机暴露端口:容器端口
镜像名
PS:挂载数据卷时,如果数据卷不存在,Docker会自动创建出数据卷
方式二:将宿主机目录直接挂载到容器当中
docker run \ # 创建容器
--name my-mysql1 \ # 容器名称
-e MYSQL_ROOT_PASSWORD=0722 \ # 设置mysql_root密码
-d \ # 后台运行
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ # 宿主机文件挂载到容器文件
-v /tmp/mysql/data:/var/lib/mysql # 宿主机目录挂载到容器目录
-p 3306:3306 \ # 宿主机暴露端口
mysql:5.7.25 # 镜像名