🎬 博客主页:楼下安同学的博客
🎥 本文由 楼下安同学 原创 🙉
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆生活明朗,万物可爱,人间值得,未来可期!✨
----❤️-----❤️-----❤️-----❤️-----❤️-----❤️-----❤️-----
Docker是什么?
Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker原理
Docker底层实现是基于namespace和cgroup实现的。
Linux Namespaces机制提供一种资源隔离方案
。PID,IPC,Network等系统资源不再是全局性
的,而是属于某个特定的Namespace
。每个namespace下的资源对于其他namespace下的资源都是透明,不可见的。因此在操作系统层面上看,就会出现多个相同pid的进程。系统中可以同时存在两个进程号为0,1,2的进程,由于属于不同的namespace,所以它们之间并不冲突
。而在用户层面上只能看到属于用户自己namespace下的资源,例如使用ps命令只能列出自己namespace下的进程。这样每个namespace看上去就像一个单独的
Linux系统。
Docker 容器使用 linux namespace 来隔离其运行环境
,使得容器中的进程看起来就像一个独立环境中运行一样。但是,光有运行环境隔离还不够,因为这些进程还是可以不受限制地使用系统资源,比如网络、磁盘、CPU以及内存 等。关于其目的,一方面,是为了防止它占用了太多的资源而影响到其它进程
;另一方面,在系统资源耗尽的时候,linux 内核会触发 OOM,这会让一些被杀掉的进程成了无辜的替死鬼。因此,为了让容器中的进程更加可控,Docker 使用 Linux cgroups 来限制容器中的进程允许使用的系统资源
。
Docker核心概念
- docker镜像(Images):Docker 镜像是用于创建 Docker 容器的模板。
- docker容器(Container):容器是独立运行的一个或一组应用。
- docker客户端(Client): 客户端通过命令行或者其他工具使用Docker API与 Docker 的守护进程通信docker主机(Host):一个物理或者虚拟的机器用于执行Docker 守护进程和容器。
- docker仓库(Registry):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库DockerHub 提供了庞大的镜像集合供使用。
Docker安装
1、Linux下安装
# 移除旧的docker版本:
sudo yum remove docker
# 安装依赖的工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加软件来源:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum缓存:
sudo yum makecache fast
# 安装docker
sudo yum -y install docker-ce
安装成功展示:
2、windows下安装
推荐安装桌面版docker.
稳定
下载桌面版安装包,安装完成后开启hyper-v即可!
奇葩问题及时Google!!!
更换docker源
# 修改/etc/docker/daemon.json
vim /etc/docker/daemon.json
# json中的地址可以删减
{"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
验证:
# docker info中显示刚才配置的信息即完成
Registry Mirrors:
http://hub-mirror.c.163.com/
https://docker.mirrors.ustc.edu.cn/
https://registry.docker-cn.com/
Docker基本命令
基本命令
# 查看docker版本
docker version
# 查看docker命令
docker --help
# 查看docker详细信息
docker info
镜像images
# 从镜像仓库中拉取或者更新指定镜像
# -a :拉取所有tagged镜像
docker pull [OPTIONS] NAME
# 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker push [OPTIONS] NAME
# 列出本地镜像
# -a :列出本地所有的镜像
# -q :只显示镜像id
docker images [OPTIONS]
# 删除本地一个或多个镜像
# -f :强制删除
docker rmi [OPTIONS] IMAGE [IMAGE...]
# 将指定镜像保存成tar归档文件
# -o :输出到的文件
docker save [OPTIONS] IMAGE [IMAGE...]
# 导入使用docker save命令导出的镜像
# -i : 指定导入的文件,代替 STDIN。
# -q : 精简输出信息。
docker load [OPTIONS]
# 从归档文件中创建镜像。
# -c :应用docker指令创建镜像
# -m :提交时的说明文字
docker import [OPTIONS] file|URL| - [REPOSITORY[:TAG]]
容器rootfs
# 创建一个新的容器并运行一个命令
# -i: 以交互模式运行容器,通常与 -t 同时使用
# -P: 随机端口映射,容器内部端口随机映射到主机的端口
# -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
# -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
docker run [OPTIONS] IMAGE
# 列出容器
# 默认列出所有在运行的容器信息
# -a:显示所有的容器,包括未运行的
docker ps [OPTIONS]
# 获取容器/镜像的元数据
# -f :指定返回值的模板文件
# -s :显示总的文件大小
docker inspect [OPTIONS] NAME
# 查看容器中运行的进程信息
docker top CONTAINER
# 连接到正在运行中的容器
docker attach CONTAINER
# 启动一个或多个已经被停止的容器
docker start CONTAINER
# 停止一个运行中的容器
docker stop CONTAINER
# 进入容器内部
# 交互式面板
docker exec -it container-id bash
# 重启容器
docker restart
# 杀掉一个运行中的容器
# -s :向容器发送一个信号
docker kill [OPTIONS] CONTAINER
# 删除一个或多个容器
# -f :强制删除一个运行中的容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 查看容器中运行的进程信息
docker top CONTAINER
# 退出并停止容器
exit
日志logging
docker logs [OPTIONS] CONTAINER
OPTIONS说明:
-f: 跟踪日志输出
-t: 显示时间戳
--since: 显示某个开始时间的所有日志
--tail: 仅列出最新N条容器日志
总结
Docker在计算机技术日新月异的今天, Docker 在国内发展的如火如荼。特别是在一线互联网公司 Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项,掌握这门技术特别有必要,先简单的了解原理,多练就ok啦,感谢阅读!!!