一、docker是什么?
- 概念
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
-
Docker 架构
从架构图可看,一个完整的Docker有以下几个部分组成:
1.DockerClient客户端
Docker命令行工具
2.Docker Daemon守护进程
Docker守护进程(docker daemon)是运行在你的操作系统上的一个服务。目前,它只能运行在Linux上,因为它依赖于一些Linux内核特性(比如Cgroup与Namespace)。 但是,也有一些特殊的办法让Docker运行在MacOS与Windows上(运行在Linux虚拟机中)。
Docker守护进程提供了REST API。许多工具(Docker命令行,Docker Compose等)都可以通过REST API与Docker守护进程进行交互,例如创建容器,构建镜像等。
3.Docker Image镜像
镜像相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套root 文件系统。
4.DockerContainer容器
镜像和容器的关系,就像是java中的类和对象一样
镜像(类)是静态的定义
容器(实例化电源线)是镜像运行时的实体。
容器可以被创建、启动、停止、删除、暂停等。
- docker容器虚拟化 与 传统虚拟机比较
二、docker怎么安装?
2.1、yum 包更新到最新
yum update
2.2、安装需要的软件包
yum install -y yum-utils
yum install -y device-mapper-persistent-data
yum install -y lvm2
2.3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2.4、 安装docker
yum install -y docker-ce
2.5、 查看docker版本,验证是否验证成功
docker -v
2.6、配置镜像加速
- 创建daemon.json
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://fsqbo5wy.mirror.aliyuncs.com",
"https://registry.docker-cn.com"
]
}
- 重新启动服务
sudo systemctl daemon-reload
sudo systemctl restart docker
三、docker有那些常用命令?
Docker的常用命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker --help #docker帮助命令
镜像命令
docker images 查看所有本地主机上的镜像
docker search mysql 搜索镜像
docker pull mysql 下载镜像
docker pull mysql:5.7 指定版本下载
docker rmi -f ID/name 删除镜像
docker rmi -f 容器id 删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id 删除多个镜像
docker rmi -f $(docker images -aq) #删除全部镜像
容器命令
说明:有了镜像才可以创建容器,liunx,下载一个centos来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image
#参数说明
--name="Name" 容器名字 tomcat01 tomcat02 tomcat03,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 制定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
容器端口
-p 随机指定端口
#测试,启动并进入容器
docker run -it centos /bin/bash
列出所有运行的容器
docker ps 命令
-a #列出当前正在运行的容器+带出历史运行中的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号
删除容器
docker rm 容器id #删除指定的容器,不能删除在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
退出容器
exit #直接容器停止并退出
ctrl + P + Q #容器不停止退出
启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #停止当前容器
常用其他命令
后台启动容器
命令 docker run -d 镜像名
docker run -d centos
#问题docker ps,发现centos停止了
#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立即停止,就没有程序了。
查看日志
docker logs -f -t --tail 容器
#显示日志
-tf #显示日志
-tail number #显示日志条数
docker logs -tf --tail 10 容器id
查看容器中的进程信息ps
docker top 容器id
查看镜像的元数据
#命令
docker inspect 容器id
进入当前正在运行的容器
#我们通常都是使用后台的方式运行的,需要进入容器,修改一些配置
#命令
#方法一:
docker exec -it 容器id bashshell
eg:docker exec -it 容器id /bin/bash
ls
ps -ef
#方法二:
docker attach 容器id
docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
docker cp 容器id:/home/test.java /home
#拷贝是一个手动过程,未来我们使用 -v卷的技术,可以实现