docker入门

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"]
相关推荐
wz975419 小时前
Docker 从 systemd 托管容器、overlay2 存储驱动到 Compose 多容器实战
spring cloud·docker·eureka
新*20 小时前
ES 7.17 三节点 Docker 集群接入 IK 自定义词典:一次从丢插件到热更新的完整排障
运维·elasticsearch·docker·中文分词·ik分词
小白的码BUG之路21 小时前
Jenkins -- gitee+docker+harbor+k8s 部署项目
docker·gitee·jenkins
AlfredZhao21 小时前
Docker Compose 平滑切换环境变量文件,容器配置不残留
docker
duansamve2 天前
Python3+Flask+PostgreSQL18+Vue3项目生产环境用docker如何部署?
python·docker·flask
mengge.cloud2 天前
prometheus+k8s+弹性伸缩,综合项目
云原生·容器·kubernetes·prometheus
xbzb2 天前
从零容器化部署 ECShop:Harbor 私有仓库 + 自定义 PHP 镜像 + LNMP 三容器
容器·php·harbor·镜像·仓库·ecshop
那明眸似水2 天前
云原生项目三:Docker秒级启动NextCloud个人网盘存储办公系统
linux·运维·docker·云原生·容器
腾飞开源2 天前
03_Kubernetes 核心概念拆解:从 Spec/Status 收敛到工作负载控制器的设计逻辑
云原生·容器·kubernetes
知已难寻2 天前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器