- 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包。
- 将应用放到一个隔离容器去运行,避免互相干扰。
- VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层,虚拟化的操作系统,虚拟化的仓库,然后在安装应用
- Docker在宿主机器的操作系统上创建Docker引擎,直接在宿主主机的操作系统上调用硬件资源,而不是虚拟化操作系统和硬件资源,所以操作速度更快
- docker是一个系统进程,虚拟机是在操作系统中的操作系统
- docker体积小,启动速度快,性能好,虚拟机体积大,启动速度慢,性能一般
- 镜像 :docker将应用程序 及其所需要的依赖,函数库,环境,配置等文件打包在一起,称为镜像
- 容器: 镜像中的应用程序运行后形成的进程就是容器,docker会将这些应用程序进行隔离 ,将每一个应用程序打包,然后用于运行。
docker是一个CS架构的程序,由两部分组成 - 服务端(server):docker守护进程,负责处理docker指令
- 客户端(client):通过命令或者restAPI向docker服务端发送制定,可以在本地或者远程向服务端发送指令
较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
$ sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
docker-ce
使用 Docker 仓库进行安装
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。
设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils
device-mapper-persistent-data
lvm2 --skip-broken
使用官方源地址(比较慢)
$ sudo yum-config-manager
–add-repo
https://download.docker.com/linux/centos/docker-ce.repo
可以选择国内的一些源地址:
阿里云
$ sudo yum-config-manager
–add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i ‘s/download.docker.com/mirrors.aliyun.com/docker-ce/g’ /etc/yum.repos.d/docker-ce.repo
yum makecache fast #提高速度
清华大学源
$ sudo yum-config-manager
–add-repo
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
-
启动docker前一定关闭防火墙
systemctl stop firewalld #关闭
systemctl disable firewalld 禁止开机启动防火墙 -
启动docker
systemctl start docker -
停止docker服务
systemctl stop docker -
重启docker服务
systemctl restart docker或者
systemctl restart docker.service
拉取镜像 docker pull
docker pull nginx
推送镜像 docker push
查看镜像 docker images
docker images nginx
删除镜像 docker rmi
docker rmi nginx:latest
保存镜像为一个压缩包docker save
docker save -o [保存的目标文件名称] 镜像名称+版本
docker save -o nginx.tar nginx:latest
加载压缩包为镜像 docker load
docker load -i nginx.tar
-i:–input string :读取一个tar文件,取代标准输入
-q: --quiet:简化输出信息
docker run --name ng -p 80:80 -d nginx
docker run :创建并运行一个容器
–name:给容器起一个名字;比如叫ng
-p将宿主机端口与容器端口映射;冒号左边的为宿主机端口,右侧为容器端口
-d :后台运行容器
nginx:镜像名称。例如nginx
docker run:创建并运行
docker pause 让运行的容器暂停
docker unpause 恢复运行
docker stop停止一个运行的容器
docker start让停止的容器再次运行
docker rm 删除一个容器
docker system prune 命令会删除所有停止的容器
需要加上容器名称
docker ps 查看运行的容器
docker ps -a查看所有的容器
查看容器log日志
docker logs [容器名称] 查看容器log日志,注不是实时
docker logs -f [容器名称] 查看容器log日志,注,实时
docker exec -it ngi bash
docker exec 进入容器内部
-it,给当前进入的容器创建一个标准的输入输出终端,允许我们与容器交互
ngi 要进入的容器的名称
bash 进入容器后执行的命令,bash是一个linux终端交互命令
cd usr/share/nginx//index下的nginx.html
如果没有vi命令使用
在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部 没有编辑器,修改文件比较麻烦
这就是容器与数据耦合带来的后果
- 不利于修改,修改需要进入nginx的html内容时,需要进入容器 内部修改 ,很不方面
- 数据不可复用,容器内的修改对外是不可见的,所有修改的容器对新创建的容器是不可复用的
- 升级维护困难,如果要升级容器就要删除旧容器所有的数据就跟着删除了。
如果要修改一个容器里面的html下面的内容
可以生成一个数据卷
数据卷关联容器
一个数据卷可以关联多个容器
我们可以通过修改数据卷里面的html下的文件从而使得与这个数据卷关联的容器html下的文件发生改变。
查看数据卷
docker volumn ls
创建数据卷
volume create nhtml
查看数据卷的基本信息,宿主机
docker volumn inspect nhtml
挂载数据卷
创建容器的时候挂载一个数据卷到某个容器内目录
比如创建并运行一个容器
docker run --name ng -p 80:80 -d nginx
创建运行并挂载数据卷
docker run --name ng -v nhtmlz:/usr/share/nginx/html -p 80:80 -d nginx
数据卷本地就会有与容器一样/usr/share/nginx/html下的相同文件
只需要修改数据卷的本地文件,与之数据卷关联的容器的相应的内容也会修改
常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像。
镜像结构
镜像就是在系统函数库、运行环境基础上,
添加应用程序文件、配置文件、依赖文件等组合
然后编写好启动脚本打包在一起形成的文件
Dockerfile语法
我们只需要告诉Docker,我们的镜像的组成,需要哪些baseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像,
通过docker把jar包部署
就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像,每一个指令都会形成一层Layer
运行命令产生镜像 docker build -t javaweb:1.0 .
后面是名称加版本
将镜像封装为容器
docker run --name javaw -p 8090:8090 -d javaweb:1.0



