Docker学习笔记

Docker

一、简介

·官方文档地址:https://www.docker.com/get-started
·中文参考手册:https://docker_practice.gitee.io/zh-cn/

1.1 什么是Docker

​ Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,
​ 主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI) 。
​ 帮助开发人员以及开发团队构建和发布应用。
​ Docker就是容器技术 ---- 应用容器技术
​ Docker 使用 Google 公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroup,namespace ,以及 OverlayFS 类的 Union FS等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。
​ 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

1.2 为什么是Docker

​ 更快速的启动时间
​ 一致的运行环境,更轻松的迁移
​ 持续交付和部署
​ 更轻松的维护和扩展
​ 对进程进行封装隔离,容器与容器之间互不影响,更高效的利用系统资源
​ 通过镜像复制N多个环境一致容器

1.3 Docker与传统虚拟机的对比

虚拟机缺点:
a.虚拟机运行软件环境之前必须自身携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重
b.通过虚拟机在资源调度上经过很多步骤;另外在调用宿主机的cpu,磁盘等这些资源的时候,拿内存举例,虚拟机是利用Hypervisor去虚拟化内存,整个调用过程是虚拟内存-虚拟物理内存-真正物理内存
Docker优点:
a.Docker是不携带操作系统的,所以Docker的应用就非常轻巧。
b.docker引擎分配资源直接是 虚拟内存 - 真正物理内存

传统虚拟机Docker容器
磁盘占用几个GB到几十个GB左右几十MB到几百MB左右
CPU内存占用虚拟操作系统非常占用CPU和内存Docker引擎占用极低
启动速度(从开机到运行项目)几分钟(从开启容器到运行项目)几秒
安装管理需要专门的运维技术安装,管理方便
应用部署每次部署都耗时耗力从第二次部署开始轻松简捷
耦合性多个应用服务安装到一起,容易相互影响每个应用服务一个容器,达成隔离
系统依赖需求相同或相似的内核,目前推荐Linux

1.4 Docker安装

​ docker引擎支持主流操作系统 window macos linux unix

a.docker在linux上安装
通用所有平台:bash脚本安装
在测试或开发环境中Dockers官方为了简化安装流程,提供了一套边界的安装脚本,centOS系统上可以使用这套脚本安装,另外可以通过–mirror轩轩使用国内源进行安装:执行这个命令后,脚本就会自动 的将一切准备工作做好,并且把Docker的稳定版本安装在系统中。
·安装Docker
$curl -fsSL get .docker.com -o get-docker.sh
$sudo sh get-docker.sh --mirror Aliyun
·启动Docker
$sudo sytemctl enable docker
$sudo systemctl start docker
·创建docker用户组
$sudo groupadd docker
·将当前用户加入docker组
$sudo usermod -aG docker $USER
·测试docker安装是否正确
$docker run hello-world

b.docker在windows系统上安装
下载:https://www.docker.com/products/docker-desktop
安装:直接点击.exe安装
注意:
win10必须开启Hyper-V

常用命令 (linux中)
sytemctl status | start | stop | restart docker
·检测docker是否启动
docker info 查看安装dockers引擎版本号
·配置docker开机自启动
sytemctl enable docker

1.5 docker的核心概念和核心架构

1.镜像 images
定义:一个镜像就代表一个软件 如:mysql镜像,redix镜像···
特点:只读
2.容器 container
定义:基于某个镜像运行一次就会生成一个程序实例,一个程序实例称之为一个容器
特点:可读可写
3.仓库 repository
定义:用来存储docker中所有镜像具体位置
分类:
远程仓库:docker在全世界范围维护一个唯一远程仓库
存放全世界开发者镜像以及官方发布镜像
本地仓库:当前自己机器中下载镜像存储位置
用来存放docker镜像位置
只保存当前自己使用过的镜像以及自己定义镜像
1.run命令可以将镜像—容器,每运行一次就生成一个容器
2.docker hub:远程仓库web界面
搜索相关镜像
offical Images:代表官方镜像
案例:安装mysql
docker pull mysql:5.7.32

1.6 docker下载镜像的加速设置

​ 阿里云有一个国内仓库的复制版本
​ 阿里云加速服务设置
​ 1.安装完成docker之后设置docker下载时加速服务器
​ 2.注册阿里云服务
​ 3.登录账号
​ 4.管理控制台—搜索容器
​ 5.在产品服务中搜索镜像/容器找到容器镜像服务
​ a.在打开页面中找到镜像加速器
​ b.切换使用系统
​ 6.使用docker info查看设置

二、Docker

2.1 docker的helloWorld应用

​ docker run hello-world

总结:
1.docker run 镜像名 根据run后面镜像运行一个容器
2.在运行之前先在自己本地仓库中查找对应的镜像找到直接使用找不到自动去远程仓库下载

2.2 docker中镜像的相关操作

