一,Docker简介
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。
Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
二,容器
由于虚拟机存在某些缺点( 资源占用多,冗余步骤多,启动慢),Linux发展出了另一种虚拟化技术:
Linux容器(Linux Containers,缩写为 LXC)
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统的虚拟机是在硬件层面实现虚拟化。与传统的虚拟机相比,Dokcer优势是更加启动速度快,占用体积小。
比较了 Docker 和传统虚拟化方式的不同之处:
*传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。
*容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
*每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
三,Docker 安装
1,确认系统版本
cat /etc/redhat-release
确定是centos7及以上版本
2,卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3,yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
4,安装 yum-utils
sudo yum install -y yum-utils
5,设置存储库(Set up the repository)
##官网要求
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
##但是这是要访问外网的,容易导致拉取镜像时超时或连接不上,所以这里使用阿里云的:
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/decker-ce/linux/centos/docker-ce.repo
6,更新yum软件包索引
yum makecache fast
7,安装 install docker-ce
##这里执行默认会安装最新版本的docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
##安装指定版本的docker
##1,列出版本信息
yum list docker-ce --showduplicates | sort -r
##2,安装,把 <VERSION_STRING> 替换成版本号即可
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin
8,启动docker
systemctl start docker
9,测试
##docker版本
docker version
##运行Hello World
docker run hello-world
出现一下信息说明安装成功
10,阿里云镜像加速
1,登录阿里云平台
2,点击控制台
3,找到容器镜像服务(可以搜索)
4,获取加速地址
5,如何配置阿里云容器镜像服务都会有的,如图
更多详情:请到官网查询
四,卸载
##1
systemctl stop docker
##2
yum remove docker-ce docker-ce-cli containerd.io
##3
rm -rf /var/lib/docker
##4
rm -rf /var/lib/containerd
五,Docker 常用命令
1,帮助类启动类命令
## 1,启动docker
systemctl start docker
## 2,停止docker
systemctl stop docker
## 3,重启Docker
systemctl restart docker
## 4,查看docker状态
systemctl status docker
## 5,开机启动
systemctl enable docker
## 6,docker概要
docker info
## 7,docker帮助文档
docker --help
2,镜像命令
## 1列出本地主机上所有的镜像
docker images [OPTIONS]
[OPTIONS]: -a 列出本地所有的镜像 -q 只显示镜像ID
##2,搜索某个镜像
docker search [OPTIONS] <镜像名字>
[OPTIONS]: 只列出N个镜像,默认是25个
例: docker search --limit 5 redis
##3,下载镜像
docker pull 镜像名字[:TAG]
[:TAG] : 版本号,没有就是最新版
例:docker pull redis:6.0.0
##4,查看镜像/容器/数据卷所占的空间
docker system df
##5,删除镜像
#5.1 删除单个镜像
docker rmi -f 镜像ID
#5.2 删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG
#5.3 删除全部
docker rmi -f $(docker images -qa)
3,容器命令
这里先拉取ubuntu镜像
docker pull ubuntu
## 1,启动容器
docker run [OPTIONS] 镜像ID/镜像名:TAG
[OPTIONS]:(有的是一个减号,有的是两个减号)
--name="容器的新名字" 为容器指定名称
-d 后台运行容器并返回容器的ID
-i 以交互式模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输入端,通常与-i同时使用
-P 随机端口映射,大写P
-p 指定端口映射,小写p 如下图
例:docker run --name="myredis" redis:6.0.0
## 2,列出所有的当前正在运行的容器
docker -ps [OPTIONS]
[OPTIONS] :
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
## 3,退出容器(退出在交互式中的容器)
exit : run进去的容器 exit退出,容器停止
ctrl+p+q : run进去的容器 ctrl+p+q退出,容器不停止
## 4,启动已停止的运行的容器
docker start 容器ID/容器名
## 5,重启容器
docker restart 容器ID/容器名
## 6,停止容器
docker stop 容器ID/容器名
## 7,强制停止容器
docker kill 容器ID/容器名
## 8,删除已停止的容器
docker rm 容器ID
## 9,查看容器日志
docker logs 容器ID
## 10,查看容器内运行的进程
docker top 容器ID
## 11,查看容器内部细节
docker inspect 容器ID
## 12,进入正在运行的容器并以命令行交互
docker exec -it 容器ID bashShell
例: docker exec -it 容器ID /bin/bash
docker exec -it 容器ID redis-cli
## 13,从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机的路径
例: docker cp 83cbaeeed320:/usr/local/1.txt /tmp/2.txt
## 14,导入和导出容器
export :导出容器的内容留作为一个tar归档文件[对应import命令]
import :从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]