Docker
一、初识Docker
1、什么是Docker
Docker如何解决依赖的兼容问题的?
- 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
- 将每个应用放到一个隔离容器去运行,避免互相干扰
Docker是如何解决不同系统环境的问题?
总结:Docker是什么?
2、Docker与虚拟机的差别
Docker与虚拟及的差别:
- dockrer是一个系统进程;虚拟机是在操作系统中的操作系统
- docker体积小、启动速度快、性能好;虚拟机体积大 、启动速度慢、性能一般
3、Docker架构
4、Docker安装
- centOS7下载地址:
Index of /centos/7/isos/x86_64/ (iscas.ac.cn) - finallshell下载地址:Windows版下载地址:
http://www.hostbuf.com/downloads/finalshell_install.exe - finallshell连接虚拟机:(18条消息) 使用FinalShell连接已经搭好的虚拟机(centos 7)_郑师傅炒板栗的博客-CSDN博客_finalshell怎么连接虚拟机
- centOS7安装docker:
centos7 docker 安装教程 | 《Linux就该这么学》 (linuxprobe.com) - VMware下载地址:
下载 VMware Workstation Pro | CN
5、镜像命令
- docker pull nginx 从镜像拉取镜像,如Docker Hub Container Image Library | App Containerization,可以接版本号,不接版本号默认最新版
- docker images 查看所有镜像
- docker save -o nginx.tar nginx:latest 导出镜像为一个文件,保存到磁盘
- docker rmi nginx:latest 删除镜像 ,rmi 后面可以接名称或者ID
- docker load -i nginx.tar 加载镜像 (-i表示input,-o表示output)
- docker load --help 查看帮助文档
- docker push 推送
练习:
6、容器命令
案例1:
例如:
docker run --name zh -p 80:80 -d nginx
容器创建成功后,会返回一个ID
如:
66969f8d6a1341f143cf874ba13faf89ec812ab6820812133ba64281a99c61ba
查看容器命令:默认查看运行中的容器,加上-a查看所有容器
docker ps
查看日志命令:zh表示容器名称
docker logs zh
持续日志查看:
docker logs -f zh
停止:用ctrl + C
小结:
案例2:
进入Nginx容器,修改HTML文件内容,添加“Zhenghui”
步骤一:
docker exec -it zh bash
查看官方文档,找到初始的文档位置,
**步骤二:**进入nginx的Html所在目录/user/share/nginx/html
cd /usr/share/nginx/html
**步骤三:**修改index.html
sed -i 's#Welcome to nginx#Zhenghui#g' index.html
在容器创建成功后:
可以通过
- docker start zh 开启容器
- docker stop zh 停止容器
- docker rm zh 删除容器
小结:
练习:
进入dockerHub查看res镜像文档
创建redis容器支持数据持久化的命令
docker run --name zh -p 6379:6379 -d redis redis-server --appendonly yes
7、数据卷
容器与数据耦合的问题
**数据卷(volume)**是一个虚拟目录,指向宿主机文件系统的某个目录。
docker volume create ls //创建数据卷
docker volume ls //查看数据卷
docker volume inspect html //查看目录
docker volume prune //删除未使用的数据卷
docker volume rm html //删除指定文件
数据卷的作用:
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全。
案例一:挂载数据卷
删除文件时。使用
rm -rf fileName (文件名)
移动文件:
mv -i /home/zhenghui/mysql.tar /tmp/mysql.tar 移动文件
参考:(18条消息) linux环境下将某个目录下的文件复制或者移动到另一个目录下_bst@微胖子的博客-CSDN博客_linux 复制文件到另一个目录命令
案例二:目录直接挂载
加载 mysql.tar 直接去dockerhub搜索mysql,执行命令
docker pull mysql
为获取配置文件,可以先创建一个测试容器mysqltest,查看其文件路径
docker run --name mysqltest \
> -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root \
> -d mysql
查看文件目录:
docker inspect mysqltest
拷贝配置文件至自定义目录:
docker cp mysqltest:/etc/mysql/my.cnf /tmp/mysql/cnf
移动文件并重命名:
mv -i /tmp/mysql/cnf /tmp/mysql/conf/my.cnf
删除测试容器
docker rm -f a37ea3141bcb(容器ID)
创建并挂载所需要的容器:(-e表示环境密码,-p表示端口,-v表示数据卷挂载,-d表示后台运行)
docker run \
> --name mysql \
> -e MYSQL_ROOT_PASSWORD=123 \
> -p 3306:3306 \
> -v /tmp/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
> -v /tmp/mysql/data:/var/lib/mysql \
> -d \
> mysql:latest
总结:
8、自定义镜像
1、镜像结构
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。
2、Dockerfile
构建镜像:
3、docker-compose
下载安装命令:
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
修改文件权限:+x表示给文件添加可执行的权限
sudo chmod +x /usr/local/bin/docker-compose
Docker-compose的作用:
帮助我们快速不俗分布式应用,无需一个个微服务去构建镜像和部署。
4、docker-compose部署微服务集群