Docker|Docker学习
Docker学习
- 一、Docker概述
- Docker是什么
- Docker设计目标
- Docker基本组成
- Docker应用场景
- 二、镜像管理
- 镜像配置
- 镜像与容器联系
- 镜像管理命令
- 三、容器管理
- 创建容器常用选项
- 容器管理常用命令
- 四、管理应用程序数据
- 将Docker主机数据挂载到容器
- Volume方式
- Bind Mounts方式
- 搭建LNMP网站平台
- 五、网络管理
- 网络模式
- 六、Dockerfile
- Dockerfile指令
一、Docker概述 Docker是什么
- 使用最广泛的开源容器引擎
- 一种操作系统级的虚拟化技术
- 依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)
- 一个简单的应用程序打包工具
- 提供简单的应用程序打包工具
- 开发人员和运维人员职责逻辑分离
- 多环境保持一致性
- Docker Client:客户端
- Ddocker Daemon:守护进程
- Docker Images:镜像
- Docker Container:容器
- Docker Registry:镜像仓库
文章图片
- 应用程序打包和发布
- 应用程序隔离
- 持续集成
- 部署微服务
- 快速搭建测试环境
- 提供PaaS产品(平台即服务)
# 默认是国外的源,下载会慢,建议配置国内镜像仓库:
# vi /etc/docker/daemon.json
{
"registry-mirrors": [ "https://registry.docker-cn.com"]
}
# 或者使用镜像加速器:daocloudio/mirror
镜像与容器联系
镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history
容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。
Docker使用存储驱动管理镜像每层内容及可读写层的容器层。
镜像管理命令
文章图片
三、容器管理 创建容器常用选项
文章图片
容器管理常用命令
文章图片
四、管理应用程序数据 将Docker主机数据挂载到容器
Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。
- volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。 bind
- mounts:可以存储在宿主机系统的任意位置。
- tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统。
管理卷:
# 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应用:容器间通信与Mariadb数据库主从复制
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 一起来学习C语言的字符串转换函数
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 如何更好的去学习
- 【韩语学习】(韩语随堂笔记整理)