怎么理解Docker:
官方解释的解释是docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。通俗意义上的理解,可以将docker理解成运行在操作系统上的软件,与通过 VMware Workstation 来虚拟化出一套硬件不同的是,docker容器内的应用程序时直接运行于宿主机的内核,容器没有自己的内核,也不会对硬件进行虚拟。相反通过VM虚拟化的它将基于你的电脑的硬件资源与之相应的虚拟一套出来,并且还要在上面运行完整的操作系统。回想一下,是不是你在插入 U 盘时如果你开启着通过VM虚拟出来的虚拟主机,它会提示你选择接入到虚拟机上面还是你的电脑上面。
Docker的三大部分:
镜像(image):
docker镜像就好比是一个只读的模板 ,可以通过这个模板来创建容器服务,用来打包软件运行环境和基于运行环境开发的软件,它包含了运行某个软件所需要的所有内容。tomcat镜像===>run ==> tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。可以想象一下在 window 上配置 java 的运行环境,首先要有个 IDE 还要下载 JDK 再要配置好环境变量,麻烦得要死,可是如果要有一个技术将这一切都打包成一个镜像,再发送给你,你就可以直接运行,这不就方便很多。
容器(container):Docker利用容器技术,独立运行一个或者一个组应用 ,通过镜像来创建的。启动,停止,删除,基本命令!目前就可以把这个容器理解为就是一个简易的linux系统,就像docker的logo鲸鱼上的集装箱似的且每个集装箱都是独立的!
仓库(repository):仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库!Docker Hub (默认是国外的)
安装Docker
1、需要的安装包
yum install -y yum-utils
2、设置镜像仓库
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云镜像地址
3、安装docker的相关 docker-ce 社区 ee企业版
yum makecache fast //更新软件包索引
yum instal1 docker-ce docker-ce-cli containerd.io
4、启动docker
systemctl start docker
docker version # 查看是否安装成功
5、测试启动hello-world镜像
docker run hello-world
6、查看镜像
docker images
1) 卸载docker
yum remove docker-ce docker-ce-cli containerd.io
2) 删除资源
rm -rf /var/lib/docker
7、阿里云镜像加速
登录阿里云
找到镜像加速地址
配置使用
回顾HelloWorld流程
底层原理
Docker是什么工作的?
Docker是- -个Client - Server结构的系统, Docker的守护进程运行在主机上。通过Socket从客户端访问 !DockerServer接收到Docker-Client的指令,就会执行这个命令!
Docker为什么比VM快?
1、Docker有着比虛拟机更少的抽象层。
2、docker 利用的是宿主机的内核, vm需要是Guest OS。
所以说,新建一个容器的时候, docker不需要想虚拟机-样重新加载一个操作系统内核 ,避免引导。虚拟机是加载GuestOS ,分钟级别的,而docker是利用宿主机的操作系统吗,省略了这个复杂的过程,秒级!|
Docker常用命令
帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker命令--help #万能命令
帮助文档地址:
https://docs.docker.com/reference/
镜像命令
docker images查看所有本地的主机上的镜像
[root@kuangshen /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 4 months ago 13. 3kB
#解释
REPOSITORY #镜像的仓库源
TAG #镜像的标签
IMAGE ID #镜像的id
CREATED #镜像的创建时间
SIZE #镜像的大小
#可选项
-a,--a11 #列出所有镜像
-q,--quiet #只显示镜像的id
docker search搜索镜像
[root@kuangshen /]# docker search mysq1
NAME DE SCRIPTION STARS
OFFICIAL AUTOMATED
mysq1 MySQL is a widely used, opensourcerelatin.. 9494
[OK]
mariadb MariaDB is a community-developed fork of MyS.. 3441
[OK]
#可选项,通过搜藏来过滤
--filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的
docker pull下载镜像
docker rmi 删除镜像
[root@kuangshen /]# docker rmi -f容器id #划除指定的容器
[root@kuangshen /]# docker rmi -f容器id容器id容器id容器id #删除多个容器
[root@kuangshen /]# docker rmi -f S(docker images - aq) #删除全部的容器
容器命令
说明:我们有了镜像才可以创建容器, linux,下载一个centos镜像来测试学习
docker pu11 centos
新建容器并启动
docker run [可选参数] image
#参数说明
--name="Name" 容器名字,tomcat01 tomcat02, 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口-p 8080:8080
-p ip:主机端口:容器端口|
-p主机端口:容器端口 (常用)
-p容器端口
容器端口
-p 随机指定端口
#测试,启动并进入容器
[root@kuangshen /]# docker run -it centos /bin/bash
[root@e4eccc01b495 /]# 1s # 查看容器内的centos。基础版本,很多命令都是不完善的!
bin dev etc home 1ib 1ib64 lost+found media mnt opt proc
root run sbin srv sys tmp usr var
#从容器中退回主机
[root@e4eccc01b495 /]# exit
exit
列出所有运行的容器
# docker ps命令
#列出当前正在运行的容器
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号
退出容器
exit #直接容器停止并退出
Ctr1 +P+ Q #容不停止退出
删除容器
docker rm容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q | xargs docker rm #删除所有的容器
启动和停止容器的操作
docker start容器id #启动容器
docker restart 容器id #重启容器
docker stop容器id #停止当前正在运行的容器
docker ki11容器id #强制停止当前容器
常用的其他命令
后台启动容器
#命令docker run -d镜像名!
[root@kuangshen /]# docker run -d centos
#问题docker ps,发现centos停止了
#常见的坑: docker 容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用, 就会自动停止
# nginx, 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker' logs -f -t --tai1
#显示日志
-tf #显示日志
--tail number #要显示日志条数
查看进程信息
查看镜像元数据
docker inspect 容器id
进入当前正在运行的容器
从容器内拷贝文件到主机上
docker cp容器id:容器内路径目 的的主机路径
举例:
============================================================================