Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。
它启动很快。启动一个Docker容器只需50毫秒。没有看错,是真的这么快。这就是使用高层级抽象的好处,这样减少了你所需运行的组件的数量。这也意味着,在它执行的过程中几乎没有额外的开销。
一键(单命令)部署。它是真的简单到安装一个应用只需输入一行命令。想要安装MySQL?一行命令。想到一下子把WordPress, MySQL, Nginx and Memcache全部安装并且配置完成?统统一行命令。
扩展性。这也是Docker很亮眼的特性之一,特别是,如果你的项目是基于微服务的。Compose and Swarm用来部署可扩展的应用系统,加上Kubernetes、Mesos等第三方应用,这两方面使服务器的扩展性提高到了更高的层级。可承载多达数百万级数量的容器的管理能力。
资源隔离。在过去,如果你想运行所有的服务在同一台服务器上,这可能会耗尽服务器的所有资源。Docker允许你基于各自应用或服务,进行设置、监听、调整。
Docker容器几乎可运行于任意的Linux平台,包括物理机、虚拟机、公有云、私有云、个人PC、服务器等。用户可以很方便地将应用程序在各平台间迁移。国内腾讯、百度、阿里、京东、小米、新浪、美团点评、滴滴等公司不断的加入,也随着Kubernetes技术也不断成熟,2019年将会有更大的应用和发展。掌握Docker、Kubernetes,是运维、开发、测试必不可少的高薪技能。
本课程为市面上不可多得的全面Docker体系课程,其他同类线下Docker培训大多售价在2000-4000RMB,内容为2天10个课时左右。而本课程有14个课时专业内容,限时特价198,为其他培训价格十分之一,含金量为其他同类Docker课程2-3倍,并由国内Linux教父-马哥亲授。
1、课程内容讲解Docker版本为目前官方最新版18.06,并全面介绍其新特性,领先于市面上教程。
2、本课程会以企业实际应用为主线,对整个Docker架构进行全方面讲解。
3、本课程以理论+实战结合方式教学,让你知其然并知其所以然。
4、本课程为福利课程,原本定价800RMB,但近期新闻有说谷歌要回归,为迎接谷歌回馈开源,特此福利价198。
内容含金量为同类docker课程2-3倍不止,并由国内Linux教父-马哥亲授。
一、Linux容器技术基础
1、容器技术发展史
2、Namespace和CGroups
3、LXC和容器技术
二、Docker容器技术基础
1、Docker技术构架
2、安装部署Docker
3、Docker的镜像及容器的基础应用
三、Docker镜像
1、Docker镜像工作原理
2、基于容器制作Docker镜像
3、推送Docker镜像至Registry
4、镜像的本地分发
四、Docker网络
1、Docker网络模型及工作原理
2、Docker网络模型验正
3、暴露容器应用至节点外部
4、桥接式网络管理
5、配置Docker进程的网络属性
五、存储卷
1、存储卷类型及功能
2、存储卷应用
3、存储卷共享
六、Dockerfile
1、Dockerfile文件格式
2、各指令详解
3、案例:自定义entrypoint脚本,接收变量进行容器化应用配置
七、私有Registry
1、Registry的组织格式
2、利用docker-registry构建简单的私有Registry
3、docker-compose简介
4、使用VMWare Harbor构建企业级私有Registry
八、容器资源限制
1、资源限制模型
2、CPU资源限制及三种形式及其应用
3、内存及Swap资源限制及其应用
4、案例:使用stress-ng镜像验正资源限制效果
马哥(马永亮):马哥教育创始人CEO,51CTO金牌讲师和专家博主
计算机安全专业硕士,Linux核心专家、Linux运维教父、51CTO专家博主。多年Linux及数据库实战和教学经验,擅长讲授Linux运维、企业级运维自动化、系统架构和优化、hadoop海量数据、大并发架构设计、IaaS云技术等实战。马哥Linux、Python系列培训视频一直被网友们称为业内最专业的IT培训视频,马哥擅长把复杂抽象的大问题化解成具体形象的案例,其授课方式生动形象,幽默风趣。马哥在Linux界跟JAVA界马士兵称之为IT培训界的”马氏双雄”。在业内一直有着”马哥出品必是精品”之说。其教学方法及治学态度深受网友喜欢。直接或间接受教的真实学员数十万人,门徒遍布业内一二线互联网公司,往期学员已在腾讯、大众点评、巨人、盛大、九城、淘宝、滴滴、小米、京东、网易、平安、电信、一号店等知名公司担当要职!
- 镜像是静态的,不会运行。类似于程序
- 容器是动态的,有声明周期。类似于进程
- 镜像可以增删改查,容器可以增删改查
- CentOS 6 还是2.6内核,但是依然可以跑docker,是因为红帽打了补丁,不过有问题,不稳定
清华大学开源镜像网站: https://mirrors.tuna.tsinghua.edu.cn
docker-ce:配置文件:/etc/docker/daemon.json,此配置文件有时候需要手动创建
docker镜像加速:
- docker cn
- 阿里云加速器
- 中国科技大学
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
配置好加速器后使用info子命令查看docker环境参数
docker info ## 查看当前机器docker相关信息
docker image pull nginx:1.14-alpine
docker image ls ##列出所有镜像
docker image rm ##删除某个镜像
docker image ls --no-trunc
docker container COMMAND --help
docker run --name kvstor1 -d redis:4-alpine ##运行一个redis,先在dockerhub上搜索是否有这个镜像
docker run --name b1 -it buusybox:latest
docker exec -it kvstor1 /bin/sh ##交互式运行redis
docker search ##搜索镜像
docker pull ##下载到本地
docker image ##镜像
docker ps -a ##查看所有容器
docker start -i -a b1 ##启动名为b1的容器,模式为交互式
docker container ls 或 docker ps ##查看当前正在运行的容器
分清容器和镜像,容器是动态,镜像是静态,容器是运行的镜像,镜像就是死的文件
- 每个镜像都有默认自定义运行的程序(也可以指定,也可以改)
root@vm:~# docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
Options:
--add-host list Add a custom host-to-IP mapping (host:ip)
-a, --attach list Attach to STDIN, STDOUT or STDERR
--blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
--blkio-weight-device list Block IO weight (relative device weight) (default [])
--cap-add list Add Linux capabilities
--cap-drop list Drop Linux capabilities
--cgroup-parent string Optional parent cgroup for the container
--cidfile string Write the container ID to the file
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int Limit CPU real-time period in microseconds
--cpu-rt-runtime int Limit CPU real-time runtime in microseconds
-c, --cpu-shares int CPU shares (relative weight)
--cpus decimal Number of CPUs
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
-d, --detach Run container in background and print container ID
--detach-keys string Override the key sequence for detaching a container
--device list Add a host device to the container
--device-cgroup-rule list Add a rule to the cgroup allowed devices list
--device-read-bps list Limit read rate (bytes per second) from a device (default [])
--device-read-iops list Limit read rate (IO per second) from a device (default [])
--device-write-bps list Limit write rate (bytes per second) to a device (default [])
--device-write-iops list Limit write rate (IO per second) to a device (default [])
--disable-content-trust Skip image verification (default true)
--dns list Set custom DNS servers
--dns-option list Set DNS options
--dns-search list Set custom DNS search domains
--domainname string Container NIS domain name
--entrypoint string Overwrite the default ENTRYPOINT of the image
-e, --env list Set environment variables
--env-file list Read in a file of environment variables
--expose list Expose a port or a range of ports
--gpus gpu-request GPU devices to add to the container ('all' to pass all GPUs)
--group-add list Add additional groups to join
--health-cmd string Command to run to check health
--health-interval duration Time between running the check (ms|s|m|h) (default 0s)
--health-retries int Consecutive failures needed to report unhealthy
--health-start-period duration Start period for the container to initialize before starting health-retries countdown (ms|s|m|h) (default 0s)
--health-timeout duration Maximum time to allow one check to run (ms|s|m|h) (default 0s)
--help Print usage
-h, --hostname string Container host name
--init Run an init inside the container that forwards signals and reaps processes
-i, --interactive Keep STDIN open even if not attached
--ip string IPv4 address (e.g., 172.30.100.104)
--ip6 string IPv6 address (e.g., 2001:db8::33)
--ipc string IPC mode to use
--isolation string Container isolation technology
--kernel-memory bytes Kernel memory limit
-l, --label list Set meta data on a container
--label-file list Read in a line delimited file of labels
--link list Add link to another container
--link-local-ip list Container IPv4/IPv6 link-local addresses
--log-driver string Logging driver for the container
--log-opt list Log driver options
--mac-address string Container MAC address (e.g., 92:d0:c6:0a:29:33)
-m, --memory bytes Memory limit
--memory-reservation bytes Memory soft limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--memory-swappiness int Tune container memory swappiness (0 to 100) (default -1)
--mount mount Attach a filesystem mount to the container
--name string Assign a name to the container
--network network Connect a container to a network
--network-alias list Add network-scoped alias for the container
--no-healthcheck Disable any container-specified HEALTHCHECK
--oom-kill-disable Disable OOM Killer
--oom-score-adj int Tune host's OOM preferences (-1000 to 1000)
--pid string PID namespace to use
--pids-limit int Tune container pids limit (set -1 for unlimited)
--privileged Give extended privileges to this container
-p, --publish list Publish a container's port(s) to the host
-P, --publish-all Publish all exposed ports to random ports
--read-only Mount the container's root filesystem as read only
--restart string Restart policy to apply when a container exits (default "no")
--rm Automatically remove the container when it exits
--runtime string Runtime to use for this container
--security-opt list Security Options
--shm-size bytes Size of /dev/shm
--sig-proxy Proxy received signals to the process (default true)
--stop-signal string Signal to stop a container (default "SIGTERM")
--stop-timeout int Timeout (in seconds) to stop a container
--storage-opt list Storage driver options for the container
--sysctl map Sysctl options (default map[])
--tmpfs list Mount a tmpfs directory
-t, --tty Allocate a pseudo-TTY
--ulimit ulimit Ulimit options (default [])
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
--userns string User namespace to use
--uts string UTS namespace to use
-v, --volume list Bind mount a volume
--volume-driver string Optional volume driver for the container
--volumes-from list Mount volumes from the specified container(s)
-w, --workdir string Working directory inside the container
已经停止的容器激活
支撑容器的骨架进程不可在后台运行
- 只有在最上层可写,删除容器,容器最上层的可写层也会被删除
- 依赖于专用的文件系统,高级多层统一文件系统 最早被docker用于联合挂载的文件系统
- UnionFS、aufs据说代码很烂,被拒绝申请融入内核,因此不是内核所拥有支持的文件系统。若要使用,独立打补丁
- DM(devicemapper)性能较差
- 镜像存储位置。本地镜像不存在的时候去Registry网络获取镜像存储到本地。
- 默认就是docker hub的镜像
- 互联网大部分镜像用不了,因为不满足需求,一般都是二次定制镜像
- 镜像开发人员制作后推送到开放的公共仓库,其他人员通过开放仓库下载到本地
- 云原生:面向云计算而诞生的应用,专门运行在容器中,适配容器。云原生的配置是通过环境变量注入,而nginx基于配置文件,所以算不上云原生
- docker就是一个非常庞大的存储仓库
- 联动构建docker镜像:在github上创建项目,存放dockerfile,该仓库与docker hub仓库关联并持续监听,一旦更新,自动创建镜像。就跟gitbook一模一样的套路
- webhooks是自动构建的一个特征,推送dockerfile到站点,触发webhooks,启动自动构建
- automated builds和webhooks是一回事,相互关联
docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
- 常用站点:
docker pull quay.io/coreos/flannel
docker pull quay.io/coreos/flannel:
- 不加标签默认就是latest,指定标签加冒号
- 默认端口都是443
- 除非是docker hub的镜像,否则都要加前缀域名
- namespace可以是组织,个人或者角色
- 使用dockerfile结合build命令制作
- 二次开发,基于容器制作,相当于增加一层(把可写层叠加进镜像成为新镜像),可写层做成镜像
docker commit -a "MageEdu <mage@magedu.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 mageedu/httpd:v0.2
- 二次开发很方便,如何推送到docker hub?
docker login -p PASSWD -u USER hub.docker.com
docker image push mageedu/httpd
- 同理,阿里云镜像仓库也可以推送。国内做的比较好的也就阿里云
导出:
导出: