1、docker解决了什么的问题?
Docker是属于运维和持续集成的管理工具,特别是在运维方面使用Docker可以让你省去很多重复的工作,可以让你的应用程序永远都是在相同的环境中运行。
统一标准
● 应用构建
○ Java、C++、JavaScript
○ 打成软件包
○ .exe
○ docker build … 镜像
● 应用分享
○ 所有软件的镜像放到一个指定地方 docker hub
○ 安卓,应用市场
● 应用运行
○ 统一标准的 镜像
○ docker run
资源隔离
● cpu、memory资源隔离与限制
● 访问设备隔离与限制
● 网络隔离与限制
● 用户、用户组隔离限制
例如以下应用场景:
1)测试:Docker很适合用于测试发布,将Docker封装后可以直接提供给测试人员进行运行,不再需要测试人员与运维、开发进行配合,进行环境搭建与部署。
2)测试数据分离:在测试中,经常由于测试场景变换,需要修改依赖的数据库数据或者清空变动memcache、Redis中的缓存数据。Docker相较于传统的虚拟机,更轻量与方便。可以很容易的将这些数据分离到不同的镜像中,根据不同需要随时进行切换。
3)开发:开发人员共同使用同一个Docker镜像,同时修改的源代码都被挂载到本地磁盘。不再因为环境的不同而造成的不同程序行为而伤透脑筋,同时新人到岗时也能迅速建立开发、编译环境。
4)PaaS云服务:Docker可以支持命令行封装与编程,通过自动加载与服务自发现,可以很方便的将封装于Docker镜像中的服务扩展成云服务。类似像Doc转换预览这样的服务封装于镜像中,根据业务请求的情况随时增加和减少容器的运行数量,随需应变。
2、Docker架构
● Docker_Host:
○ 安装Docker的主机
● Docker Daemon:
○ 运行在Docker主机上的Docker后台进程
● Client:
○ 操作Docker主机的客户端(命令行、UI等)
● Registry:
○ 镜像仓库
○ Docker Hub
● Images:
○ 镜像,带环境打包好的程序,可以直接启动运行
● Containers:
○ 容器,由镜像启动起来正在运行中的程序
**
3、安装和启动
**
sudo yum install -y docker-ce docker-ce-cli containerd.io
#以下是在安装k8s的时候使用
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
systemctl enable docker --now
**
4、卸载
**
systemctl stop docker
yum -y remov docker-ce
rm -rf /var/lib/docker
**
5、Docker实战
**
找镜像:
docker pull nginx #下载最新版
镜像名:版本名(标签)
docker pull nginx:1.20.1
docker pull redis #下载最新
docker pull redis:6.2.4
## 下载来的镜像都在本地
docker images #查看所有镜像
redis = redis:latest
docker rmi 镜像名:版本号/镜像id
启动容器:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
【docker run 设置项 镜像名 】 镜像启动运行的命令(镜像里面默认有的,一般不会写)
# -d:后台运行
# --restart=always: 开机自启
docker run --name=mynginx -d --restart=always -p 88:80 nginx
# 查看正在运行的容器
docker ps
# 查看所有
docker ps -a
# 删除停止的容器
docker rm 容器id/名字
docker rm -f mynginx #强制删除正在运行中的
#停止容器
docker stop 容器id/名字
#再次启动
docker start 容器id/名字
#应用开机自启
docker update 容器id/名字 --restart=always
进容器内部修改:
# 进入容器内部的系统,修改容器内容
docker exec -it 容器id /bin/bash
挂在这里插入代码片
载数据到外部修改
docker run --name=mynginx \
-d --restart=always \
-p 88:80 -v /data/html:/usr/share/nginx/html:ro \
nginx
# 修改页面只需要去 主机的 /data/html