Docker

1.初识Docker

       大型项目组件较多,运行环境也较为复杂,部署时会碰到依赖关系复杂,容易出现兼容性问题;开发,测试,生产环境也有差异。
       Docker通过将应用的Libs(函数库),Deps(依赖库),配置与应用一起打包;将每个应用放到一个隔离的容器中去运行,避免互相干扰。

解决(大型项目依赖关系复杂,不同组件依赖有兼容性问题):

Docker允许开发中将应用,依赖,函数库,配置一起打包,形成可移植镜像。

Docker应用运行在容器中,使用沙箱机制,相互隔离。

解决(开发,测试,生产环境有差异):

Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行。

1.Docker和虚拟机的区别

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

2.Docker架构

总结

  1. 镜像:将应用程序及其依赖,环境,配置打包在一起

  1. 容器:镜像运行起来就是容器,一个镜像可以运行多个容器

  1. Docker结构:

  1. 服务端:接收命令或远程请求,操作镜像或容器

  1. 发送命令或者请求到Docker服务端

d. DockerHub:

i.一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry

e. 什么是Docker:帮助我们快速构建应用镜像,交付应用,运行应用的技术

f. Docker工作流:

i.构架自定义镜像或者从DockerRegistry拉取镜像

ii.根据镜像创建容器,并运行


2.Docker的基本操作

启动前先关闭防火墙:systemctl stop firewalld
启动Docker:systemctl start docker
查看版本:docker -v
查看帮助文档: docker --help

1.镜像相关命令:

docker save -o nginx.tar nginx:1.23.3 “保存镜像为一个压缩包”
docker load -i nginx.tar  "加载压缩包为镜像"

2.容器相关命令:

注意:多去DockerHub搜索镜像,可以更加了解如何使用。

docker run --name myNginx -p 80:80 -d nginx  运行Nginx镜像,容器名为myNginx
         -p:将宿主机端口与容器端口映射,冒号左侧为宿主机端口,右侧为容器端口。
         -d:后台运行容器

docker logs   查看日志
           -f:添加此参数可以持续查看日志

docker ps   查看运行的容器
          -a:添加此参数可以查看所有容器

docker start 容器名/docker stop   容器名    启动和关闭容器

docker rm mn   删除容器
                加-f 强制删除,包括运行中的容器

docker exec -it myNginx bash    进入容器
            docker exec:进入容器内部,执行一个命令
            -it:                给当前进入的容器创建一个标准输入,输出终端,允许我们与容器交互
            myNginx:     要进入的容器名字
            bash:            进入容器后执行的命令,bash是一个linux终端交互命令
                    不推荐在容器内修改文件。

3.数据卷

容器与数据耦合
1.不便于修改
2.数据不可复用
3.升级维护困难

数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录

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

docker volume [command]

数据卷操作

create

创建一个volume

inspect +数据卷名

显示一个或多个volume的信息

ls

列出所有的volume

prune

删除未使用的volume

rm

删除一个或多个指定的volume

创建容器时,可以通过 -v参数来挂载一个数据卷到某个容器目录。

docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
                   -v html:/usr/share/nginx/html:把html数据卷挂载到容器中的/usr/share/nginx/html这个目录中。
                 
                       docker volume inspect html:查看html数据卷位置再进入该目录
                      
                        cd /var/lib/docker/volumes/html/_data

                       然后可以直接修改index.html,容器中的index.htm也会跟着变,反过来也一样。

4.目录挂载和数据卷挂载的语法是类似的:

-v [宿主机目录]:[容器内目录]
-v [宿主机文件]  : [容器内文件]

总结

1.docker run的命令中通过 -v 参数挂载文件或目录到容器中

-v volume名称:容器内目录

-v 宿主机文件:容器内文件

-v 宿主机目录:容器内目录

2.数据卷挂载与目录直接挂载的:

数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找

目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

3.Dockerfile自定义镜像

1.镜像结构

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

总结:镜像是分层结构,每一层称为一个Layer

BaseImage层:包含基本的系统函数库,环境变量,文件系统

Entrypoint:入口,是镜像中应用启动的命令

其他:在BaseImage基础上添加依赖,安装程序,完成整个应用的安装和配置

2.Dockerfile语法

https://docs.docker.com/engine/reference/builder
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

Dockerfile的本质是一个文件,通过指令描述镜像的构建过程

Dockerfile的第一行必须是FROM,从一个基础镜像来构建

基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

4.Docker-Componse

1.初识DockerCompose

https://docs.docker.com/compose/compose-file/
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
version: "3.8"
services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
     -  "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
  web:
    build: .
    ports:
     - "8090:8090"

5.Docker镜像仓库

镜像仓库( Docker Registry )有公共的和私有的两种形式:
公共仓库:例如Docker官方的 Docker Hub,国内也有一些云服务商提供类似于 Docker Hub 的公开服务,比如 网易云镜像服务、DaoCloud 镜像服务、阿里云镜像服务等。
除了使用公开仓库外,还可以在本地搭建私有 Docker Registry。
  1. 向镜像仓库推送镜像

推送镜像到私有仓库必须先tag

重新tag本地镜像,名称前缀为私有仓库的地址:192.168.150.101:8080/
docker tag nginx:latest 192.168.150.101:8080/nginx:1.0

推送镜像
docker push 192.168.150.101:8080/nginx:1.0
  1. 从镜像仓库拉取镜像

拉取镜像
docker pull 192.168.150.101:8080/nginx:1.0

总结

推送本地镜像到仓库前都必须重命名(docker tag)镜像,以镜像仓库地址为前缀

镜像仓库推送前需要把仓库地址配置到docker服务的daemon.json文件中,被docker信任

推送使用docker push命令

拉取使用docker pull命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值