Docker——简单部署及基础操作
文章目录
什么是Docker?
- 是一种轻量级的“虚拟机”
- 在linux容器里运行应用的开源工具
官网:www.docker.com
官方文档网站:www.docs.docker.com
一、docker概述
1、Docker概念
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
- 镜像
- 容器
- 仓库
2、Docker设计的目标
- 提供简单的应用程序打包工具
- 开发人员和运维人员逻辑分离
- 多环境保持一致性
3、docker的应用场景
-
打包应用程序简化部署
-
可脱离底层硬件任意迁移
-
应用程序打包和发布
-
应用程序隔离
-
持续集成
-
部署微服务
-
快速搭建测试环境
-
提供PaaS产品(平台即服务)
4、Docker的组成
- Docker Client:客户端
- Docker Daemon:守护进程
- Docker Images:镜像
- Docker Container:容器
- Docker Registry:镜像仓库
客户端,客户操作的界面环境——会与守护进程daemon对接——下达指令创建镜像,可以直接执行,也可以从仓库中直接拉取到本地然后下载(防火墙原因,所以下载需要用第三方加速器,如阿里云加速器)
不同的镜像制作不同的容器,会提供一个端口,通过端口可以访问应用容器
彼此应用间是隔离的,也就是解耦
具备弹性伸缩
5、docker与虚拟机的区别
vm→物理环境→宿主系统(linux)→虚拟化监控平台(加载虚拟化资源:硬盘 网卡 内存)→安装系统(完整的主机)
容器→物理环境→宿主系统(linux)→docker引擎(进程的管理机制)
docker 与宿主系统共享内核资源,如果某个容器资源悲情如,很容易影响到宿主系统,则会影响到其他的应用
面试中的注意点:
VM | Container容器 | |
---|---|---|
启动速度 | 分钟级 | 秒级 |
运行性能 | 5%左右损失 | 接近原生 |
磁盘占用 | GB | MB |
数量 | 一般几十台 | 成百上千 |
隔离性 | 系统级(更彻底) | 进程级别 |
操作系统 | 几乎所有 | 主要支持linux |
封装程度 | 完整的操作系统 | 只打包项目代码和依赖关系,共享宿主机内核 |
6、支持平台
- Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
- Mac
- Windows
CentOS安装Docker的两种方式
- 使用curl 获得Docker的安装脚本进行安装
- 使用yum仓库来安装Docker
二、部署19版Docker
1、环境部署
#关闭防火墙及核心防护
[aaa@qq.com ~]# systemctl stop firewalld.service
[aaa@qq.com ~]# systemctl disable firewalld.service
[aaa@qq.com ~]# setenforce 0
[aaa@qq.com ~]# sed -i '7s/enforcing/disabled/' /etc/selinux/config
#安装依赖包
[aaa@qq.com ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
2、设置阿里云镜像源
[aaa@qq.com yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装Docker-CE
[aaa@qq.com ~]# yum install -y docker-ce
[aaa@qq.com ~]# systemctl starat docker.service
[aaa@qq.com ~]# systemctl enable docker.service
这时docker就已经启动了,但是里面是全空的。可以查到docker命令的位置,在/usr/bin中可以被系统所识别
4、镜像加速
到目前为止,只是将docker引擎开起来了
下载镜像资源是从官方公有的仓库,下载会很慢,会卡死,所以需要使用镜像加速
[aaa@qq.com docker]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://7rp8a2t8.mirror.aliyuncs.com"]
}
EOF
[aaa@qq.com docker]# systemctl daemon-reload
[aaa@qq.com docker]# systemctl restart docker.service
这时下载镜像就会很快,不会卡死
5、网络优化
在下载镜像资源时会出现克重报错,很大可能就是没开启数据包转发功能
[aaa@qq.com ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[aaa@qq.com ~]# sysctl -p //生效
#重启网卡及docker
[aaa@qq.com ~]# service network restart
[aaa@qq.com ~]# systemctl restart docker.service
目前为止docker引擎及环境全部部署好了
三、镜像的操作管理
docker version //查看版本
docker search //搜索镜像
docker pull //下载镜像
docker images //查看已有镜像***
docker inspect 231d //获取镜像信息docker tag //添加新标签,相当于定义了一个别名
docker rmi //删除镜像:rmi i相当于image
docker save -o 文件名 镜像
docker save -o nginx nginx:latest //存出镜像命名为nginx存在当前目录下docker load < nginx //镜像导入,建议使用load(docker --input nginx)
#查看版本信息:docker version
#需要安装nginx应用,首先要搜索并下载nginx镜像
语法:docker search 名称 //搜索镜像
[aaa@qq.com ~]# docker search nginx //搜索关于nginx的所有镜像,遍历公有仓库中所有nginx镜像
#语法:docker pull 名称 //下载镜像
[aaa@qq.com ~]# docker pull nginx //下载nginx镜像
#语法:docker images //查看已有镜像
#语法:docker inspect 镜像ID //获取镜像信息
[aaa@qq.com ~]# docker inspect ed21b7a8aee9
#语法:docker tag 原本标签 更改后标签 //添加新标签,相当于定义了一个别名
[aaa@qq.com ~]# docker tag nginx:latest nginx:web //新定义了一个web标签
#语法:docker rmi 镜像名 //删除镜像:rmi i相当于image
也可使用:docker rmi 镜像ID
当前镜像如果有多条标签别名,按名称标签删除只是删除该条标签的镜像
如果只有最后一条镜像,按名称删除后则彻底删除了
[aaa@qq.com ~]# docker rmi nginx:latest
#语法:docker save -o 定义文件名 镜像 //导出镜像并保存
[aaa@qq.com abc]# docker save -o nginx nginx:latest //导出镜像命名为nginx保存在当前目录下
#镜像导入(不需要使用仓库,之前已经保存在/abc中,现在可以直接执行导入),建议使用方法一
方法一:语法:docker load < 镜像名
方法二:语法:docker --input 镜像名
[aaa@qq.com abc]# docker load < nginx
四、容器的操作管理
1、查看容器运行状态
语法: docker ps [选项]
-a 列出最近一次启动的容器
[aaa@qq.com ~]# docker ps -a //查看容器状态
此时并没有容器
2、创建容器
语法:docker create [选项] 镜像运行的程序
- -i 让容器的标准输入保持打开
- -t 让docker分配一个伪终端
[aaa@qq.com ~]# docker create -it nginx:latest /bin/bash
#现在在看一下,已经有容器了
3、启动容器
语法:docker start 容器ID
4、run一次性执行
容器运行三部曲:下载镜像——创建容器——启动容器
比如下载一个centos7的容器
原本步骤应该是:
docker pull centos:7
docker create -it centos:7 /bin/bash
docker start 容器id
现在使用docker run 命令,一次性执行,执行完成直接关闭,状态是exited,不会持续占用系统资源
[aaa@qq.com ~]# docker run centos:7 /usr/bin/bash -c ls
-c 启动完成后会去执行ls
使用run命令:run会自动去找本地中有没有需要的镜像,如果有,则不会再去下载,会直接执行下面的创建启动等操作,如果没有,则会去仓库中下载镜像,然后继续执行后面的操作
5、run持续后台执行
使用dockrt run执行完成后是直接退出的,如果加上一个while死循环,则可以保持执行完成后不退出,继续保持进程
[aaa@qq.com ~]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
6、终止运行
语法:docker stop 容器ID
[aaa@qq.com ~]# docker stop dd034572ae67
7、进入容器
进入有两种方式
run:可以在容器未开启,直接使用run进入
[aaa@qq.com ~]# docker run -it nginx:latest /bin/bash
exec:只有在容器up开启状态才能进入
[aaa@qq.com ~]# docker exec -it f169ab57906f /bin/bash
8、退出容器
exit就可以直接退出
9、容器导出
语法:docker export 容器ID > 自定义名称
[aaa@qq.com ~]# docker export f169ab57906f > nginx_ml
10、容器导入
会生成镜像,而不会创建容器
语法:cat 容器名称 | docker import - 定义镜像名称
[aaa@qq.com ~]# cat nginx_ml | docker import - nginx:web
11、删除容器
语法:docker rm 容器ID
12、批量删除容器
容器在up开启状态是无法删除的
如果想要批量删除,仅保留up状态的容器,其余全部删除,就可以使用批量删除,提高效率
docker ps -a | awk ‘{print "docker rm "$1}’ | bash
以上均为docker的基本操作,后续还会继续学习并发布
上一篇: Angular与服务器通讯