1天掌握docker – B站阿良
Docker介绍
什么是docker
使用最广泛的开源容器引擎
一种操作系统级别的虚拟化技术
依赖于Linux
内核特性: Namespace
和Cgroups
(资源隔离和资源限制)
一个简单的应用程序打包工具
eg: docker run -it centos:7.9.2009 /bin/bash
ls
ps -ef
[root@37c2eb3b4162 /]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (AltArch)
docker设计目标
提供简单的应用程序打包工具
开发人员和运维人员职责逻辑分离
多环境保持一致性
docker基本组成
Docker Client
客户端
Docker Daemon
守护进程
Docker Images
镜像
Docker Container
容器
Docker Registry
镜像仓库
容器对比虚拟机
docker应用场景
应用程序打包和发布
应用程序隔离
持续集成
部署微服务
快速搭建测试环境
提供PaaS
产品, 平台即服务
Linux安装Docker
Docker版本
社区版 CE
企业版 EE
支持平台
Linux Mac Windows
CentOS7.x安装Docker
镜像管理
镜像是什么
一个分层存储的文件
一个软件的环境
一个镜像可以创建N
个容器
一种标准化的交付
一个不包含Linux
内核而又精简的Linux
系统
docker history images 查看分层
镜像与容器的关系
容器就是在镜像最上层创建一个读写层, 并不会修改镜像源文件
管理镜像常用命令
docker --help
docker image ls 查看镜像仓库
docker image inspect nginx 查看镜像详细信息
docker pull nginx:latest 下载镜像
docker image rm nginx 删除镜像
docker image save nginx > nginx.tar 导出
docker image load < nginx.tar 导入
容器管理
创建容器常用选项
-i 交互式
-t 分配一个终端
-d 运行容器到后台
-e 创建环境变量
-p 发布容器端口映射
-P 随机export端口
--name 名称
-h 主机名
-ip 指定ip
-network 链接到一个网络
-mount 将文件系统附加到容器
-v 绑定挂载卷
-restart 容器退出重启策略 默认no 可选[always|no-failure]
容器资源限制
-m,-memory 容器可以使用的最大内存量
-memory-swap 允许交换到磁盘的内存量
-memory-swappiness=<0-100> 容器使用SWAP分区交 换的百分比(0-100,默认为-1)
-oom-kill-disable 禁用OOM Killer
-cpus 可以使用的CPU数量
-cpuset-cpus 限制容器使用特定的CPU核心,如(0-3,0,1)
-cpu-shares CPU共享 (相对权重)
eg:
内存限额:
允许容器最多使用500M内存和100M的Swap,并禁用OOM Killer:
docker run -d --name nginx03 --memory="500m" --memory-swap="600m" --oom- kill disable nginx
docker stats nginx03
CPU限额:
允许容器最多使用一一个半的CPU:
docker run -d --name nginx04 --cpus="1.5" nginx
允许容器最多使用50%的CPU:
docker run -d --name nginx05 --cpus= ".5" nginx
管理容器常用命令
docker ps 运行的容器
-l 最新创建的容器
-a 所有容器
docker inspect 查看容器详细信息
docker exec 进入容器
docker commit 提交镜像
docker cp 复制文件到容器
docker port 查看端口映射
docker top 显示容器中的进程
docker stats 显示资源统计
docker stop/start
docker rm
管理应用程序数据
将数据从宿主机挂载到容器的三种方式
Docker
提供三种方式将数据从宿主机挂载到容器中:
volumes
: Docker
管理宿主机文件系统的一 部分(/var/lib/docker/volumes
) 。保存数据的最佳方式。
bind mounts
:将宿主机上的任意位置的文件或者目录挂载到容器中。
tmpfs
:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs
,同时避免写入容器可写层提高性能。
Volume
管理卷:
# docker volume create nginx-vol
# docker volume Is
# docker volume inspect nginx-vol
用卷创建一个容器:
# docker run -d --name = nginx test --mount src= nginx-vol,dst= /usr/share/nginx/html nginx
# docker run -d --name=nginx test -V nginx vol:/usr/share/nginx/html nginx
清理:
# docker stop nginx-test
# docker rm nginx-test
# docker volume rm nginx-vol
注意:
1.如果没有指定卷,自动创建。
2.建议使用--mount,更通用。
Bind Mounts
用卷创建一个容器:
# docker run-d -it -- name= nginx-test -- mount type= bind,src= /app/wwwroot,dst=/usr/share/nginx/html nginx
# docker run -d -it --name= nginx test -V /app/wwwoot:/usr/share/nginx/html nginx
验证绑定:
# docker inspect nginx-test
清理:
# docker stop nginx-test
# docker rm nginx-test
注意:
1.如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
2.如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。
Volume特点:
多个运行容器之间共享数据。
当容器停止或被移除时,该卷依然存在。
多个容器可以同时挂载相同的卷。
当明确删除卷时, 卷才会被删除。
将容器的数据存储在远程主机或其他存储上
将数据从一台Docker主机迁移到另一 台时,先停止容器,然后备份卷的目录(/var/ib/docker/volumes/)
Bind Mounts特点:
从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每 个容器,提供DNS解析。
在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机
上构建Maven项目时,容器都可以访问构建的项目包。
当Docker主机的文件或目录结构保证 与容器所需的绑定挂载一致时
容器网络
网络模式
bridge –net= bridge 默认网络,Docker启动后创建一个docker0网桥, 默认创建的容器也是添加到这个网桥中。 host –net= host 容器不会获得一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主 机的。容器除了网络,其他都是隔离的。 none –net= none 获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置。 container –net= container:Name/ID 与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。 自定义网络 与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名或者主机名容器之间网络通信。
容器网络访问原理
..
DockerFile
https://www.bilibili.com/video/BV1ob41157fD?p=16
DockerFile格式
..
DockerFile指令
..
Build镜像
..
搭建LNMP网站平台
..