Docker
是什么?
-
一种虚拟化软件
-
让应用程序的开发和部署变得简单
-
将所有的文件打包进container(容器),包括代码,库,依赖项,环境配置。总而言之就是应用程序和他的运行环境。
为什么?
开发麻烦:要开发一个东西,每个人都要在本地配置环境,因为平台和版本的不同,极有可能出现问题。
部署麻烦:要给软件附上说明书,说明要配置哪些环境和服务,由运营团队来完成,这个过程同样容易出错
怎么解决
docker把所有的配置放入一个隔离的环境,不用在本地配置,直接指令docker run postgres或者rediis取得这些服务,从网上直接取出这个容器
可以运行不同版本的软件而且不会冲突
用户只需要配置好docker runtime,然后运行指令就行了。
docker的虚拟化
操作系统由内核 (与硬件交流)应用层(和用户交互)组成。
docker虚拟化的是应用层
VM虚拟机则是虚拟化了内核和应用层
和VM的区别
- 轻量得多
- 运行快
- VM兼容性更强,无法在linux上运行windows的docker,需要和内核匹配
Docker Image
是什么
使用docker生成地打包或工件成为docker镜像。
基本上就只是个应用程序工件
但是它不仅拥有源码,还有环境配置信息(操作系统应用程序层,安装在上面的npm或者node.js)
镜像的运行实例就是一个container,容器就是一个运行实例,容器基于镜像启动,docker会在镜像只读层添加可写层。
所以可以同时运行多个基于同一个image的container,相互独立
注册表
储存和管理docker镜像的中央仓库。
Dockerhub用来找所有的官方,公司,个人的镜像,这个叫注册表
注册表中可以有很多个库,用来更新不同版本的image
image tags:image会进行版本控制
拉取指令
docker pull {name}:{tag} = Pull an image from a register
如果不指定版本,默认拉取最新
运行指令
docker run {name}:{tag} = Creates a contianer from given image and start it
run -d (detach):则不会锁住终端
docker log {container}
其实可以直接run image,尽管他不在本地,它会自动pull
docker stop {container} = Stop one or more running containers
怎么运行
container在一个独立的环境下运行,所以必须先把容器公开到本地
每次run一个container都是新的,但只会显示正在运行的,停机的不会显示,但是依旧存在
-a or --all = list all containers(stopped and runnning)
docker start {container} = start one or more stopped containers
--name = Assign a name to the container
端口绑定
-p {HOST_PORT}:{CONTAINER_PORT}
:加入端口
在一个主机上,特定的端口上只能运行一个服务
绑定范围是1-9000
怎么创建Docker Image
选择一个base image,上面安装了npm或者应用程序需要的所有工具,是一个最小的操作系统环境。
一些镜像已经预装了特定的应用程序或框架,例如 node
、python
、nginx
等。使用这些镜像可以方便地在其基础上开发相应的应用程序。
# 使用 Ubuntu 作为基础镜像
FROM ubuntu:20.04
# 安装一些依赖
RUN apt-get update && apt-get install -y python3
# 复制应用程序代码
COPY . /app
# 设置工作目录
WORKDIR /app
# 指定容器启动时执行的命令
CMD ["python3", "app.py"]