目录
Docker
这是个人笔记,观看他人教学视频整合的,视频底部有链接,侵删。
Docker 应用容器
虚拟机是模拟一个完整的电脑,Docker是模拟其中的一部分。
相比之下,更加快捷。可以直接运行在不同的机器中。
容器之间相互隔离。内核级别的虚拟化。
Docker安装
基于Centos7的安装
Docker基本组成
镜像(Images):
- 我将它理解为类似Java中的类。
有一个class A。我可以new很多A赋值给a1,a2,a3.
镜像也是如此。可以通过镜像生成多个实例。
tomcat镜像 = => run = => tomcat01(在容器中)
容器( container):
- 通过镜像来创建。
有启动,停止,删除等等基本命令
仓库(repository):
- 存放镜像的地方,和git差不多。
安装
进入官网。最下方找到文档:
点击下载:
点击linux版本:
找到centos版本
卸载旧Docker
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
然后安装仓库:
$ sudo yum install -y yum-utils
//配置仓库镜像
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新
yum makecache fast
安装Docker相关内容:
yum install docker-ce docker-ce-cli containerd.io
查看是否安装成功:
docker version
启动Docker:
systemctl start docker
运行helloword(一个helloword的镜像):
docker run hello-world
出现上面这个说明运行成功。
查看当前下载的镜像:
docker images
Docker原理
Docker 在run之后:
- 在本机寻找是否有该镜像,有则运行
- 如果没有,在远程仓库中寻找是否有该镜像,没有就报错。
- 如果有,进行下载。
- 本地就会有该镜像,运行。
Docker如何工作:
Docker是Server和Client结构。Docker的守护进程(就是那个服务)运行在主机上,客户端通过Socket访问服务。
Server接收到客户端的命令就会访问。
Docker为什么比虚拟机快:
- Docker比虚拟机有更少的抽象层
- Docker用的是宿主机的内核,虚拟机要Guest OS。
Docker的常用命令
help
docker version #版本信息
docker info #显示docker的系统信息(比较详细)
docker --help #帮助命令
或者去官网看帮助文档
镜像命令
查看本地仓库:
[root@tutulei docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 6 months ago 13.3kB
REPOSITORY==>镜像仓库源
TAG==>镜像标签
IMAGE ID==>镜像ID
CREATED==>创建时间
SIZE==>大小
搜索:
docker search <name>
下载镜像:
docker pull
上图看到,默认下载最新版本。
后面一堆complete就是docker的分层下载(联合文件系统)docker images核心
Digest就是这个镜像的签名
然后是真实地址
下载指定版本:
可以看到,有一些层次显示exists!!
这里就是docker images高级的地方。他可以共用一些联合文件!!!这可以极大节省docker的空间。
镜像删除
docker rmi
docker rmi -f <镜像id> #删除指定镜像
docker rmi -f <镜像id> <镜像id> <镜像id> #删除多个镜像
docker rmi -f $(docker images -aq) #删除所有镜像
$() #这个括号里面写命令(类似于sql语句查询,然后会删除查询出来的结果)
容器命令
容器通过镜像创建(所以下载一个镜像先):
docker pull centos
新建容器并且启动:
docker run [可选参数] image
#参数说明
--name="Name" #容器名称
-d #后台运行
-it #使用交互方式运行,进入容器查看内容
-p(小p) #指定容器端口 -p 8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P(大P) #随机指定端口
测试:
上面就是启动并且进入了centos容器。
退出只需要输入exit(同步停止容器)。
查看当前正在运行的容器:
docker ps
参数:
-a
显示所有容器(运行中和为运行)
-n=?
显示最近创建的容器?是数目
-q
只显示容器编号
退出容器
exit 退出容器并且停止
Ctrl + P + Q 退出不停止
删除容器
docker rm 容器id #删除指定容器
docker rm -f $(docker ps -aq) #删除所有容器
$(查询语句)
docker ps -a -q|xargs docker rm #删除所有容器
启动停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
常用其他命令
后台启动容器
docker run -d 镜像名
对于centos这类镜像,运行后,docker ps会找不到运行中的进程。
这是因为,centos容器发现自己没有前台进程,这样会直接kill自己。
查看日志
docker logs --help查看帮助
--tail n #显示最新的n行日志
-t #显示时间
-f #持续显示新的日志
#测试:centos写一个while true脚本
docker run -d centos /bin/bash -c "while true;do echo test ;sleep 1;done"
#查看日志
docker logs -tf --tail 1 容器ID
查看容器的进程信息
docker top 容器ID
查看镜像/容器的元数据
docker inspect 容器ID/镜像名
测试部分截图:
进入正在运行的容器!
#新开了一个bash 进程和容器进行交互
docker exec -it 容器ID <bashshell>
#进入centos容器测试:
docker exec -it 7d38cf19296d /bin/bash
#进入容器
docker attach 容器ID
从容器中拷贝文件到本机
docker cp 容器ID:filename path
#首先查看当前以及存在的容器(无论容器是否运行,容器的数据一直存在)
docker ps -a
#进入容器
docker exec -it 容器ID
#新建一个test文件
touch test.java
#退出容器
exit
#拷贝文件
docker cp 7d38cf19296d:/home/test.java /home
提交镜像(生成新的镜像)
docker commit -m="提交的描述信息" -a="作者" 容器ID 目标镜像名:<TAG>(版本)
或者使用 DockerFile创建镜像。
命令小结图
容器数据卷
什么是容器数据卷
首先,Docker 是将一个应用和其环境打包成一个镜像。
这时,如果删除了整个容器,那么,容器中的所有数据都会丢失!(正常情况下,像mysql里面的数据需要持久保存)需要数据持久化。能将数据存在本地,而不仅仅在容器中。
容器数据卷就是一个数据共享的技术。Docker容器中产生的数据,同步到本地。
这就是卷技术,目录挂载,将容器中的目录挂载到宿主机上。
容器间也可以数据共享,多容器可以挂载到同目录。
挂载后,目录中的数据是相互同步的。容器内的数据会同步到容器外,容器外的数据会同步到容器内
使用数据卷
命令挂载-v
docker run -it -v 目标主机:容器内目录 centos /bin/bash
mysql挂载例子:
#启动mysql容器并且将配置文件和数据挂载到宿主机
docker run -d -p 3310:3306 -v /home/dockerfile/mysql/conf:/etc/mysql/conf.d -v /home/dockerfile/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name MYSQL01 mysql:5.7
-p 指定端口映射
-d 后台运行
-v 数据卷挂载
-e 添加配置
–name 指定容器名称
(mysql需要设置密码才能运行,其他版本的mysql启动方式可能有所区别)
数据卷挂载方式:
-v 宿主机目录:容器内部目录 #指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
添加权限:
#在-v 添加完数据卷挂载之后加:然后添加权限
ro #只读
rw #可读可写
例子:
docker run -d -P --name nginx02 -v hello-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v hello-nginx:/etc/nginx:rw nginx
-P 是随机映射端口
数据卷容器
命令:
--volumes-from
例子:
docker run -d -P -e MYSQL_ROOT_PASSWORD=123456 --volumes-from mylsq02 --name mysql01 mysql:5.7
笔记来源
该笔记是观看b站up主狂神的视频所记录的。
感谢狂神大佬的分享!
视频链接:https://www.bilibili.com/video/BV1og4y1q7M4