您现在的位置是:首页 >技术交流 >Docker 快速上手网站首页技术交流

Docker 快速上手

卒获有所闻 2023-05-24 08:00:04
简介Docker 快速上手

目录

一、初始Docker

二、Docker基本操作

1、镜像操作命令

2、容器相关命令

3、数据卷

三、Deckerfile自定义镜像

1、镜像结构

2、自定义镜像

四、DockerCompose


一、初始Docker

镜像(lmage):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称镜像

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见

docker架构

Docker是一个CS架构的程序,由两部分组成:

服务端server:Docker守护进程,负责处理Docker指令,管理镜像、容器等

客户端client:通过命令或RestAPI向Docker发送指令,可以在本地或远程向服务器发送指令

二、Docker基本操作

镜像名称一般分两部分组成:[repository]:[tag]

在没有指定tag时,默认是latest,代表最新版本的镜像

1、镜像操作命令

如何从DockerHub拉取一个nginx镜像并查看

2、容器相关命令

 创建运行一个Nginx容器

-p是端口映射,左边是原本主机的端口,右边是里面容器的端口

进入Nginx容器,修改HTML文件,添加文字

exec虽然可以进入容器内修改文件,但是不推荐,太麻烦了,而且修改是没有记录的

3、数据卷

我们想要解决容器与数据卷耦合的问题,就要用到数据卷

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

就是把数据提取出来,和原本容器里的文件绑定,存在宿主机的硬盘中,实现数据共享也可以防止容器消失后数据还在,最重要是为了让容器和数据解耦

创建一个nginx容器,修改容器html目录内的index.html内容

 创建并运行一个mqsql容器,将宿主机目录直接挂在到容器

提升:目录挂载与数据卷挂载的语法类似

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

实现思路如下:

1、在将课前资料中的mysqltar文件上传到虚拟机,通过load命令加载为镜像

2、创建目录/tmp/myql/data

3、创建目录/tmp/mygl/conf,将课前资料提供的hmy.cnf文件上传到/tmp/myql/conf

4、去DockerHub查阅资料,创建并运行MySQL容器,要求:

  • 挂载/tmp/myql/data到mysql容器内数据存储目录
  • 挂载/tmp/myql/conf/hmy.cnf到mysql容器的配置文件
  • 设置MySQL密码

数据卷挂载方式对比

第一种方式是用数据卷自动挂载,这种是默认的目录下,好处是自动生成,缺点是目录很深,权利都交给docker处理了。

第二种是目录挂载,自己创建目录和文件来挂载,但是麻烦就是自己来实现操作复杂。

三、Deckerfile自定义镜像

1、镜像结构

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

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

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

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

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

2、自定义镜像

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

 基于Ubuntu镜像构建一个新镜像,运行一个java项目

先写好dockerfile, 其中红色框出来的是每次构建一个项目都要写的配置基础镜像和jdk,这些可以单出提取出一层来,后面就不用重复写了

我们可以基于这个来做镜像,就可以省略上述步骤,这些java:8-alpine镜像都帮我们搞好

构建:

启动:

四、DockerCompose

Docker Compose可以基于Compose文件帮我们快速部署分布式应用

无需手动一个个创建运行容器

Compose文件是一个文本文件,通过定义集群中的每个容器如何运行

将cloud-demo微服务集群利用dockerCompose部署

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。