常用命令:

格式

docker 【options】 command(具体命令)			

2.2.1 安装完成辅助命令

命令说明
1docker version查看docker的信息
2docker info查看更详细信息
3docker --help查看帮助信息

2.2.2 Images镜像命令

①查看本机中所有镜像

docker images --列出本地所有镜像

​ -a --列出所有镜像(包含中间镜像层)
​ -q --只显示镜像ID

**②搜索镜像
docker search [options] 镜像名 --去dockerhub上查询当前镜像

​ -s 指定值 --列出收藏数不少于指定值的镜像
​ --no-trunc --显示完整的镜像信息

**③从仓库下载镜像
docker pull 镜像名[:TAG|@DIGEST]

④删除镜像
docker image rm 镜像名:tag | 镜像ID
docker rmi 镜像名 --删除镜像

​ -f --强制删除

​ docker rmi -f $(docker images -q) 全部删除

2.2.3 container容器命令

将打包好的tar镜像文件导入到自己的docker仓库中
docker load -i 导入的tar的镜像文件名 | 镜像id

①运行容器

docker run 镜像名 --镜像名新建并启动容器

–name --别名:为容器新起一个名字
-d --启动守护式容器(在后台启动容器)
-p --映射端口号:原始端口号 指定端口号启动;可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。

-P --容器内部端口随机映射到主机的高端口。

示例

docker run -d -name myTomcat tomcat
docker run -it -name myTomcat -p 8080(系统上外部端口):8080(容器内服务器监听端口 tomcat
    直接启动tomcat,无法访问
    宿主机端口与容器中端口进行映射
    

②查看运行的容器

docker ps --列出所有正在运行的容器

​ -a --正在运行的和历史运行过的容器

​ -q --静默模式,只显示容器编号

打印信息:

​ CONTAINER ID(容器ID)

​ IMAGE(镜像名)

​ COMMAND(容器内执行命令)

​ CREATED(创建时间)

​ STATUS(当前状态)

​ PORTS(容器服务监听的端口)

​ NAMES(容器名称)

③停止|关闭 | 重启容器

docker start 容器名字或容器ID
docker restart 容器名或容器ID
docker stop 容器名或容器ID
docker kill 容器名或容器ID

④删除容器

docker rm -f 容器id和容器名;
docker rm -f $(docker ps -aq)

⑤查看容器内进程

docker top 容器ID或容器名

⑥查看容器内部细节

docker inspect 容器ID

⑦查看容器运行日志

docker logs [OPTIONS] 容器ID或容器名--只是展示日志,并不会实时监听
docker logs -f 容器ID | 容器名称	      --实时监听
docker logs -tf 容器ID | 容器名称	      --实时监听的同时加入时间戳
docker logs --tail 5 容器ID | 容器名称  --查看容器日志的最后5行

⑧与容器内部进行交互
进入容器

docker exec -it 容器ID | 容器名 bash(命令行)

​ 退出容器

exit

​ 部署 操作系统与容器内的文件传输

​ 从容器复制文件到操作系统

docker cp 容器ID | 容器名:容器内资源路路径 操作系统中的路径

​ 从操作系统复制文件到容器

docker cp 操作系统中的路径 容器ID | 容器名:容器内资源路路径

2.3 Docker中的网络通信以及网桥的使用

2.3.1 为什么提供网络功能?

​ Docker允许通过外部访问容器或容器互联的方式提供网络服务。

2.3.2 外部访问容器

​ 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

​ 当使用 -P 标记时,Docker 会随机映射一个端口到内部容器开放的网络端口。

2.4 数据卷 volume

​ https://docs.docker.com/docker-for-windows/wsl/#develop-with-docker-and-wsl-2

作用:实现宿主机系统和容器之间的文件共享

数据卷的使用:

​ 启动容器的时候绑定数据卷

​ docker run -d -p 8081:8080 --name tomcat01 -v 宿主机目录:容器内目录 tomcat

1.自定义数据卷目录

docker run -d -p 8082:8080 --name tomcat01 -v D:\IFA\apache-tomcat-7.0.100\webapps:/usr/local/tomcat/webapps tomcat

2.自动数据卷目录

docker run -d -p 8082:8080 --name tomcat01 -v aa:/usr/local/tomcat/webapps tomcat

​ aa代表一个数据卷名字,名称可以随便写;

​ docker 在不存在时自动创建这个数据卷同时自动映射宿主机中某个目录

​ 同时在启动容器时会将aa对应容器目录中全部内容复制到映射目录中

应用:

​ 为了对数据进行保护,可以使用数据卷

三、Docker挂载异常
3.1 Docker下挂载的文件夹的内容之前还可以正常使用,突然间就看不到文件夹下的东西了,挂载的本地文件夹的东西还在
解决1:万能重启
解决2:更改文件夹目录为777

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值