docker是一个虚拟环境容器,可以将开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。

镜像、容器、仓库

简单比喻版

docker的 logo已经很形象的体现镜像、容器和仓库的关系了。

镜像:货物。例如,java、nodejs、tomcat等环境配置可以比喻为货物。

容器:集装箱。装货物的箱子。把java、tomcat等环境装进容器。

仓库:码头。先从本地仓库找是否有需要的资源,若没有,则从远程仓库获取。

当pull或push时,相当于在运输资源。

完整枯燥版

镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。

容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

常用的docker命令

镜像命令

# 查看镜像
docker images

#查看所有镜像
docker images -a

# 删除镜像
docker rmi <镜像ID>
# 也可以这样删除镜像
docker image rm <镜像ID>

容器命令

# 运行容器(创建容器)
docker run -it <容器ID> /bin/bash

# 查看运行的容器
docker ps

# 查看所有容器
docker ps -a

# 删除容器
docker rm <容器ID>

# 进入容器
docker attach <容器ID>
docker exec <容器ID>

制作镜像

Dockerfile.dockerignore 两文件,一般都在项目根目录里

Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

栗子:

# 从dockerhub导入node环境
FROM node:18-alpine
# 安装pnpm全局变量
RUN npm install pnpm -g
# 工作目录/项目目录
WORKDIR /vmeet
# 复制当前目录的package.json到工作目录
COPY package.json .
# 运行pnpm下载安装package.json的依赖包
RUN pnpm install
# 复制当前目录所有文件到工作目录
COPY . .
#运行cmd命令符,数组格式,数组元素之间相当于空格隔开
CMD [ "pnpm","dev" ]

dockerignore

类似.gitingore,忽略制作镜像的文件

栗子:

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
.DS_Store
.dist
dist
dist-ssr
coverage
*.local

/cypress/videos/
/cypress/screenshots/

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

# docker
.dockerignore
Dockerfile

镜像加速

"registry-mirrors": [
		"https://docker.1panel.live",
		"https://registry.docker-cn.com",
		"https://docker.mirrors.ustc.edu.cn",
		"http://f1361db2.m.daocloud.io",
		"https://dockerhub.azk8s.cn",
		"https://reg-mirror.qiniu.com",
		"https://hub-mirror.c.163.com",
		"https://mirror.ccs.tencentyun.com"
	]