docker
入门
对 Docker 最简单并且带有一定错误的认知就是 “Docker 是一种性能非常好的虚拟机”。可以粗略的理解为就是虚拟机
正如上面所说,这是有一定错误的说法。Docker 相比于传统虚拟机的技术来说先进了不少,具体表现在 Docker 不是在宿主机上虚拟出一套硬件后再虚拟出一个操作系统,而是让 Docker 容器里面的进程直接运行在宿主机上(Docker 会做文件、网络等的隔离),这样一来 Docker 会 “体积更轻、跑的更快、同宿主机下可创建的个数更多”。
Docker 中有三个核心概念:Image、Container、Repository。
- Image: 有领“好人卡”倾向的广大程序猿一定对 镜像 的概念不会陌生。但和 windows 的那种 iso 镜像相比,Docker 中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起(类似于一个压缩包的源码和一个 git 仓库的区别)。
- Container: 容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。依托 Docker 的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,Container 就是一个与宿机隔离 “容器”。容器可宿主机之间可以进行 port、volumes、network 等的通信。
- Repository: Docker 的仓库和 git 的仓库比较相似,拥有仓库名、tag。在本地构建完镜像之后,即可通过仓库进行镜像的分发。常用的 Docker hub 有 hub.docker.com/ 、 cr.console.aliyun.com/ 等。
概念
容器卷
容器卷:对容器里面的数据进行持久化。
默认情况下容器卷存放在/var/lib/registry
特点:
1:数据卷可在容器之间共享或重用数据(实际是共用一份文件)
2:卷中的更改可以直接实时生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
在容器卷里的数据会同步到宿主机上面,宿主机上的数据也会同步到容器里。
安装
1.先安装gcc、gcc++
yum -y install gcc yum -y install gcc-c++2.安装yum-utils
yum install -y yum-utils3.安装仓库
设置阿里云仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo4.安装docker
安装最新版的docker
yum install docker-ce docker-ce-cli containerd.io -y -y5.启动docker
systemctl start docker #设置开机自启 systemctl enable docker6.查看进程
ps -aux | grep docker7.配置阿里云镜像加速
需要先去申请阿里的docker容器个人版(免费)
修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://hduehqjo.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
命令
启动类
# 启动docker
systemctl start docker
# 关闭docker
systemctl stop docker
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker
# 开机启动docker
systemctl enable docker
# 查看docker信息
docker info
# 查看总体命令帮助文档
docker --helpe
# 查看具体命令帮助文档
docker 具体命令 --help
操作类
#查看本机存在的镜像
docker images
-a :列出本地所有镜像(含历史映像层)
-q :只显示镜像ID
# 查询镜像(在远程仓库中寻找)
docker search 镜像名
--limit 5 redis #只显示前5个
# 下载镜像
docker pull 镜像名
# 默认不加:[TAG]就是:latest
# docker pull redis:版本号
# 查看镜像/容器/数据卷所占的空间
docker system df
# 删除镜像
docker rmi 镜像id
-f :强制删除
# 删除全部 docker rmi -f $(docker images -qa)
# 查看当前正在运行的docker
docker ps
-a: 正在运行的所有容器+历史上运行过的
-l: 显示最近创建的容器
-n: 最近创建的n个容器
-q: 静默模式,只显示容器编号
容器操作
# docker 运行Ubuntu容器并返回一个交互终端
# 注意,如果启动Ubuntu这类容器,如果只是后台运行(-d),没有bash启动后容器会马上自杀,因为容器会认为没有应用在运行
docker run -it ubuntu /bin/bash
i: interactive 交互
t: tty 终端
--name="": 指定容器名称
-d :后台运行
-p: 指定端口运行(小写) 8080:80 ->主机的8080端口映射到容器 的80端口
-P: 随机端口运行(大写)
# 退出容器
exit
ctrl+p+q # run进去的容器,退出界面但是容器依然运行
# 启动已经停止运行的容器
# 已经run过的容器,只能用start开启
docker start 容器名/容器ID
# 重启容器
docker restart 容器名
# 停止容器
docker stop 容器名
# 强制停止容器
docker kill 容器名
# 删除容器
docker rm 容器名
-f 强制删除
# 进入正在运行的容器输入命令
docker exec -it <容器ID或名称> /bin/bash
#查看日志
docker logs 容器名
#启动docker自动启动该容器
docker update 容器名 --restart=always
其他
# 查看容器详细信息
docker inspect 容器id
# 进入正在运行的容器shell,使用exec再使用exit退出不会导致容器关闭,如果使用attach再使用exit会导致容器关闭
docker exec -it 容器id
# ubuntu 进入要使用 docker exec -it {id} /bin/bash
# 可以直接进入容器
docker attach {id}
# 把容器内的文件拷贝到主机上
docker cp 容器id:/文件路径 /主机路径
# 导出容器
docker export 容器id > 文件名.tar
# 导入容器
cat 文件.tar | docker import -镜像名:版本号/镜像用户
# 通过修改容器,commit后制造自定义的镜像
docker commit -m="描述信息" -a="作者" 容器ID 镜像名:版本号
# 容器的继承
# 容器继承容器并不会复制容器的运行状态,只是继承了容器的配置和文件系统状态。如果需要完全复制容器的运行状态,可以考虑使用 docker commit 命令前先停止容器,然后再启动新容器。可以粗略的理解就是复制了一个容器
docker run -it --volumes-from 父类
把容器内的文件挂载到宿主机上
默认情况容器的文件是挂载在宿主机的/var/lib/docker
使用-v 可以指定共用文件
docker run -it -v /宿主机路径:/容器内路径 镜像名 # 使用--privileged=true 可以开启容器特权,让容器拥有操作宿主机资源的权限
把本地镜像推送到远程仓库
1.创建符合规范的镜像
docker tag 镜像:Tag 主机名:端口/仓库名:tag docker tag myUbuntu:1.0 192.168.1.1:8080/myUbuntu:1.02.配置/etc/docker/daemon.json (docker默认不允许使用http的方式推送镜像,所以需要添加以下配置)
在配置文件中添加以下配置(记得重启)
{ "insecure-registries":["192.168.1.1:8080"], }3.把镜像推送到仓库中
docker push 192.168.1.1:5000/myUbuntu:1.04.查看仓库的内容
curl -XGET http://192.168.1.1:8080/v2/_catalog5.从远程仓库中下载镜像回本地
docker pull 192.168.1.1:8080/myUbuntu:1.0