1天掌握docker – B站阿良

Docker介绍

什么是docker

使用最广泛的开源容器引擎

一种操作系统级别的虚拟化技术

依赖于Linux内核特性: NamespaceCgroups(资源隔离和资源限制)

一个简单的应用程序打包工具

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 镜像仓库

https://www.bookstack.cn/read/itmuch-docker/docker-%E7%AC%AC1%E7%AB%A0-Docker%E5%85%A5%E9%97%A8-01-Docker%E7%AE%80%E4%BB%8B.md#1.5%20Docker架构

容器对比虚拟机

https://www.bookstack.cn/read/itmuch-docker/docker-%E7%AC%AC1%E7%AB%A0-Docker%E5%85%A5%E9%97%A8-01-Docker%E7%AE%80%E4%BB%8B.md#1.6%20Docker与虚拟机

docker应用场景

应用程序打包和发布

应用程序隔离

持续集成

部署微服务

快速搭建测试环境

提供PaaS产品, 平台即服务

Linux安装Docker

Docker版本

社区版 CE 企业版 EE

支持平台

Linux Mac Windows

CentOS7.x安装Docker

https://www.bookstack.cn/read/itmuch-docker/docker-%E7%AC%AC1%E7%AB%A0-Docker%E5%85%A5%E9%97%A8-02-Docker%E5%AE%89%E8%A3%85.md

镜像管理

镜像是什么

一个分层存储的文件

一个软件的环境

一个镜像可以创建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网站平台

..