1. 概述
1.1 容器概念
docker是一个容器,所谓容器,就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址,主机名等,kvm虚拟机,linux,系统文件。在Linux系统中,如果将容器和虚拟化化技术(如:VM虚拟机)做对比的话,容器就是一个更加轻量以及方便的一个虚拟机。
1.2 开发与运维
在传统的软件设计过程中,会涉及到开发(开发人员)与线上(运维人员)两个问题,针对以上问题,传统的解决方法就是:开发人员开发完相关代码,然后打包(jar,war)发给运维人员,运维人员不仅需要负责相关包的部署,还需要在线上部署各种环境来保证程序的正常运行,这无疑给后期的维护和升级带来很多的问题,而且也会浪费很多时间。
随着容器技术(docker)的出现,问题也得到进一步的改善,docker的目的则是:将我们开发人员所编写的代码,环境等东西一起打包(docker中称为“镜像”),然后上传到相关仓库(docker hub),运维人员只需要将这个镜像拿去部署使用即可,不需要考虑相关环境问题,可以大大节省时间和资源,甚至对于一般的部署上线,开发人员都可以做到。
1.3 虚拟化与容器化
传统的虚拟化技术:
在我们传统的虚拟化技术中,如果我们想要部署一个APP,需要在Linux中将我们想要的环境部署好,然后再部署我们的app,借助环境,将我们的app部署上去,这容易造成资源浪费,环境冲突等问题的出现。
容器化技术:
容器化相当于虚拟化,只不过它所消耗的资源更加的少,更加轻便,而在我们的容器化技术中,我们将app和他所需要的环境进行打包形成镜像,每一个包都可以称为一个容器,容器之间互相隔离,互不影响,这样子可以更加很好的利用系统资源,也可以很好的将应用部署发布。
2. Docker安装
docker_24">2.1 docker基本组成
镜像(image): 就好比一个个模板,可以通过这个模板来创建一个个服务,(你也可以这样子理解:镜像就是我们打的一个个可以运行的jar包,不管jar包里包括了什么,如环境等等),通过镜像可以创建多个容器。
容器(container): 所谓容器,就是通过运行镜像来生成一个个容器,容器就是我们经常使用的,包括启动,停止,删除等等,你可以将他看成一个简易的Linux系统,专门用来跑我们想跑的项目。
仓库(repository): 存放镜像的地方,可以理解为:类似于github里面的仓库,可以通过仓库拉取,发布镜像。
docker_32">2.2 docker安装
1.确认Linux版本: docker的安装需要在centos7以上版本才行
2.安装docker: 可根据docker官网安装:https://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
#(2.如果Linux是aliyun Linux2 的话,还需下载一个兼容yum源:yum install yum-plugin-releasever-adapter --disablerepo=* --enablerepo=plus)(可查看阿里云官方介绍:https://help.aliyun.com/document_detail/51853.html)
#3. 设置镜像仓库(设置成国内阿里云的)
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#4. 更新yum索引(可做可不做)
yum makecache fast
#5. 安装docker(一直按Y即可)
yum install docker-ce docker-ce-cli containerd.io
#6. 启动docker
systemctl start docker
#7. 判断docker是否启动成功(出现版本信息即成功)
docker version
#8. 测试helloworld
docker run hello-world
docker_77">2.3 卸载docker
#1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2.删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
3. Run流程与Docker原理
3.1 Run流程
3.2 底层原理
Docker是一个CS(Client-Service)架构的系统,当Docker运行时,他的守护进程会直接运行在我们的宿主机上,通过Socker从客户端访问,当Docker-Service接收到Docker-Client的指令,Docker就会执行这个命令。
docker_95">3.3 docker端口映射
4. Docker常用命令
官方文档地址: https://docs.docker.com/reference/
docker version #查看docker版本信息
docker info #查看docker详细信息
4.1 镜像命令
1. docker images 查看镜像信息
#查看镜像信息
docker images
#镜像信息
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
REPOSITORY:镜像仓库源
TAG:镜像标签
IMAGE ID:镜像id
CREATED:镜像创建时间
SIZE:镜像大小
#命令可选后缀
-a, --all #查看所有镜像
-q, --quiet #只显示镜像ID
2. docker search 搜索镜像
docker search 镜像名 #搜索相关镜像
#命令可选后缀
-f, --filter #筛选镜像
3. docker pull 下载镜像
docker拉取下载镜像时,采用分层下载的方式拉取,就是:当你更新镜像版本时,docker不会清除镜像上一个版本的所有信息,而是保留新版本共有的一些内容,节省资源。
docker pull 镜像名 #拉取镜像
docker pull 镜像名:版本 #拉取指定的镜像版本,不指定则默认最新的
4. docker rmi 删除镜像
docker rmi -f id #根据镜像ID删除镜像
4.2 容器命令
1. 新建容器并启动
#使用镜像启动容器
docker run [可选参数] image
docker run -it 镜像名 /bin/bash #使用bash模式进入容器
#常用可选参数
--name #容器名字
-d #后台方式启动
-it #使用交互模式运行(进入容器操作)
-p #指定端口(常用方式:主机端口映射到容器端口)
2. 查看正在运行的容器
docker ps #查看正在运行的容器
docker ps -a #查看正在运行和最近运行的容器
docker ps -n=? #显示?个最近创建的容器
3. 退出容器
exit #直接停止容器并退出(交互式运行容器)
Ctr+P+Q #容器不停止退出
4. 删除容器
docker rm 容器ID #删除容器
5. 启动与停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止容器
docker kill 容器id #强制停止容器
4.3 其他命令
1. 后台启动
注意: 在使用docker -d 来让容器后台启动时,会出现一个bug,即:容器自己停止。因为docker容器后台启动时,他需要一个前台进程来使用它,如果没有相对应的前台进程,它会认为当前没服务来使用它了,然后他就自己挂掉了。
docker -d 容器id #后台启动容器
2. 查看日志
docker logs -tf (--tail 数字) 容器id #查看日志(显示日志条数)
3. 查看容器的进程信息
docker top 容器id #查看容器的进程信息
4. 查看镜像的元数据
docker inspect 容器id
5. 进入当前正在运行的容器
docker exec -it 容器id bashShell #以交互式的方式进入容器(相当于另开一个容器终端)
docker attach 容器id #进入容器正在执行的终端,不打开新的终端
6. 从容器中拷贝文件到外面
docker cp 容器id:文件路径