Docker

一、初识Docker

1、什么是Docker

Docker如何解决依赖的兼容问题的?

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
  • 将每个应用放到一个隔离容器去运行,避免互相干扰

在虚拟机上安装docker卡住 虚拟机下载docker_学习

Docker是如何解决不同系统环境的问题?

在虚拟机上安装docker卡住 虚拟机下载docker_docker_02

在虚拟机上安装docker卡住 虚拟机下载docker_mysql_03

总结:Docker是什么?

在虚拟机上安装docker卡住 虚拟机下载docker_在虚拟机上安装docker卡住_04

2、Docker与虚拟机的差别

在虚拟机上安装docker卡住 虚拟机下载docker_学习_05

在虚拟机上安装docker卡住 虚拟机下载docker_微服务_06

Docker与虚拟及的差别:

  • dockrer是一个系统进程;虚拟机是在操作系统中的操作系统
  • docker体积小、启动速度快、性能好;虚拟机体积大 、启动速度慢、性能一般

3、Docker架构

在虚拟机上安装docker卡住 虚拟机下载docker_docker_07

在虚拟机上安装docker卡住 虚拟机下载docker_docker_08

在虚拟机上安装docker卡住 虚拟机下载docker_在虚拟机上安装docker卡住_09

4、Docker安装

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 推送

练习:

在虚拟机上安装docker卡住 虚拟机下载docker_docker_10

6、容器命令

在虚拟机上安装docker卡住 虚拟机下载docker_学习_11

案例1:

在虚拟机上安装docker卡住 虚拟机下载docker_微服务_12

例如:

docker run --name zh -p 80:80 -d nginx

容器创建成功后,会返回一个ID

如:

66969f8d6a1341f143cf874ba13faf89ec812ab6820812133ba64281a99c61ba

查看容器命令:默认查看运行中的容器,加上-a查看所有容器

docker ps

查看日志命令:zh表示容器名称

docker logs zh

持续日志查看:

docker logs -f zh

停止:用ctrl + C

小结:


在虚拟机上安装docker卡住 虚拟机下载docker_在虚拟机上安装docker卡住_13

案例2:

进入Nginx容器,修改HTML文件内容,添加“Zhenghui”

在虚拟机上安装docker卡住 虚拟机下载docker_学习_14

步骤一:

docker exec -it zh bash

查看官方文档,找到初始的文档位置,

在虚拟机上安装docker卡住 虚拟机下载docker_微服务_15

**步骤二:**进入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 删除容器

小结:

在虚拟机上安装docker卡住 虚拟机下载docker_mysql_16

练习:

在虚拟机上安装docker卡住 虚拟机下载docker_学习_17

在虚拟机上安装docker卡住 虚拟机下载docker_微服务_18

进入dockerHub查看res镜像文档

在虚拟机上安装docker卡住 虚拟机下载docker_docker_19

创建redis容器支持数据持久化的命令

docker run --name zh -p 6379:6379 -d redis redis-server --appendonly yes

7、数据卷

容器与数据耦合的问题

在虚拟机上安装docker卡住 虚拟机下载docker_docker_20

**数据卷(volume)**是一个虚拟目录,指向宿主机文件系统的某个目录。

在虚拟机上安装docker卡住 虚拟机下载docker_微服务_21

在虚拟机上安装docker卡住 虚拟机下载docker_mysql_22

docker volume create ls   //创建数据卷
docker volume ls     //查看数据卷
docker volume inspect html  //查看目录
docker volume prune    //删除未使用的数据卷
docker volume rm html  //删除指定文件

数据卷的作用:

将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全。

案例一:挂载数据卷

在虚拟机上安装docker卡住 虚拟机下载docker_mysql_23

在虚拟机上安装docker卡住 虚拟机下载docker_学习_24

删除文件时。使用

rm -rf fileName (文件名)

移动文件:

mv -i /home/zhenghui/mysql.tar /tmp/mysql.tar  移动文件

参考:(18条消息) linux环境下将某个目录下的文件复制或者移动到另一个目录下_bst@微胖子的博客-CSDN博客_linux 复制文件到另一个目录命令

案例二:目录直接挂载

在虚拟机上安装docker卡住 虚拟机下载docker_学习_25

加载 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
总结:

在虚拟机上安装docker卡住 虚拟机下载docker_在虚拟机上安装docker卡住_26

8、自定义镜像

1、镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

在虚拟机上安装docker卡住 虚拟机下载docker_在虚拟机上安装docker卡住_27

2、Dockerfile

在虚拟机上安装docker卡住 虚拟机下载docker_微服务_28

构建镜像:

在虚拟机上安装docker卡住 虚拟机下载docker_mysql_29

在虚拟机上安装docker卡住 虚拟机下载docker_在虚拟机上安装docker卡住_30

3、docker-compose

在虚拟机上安装docker卡住 虚拟机下载docker_学习_31

下载安装命令:

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部署微服务集群