什么是docker?
docker是容器化技术。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker可以简单的理解为更加轻量级的虚拟机。
docker本质是对开发环境的一种模拟
docker和kubernetes的关系是什么?
关于docker和kubernets的关系可以参考这篇博客:https://blog.csdn.net/andyguan01_2/article/details/96993360 。
虚拟机繁重,想用Docker更轻量级,那好,你用吧,怎么用呢?手动一个一个创建?当然不,故kubernetes技术便出现了,以kubernetes为代表的容器集群管理系统,这时候就该上场表演了。
说白了,我们用kubernetes去管理Docker集群,即可以将Docker看成Kubernetes内部使用的低级别组件。另外,kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。
DockerFile与docker-compose.yml的区别是什么
我们在使用docker的时候常常会用到两种file,一种是dockerfile,另一种是docker-compose.yml,他们的关系是什么呢?事实上他们没有直接的关系.
Dockerfile描述了如何为容器组装私有文件系统,并且还可以包含一些元数据来描述如何基于该映像运行容器。docker file的每一行在执行的生成镜像的时候都是一个对应的步骤
DockerFile是用于构造自己的镜像时使用的文件,根据它可以生成images镜像文件。
典型命令:docker build -f DockerFile -t myImage .
下面是一个dockerfile的例子:
# 构建images(镜像)使用
FROM node:current-slim
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
EXPOSE 8080
CMD [ "npm", "start" ]
COPY . .
使用docker build命令可以执行该dockerfile,其作用是将对应的project生成并打包为一个镜像文件。
该dockerfile的执行结果如下所示:
docker-compose.yml是用于编排配置服务(或者说是容器)的文件(不用这个文件也能配置启动容器),这个文件的作用是准备一套镜像,以此构建出一个环境出来。典型命令:docker-compose up -d
docker-compose文件实例:
复制代码
# 编排服务(容器),每个服务启动一个镜像
version: '3'
services:
mysql: ##(服务1)
restart: always
image: mysql:5.7
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "12345678"
volumes: #数据持久化,落到本地盘上 本地:docker容器
- mysqldb:/var/lib/mysql # 卷标:docker容器 这种方式是不知道存储在本地的绝对路径,需要使用docker volume ls 和docker volume inspect 容器卷标 查看。 docker volume rm 容器卷标 删除卷
- ./docker/mysql/my.cnf:/etc/my.cnf #卷标:容器 这种方式是使用本地绝对路径的方式,可以查看到数据存放到本地的具体路径
- ./docker/mysql/init:/docker-entrypoint-initdb.d/
go-web: ##(服务2)
restart: always
image: beego-web
ports:
- "8080:8080"
而这当中的镜像文件,就是用dockerfile创建的,当然也可以有一些别的来源,例如标准镜像文件等等。
docker的优势是什呢:
1.简单易操作,简化了以往复杂的应用程序安装步骤,使用docker会变得非常简便。
2.可兼容多种应用,Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成镜像部署。
3.省钱 docker结合云可以做到高性能低价格
最大优势是方便搭建需要的环境
docker如何container类型
对着docker的图标点击右键,可以切换docker的container类型,如下所示
我们可以根据自己的需要切换对用的container操作系统。
dockerfile 例子
下面是一个典型的dockerfile例子及其说明
# Use the official image as a parent image.
FROM node:current-slim
# Set the working directory.
WORKDIR /usr/src/app
# Copy the file from your host to your current location.
COPY package.json .
# Run the command inside your image filesystem.
RUN npm install
# Add metadata to the image to describe which port the container is listening on at runtime.
EXPOSE 8080
# Run the specified command within the container.
CMD [ "npm", "start" ]
# Copy the rest of your app's source code from your host to your image filesystem.
COPY . .
该dockerfile定义了下面的steps
- FROM定义了一个已经提前存在的image。这是一个docker官方的image。由node.js供应商构建并经Docker验证为包含Node.js长期支持(LTS)解释器和基本依赖项的高质量image。
- WORKDIR 指明了应从image文件系统中的目录/ usr / src / app(而不是主机的文件系统)中执行所有后续操作。
- COPY操作拷贝package.json文件,从host系统到当前image的location(.),也就是到
/usr/src/app/package.json这个路径下
RUN 在image的filesystem内执行命令npm install,该命令会读取package.json文件的依赖并install
COPY从host system拷贝剩下所有的app的源代码到image的文件系统当中
EXPOSE 8080告诉docker该contain在运行的时候会监听8080端口
CMD CMD指令是在映像中指定一些元数据的第一个示例,该元数据描述了如何基于该映像运行容器。 在这种情况下,这就是说该图像要支持的容器化过程是npm start。
上面看到的是组织一个简单的Dockerfile的好方法。 始终以FROM命令开头,然后按照步骤构建私有文件系统,并以任何元数据规范作为结束。 Dockerfile指令比上面看到的要多。