您现在的位置是:首页 >技术交流 >Docker 快速上手网站首页技术交流
Docker 快速上手
目录
一、初始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部署