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或者应用程序需要的所有工具,是一个最小的操作系统环境。

一些镜像已经预装了特定的应用程序或框架,例如 nodepythonnginx 等。使用这些镜像可以方便地在其基础上开发相应的应用程序。

复制代码
# 使用 Ubuntu 作为基础镜像
FROM ubuntu:20.04

# 安装一些依赖
RUN apt-get update && apt-get install -y python3

# 复制应用程序代码
COPY . /app

# 设置工作目录
WORKDIR /app

# 指定容器启动时执行的命令
CMD ["python3", "app.py"]
相关推荐
小醉你真好22 分钟前
17、Centos9 安装 1Panel
linux·docker·运维开发
跟着珅聪学java3 小时前
Eureka 客户端状态为 DOWN 的解决方案
云原生·eureka
明灯L5 小时前
《Kubernetes 集群搭建全指南:从核心概念到环境部署!》
云原生·容器·kubernetes
insight^tkk5 小时前
【Docker】记录一次使用docker部署dify网段冲突的问题
运维·人工智能·docker·ai·容器
江湖人称小鱼哥5 小时前
WSL + Docker 网络访问详解
网络·docker·容器·wsl
韩宏伟5 小时前
使用 Loki + Promtail + Grafana 实现 Docker 容器日志采集与可视化
docker·容器·grafana
荣光波比6 小时前
K8S(十五)—— 企业级K8s集群管理实践:Rancher安装配置与核心功能实操
容器·kubernetes·rancher
JanelSirry7 小时前
微服务是不是一定要容器化(如 Docker)?我该怎么选
docker·微服务·架构
小屁不止是运维7 小时前
k8s问题详解1:k8s集群上传文件过大导致413 Request Entity Too Large(请求文件实体过大)
docker·容器·kubernetes
聆风吟º8 小时前
无需 VNC / 公网 IP!用 Docker-Webtop+cpolar,在手机浏览器远程操控 Linux
linux·运维·docker