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"]
相关推荐
_院长大人_4 小时前
Docker Mysql 数据迁移
mysql·adb·docker
qq_448941088 小时前
10、k8s对外服务之ingress
linux·容器·kubernetes
野猪佩挤8 小时前
minio作为K8S后端存储
云原生·容器·kubernetes
drebander8 小时前
Docker 与 Kubernetes(K8s)初探
docker
ccmjga12 小时前
升级 SpringBoot3 全项目讲解 — Spring Boot 3 中如何发Http请求?
java·spring boot·后端·docker·gradle·springboot·spring security
福大大架构师每日一题15 小时前
6.4 k8s的informer机制
云原生·容器·kubernetes
CarryBest17 小时前
搭建Kubernetes (K8s) 集群----Centos系统
容器·kubernetes·centos
曹天骄17 小时前
Docker Compose Installation on CentOS 7.9
docker·eureka·centos
wgslucky18 小时前
docker 安装jenkins
docker·容器·jenkins
Karoku06618 小时前
【CI/CD】持续集成及 Jenkins
运维·ci/cd·docker·云原生·容器·kubernetes·jenkins