Docker|Docker学习


Docker学习

    • 一、Docker概述
      • Docker是什么
      • Docker设计目标
      • Docker基本组成
      • Docker应用场景
    • 二、镜像管理
      • 镜像配置
      • 镜像与容器联系
      • 镜像管理命令
    • 三、容器管理
      • 创建容器常用选项
      • 容器管理常用命令
    • 四、管理应用程序数据
      • 将Docker主机数据挂载到容器
        • Volume方式
        • Bind Mounts方式
        • 搭建LNMP网站平台
    • 五、网络管理
      • 网络模式
    • 六、Dockerfile
      • Dockerfile指令

一、Docker概述 Docker是什么
  • 使用最广泛的开源容器引擎
  • 一种操作系统级的虚拟化技术
  • 依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)
  • 一个简单的应用程序打包工具
Docker设计目标
  • 提供简单的应用程序打包工具
  • 开发人员和运维人员职责逻辑分离
  • 多环境保持一致性
Docker基本组成
  • Docker Client:客户端
  • Ddocker Daemon:守护进程
  • Docker Images:镜像
  • Docker Container:容器
  • Docker Registry:镜像仓库
    Docker|Docker学习
    文章图片
Docker应用场景
  • 应用程序打包和发布
  • 应用程序隔离
  • 持续集成
  • 部署微服务
  • 快速搭建测试环境
  • 提供PaaS产品(平台即服务)
二、镜像管理 镜像配置
# 默认是国外的源,下载会慢,建议配置国内镜像仓库: # vi /etc/docker/daemon.json { "registry-mirrors": [ "https://registry.docker-cn.com"] } # 或者使用镜像加速器:daocloudio/mirror

镜像与容器联系
镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/中。
容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。
Docker使用存储驱动管理镜像每层内容及可读写层的容器层。
镜像管理命令
Docker|Docker学习
文章图片

三、容器管理 创建容器常用选项
Docker|Docker学习
文章图片

容器管理常用命令
Docker|Docker学习
文章图片

四、管理应用程序数据 将Docker主机数据挂载到容器
Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。
  • volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。 bind
  • mounts:可以存储在宿主机系统的任意位置。
  • tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统。
Volume方式
管理卷: # docker volume create nginx-vol # docker volume ls # docker volume inspect nginx-vol 用卷创建一个容器: # docker run -d -it --name=nginx-test --mount src=https://www.it610.com/article/nginx-vol,dst=/usr/share/nginx/html nginx # docker run -d -it --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx 清理: # docker container stop nginx-test # docker container rm nginx-test # docker volume rm nginx-vol注意: 如果没有指定卷,自动创建。 建议使用—mount,更通用。官方文档:https://docs.docker.com/engine/admin/volumes/volumes/#start-a-container-with-a-volume

Bind Mounts方式
用卷创建一个容器: # docker run -d -it --name=nginx-test --mount type=bind,src=https://www.it610.com/app/wwwroot,dst=/usr/share/nginx/html nginx # docker run -d -it --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx 验证绑定: # docker inspect nginx-test 清理: # docker container stop nginx-test # docker container rm nginx-test 注意: 如果源文件/目录没有存在,不会自动创建,会抛出一个错误。 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。官方文档:https://docs.docker.com/engine/admin/volumes/bind-mounts/#start-a-container-with-a-bind-mount

搭建LNMP网站平台
由“L”即Linux操作系统、“N”即Nginx网站服务、“M”即Mysql数据库、“P”即PHP语言组成
1、自定义网络 docker network create lnmp 2、创建Mysql数据库容器 docker run -itd \ --name lnmp_mysql \ --net lnmp \ -p 3306:3306 \ --mount src=https://www.it610.com/article/mysql-vol,dst=/var/lib/mysql / -e MYSQL_ROOT_PASSWORD=123456 / mysql:5.7 --character-set-server=utf83、创建所需数据库 docker exec lnmp_mysql sh / -c'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"' 4、创建PHP环境容器 docker run -itd \ --name lnmp_web \ --net lnmp \ -p 88:80 \ --mount type=bind,src=https://www.it610.com/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm5、以wordpress博客为例测试 wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz tar zxf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot # 浏览器测试访问 http://IP:88/wordpress

五、网络管理 网络模式
Docker支持5种网络模式 bridge 默认网络,Docker启动后默认创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。 host 容器不会获得一个独立的network namespace,而是与宿主机共用一个。 none 获取独立的network namespace,但不为容器进行任何网络配置。 container 与指定的容器使用同一个network namespace,网卡配置也都是相同的。 自定义 自定义网桥,默认与bridge网络一样。

六、Dockerfile Dockerfile指令
【Docker|Docker学习】Docker|Docker学习
文章图片

    推荐阅读