提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、Docker 基本概念
- 镜像 (Image):Docker镜像是一个轻量、独立、可执行的软件包,它包含了运行某个应用程序所需要的所有环境,包括代码、运行时、库和配置文件。镜像是不可变的,通常从Docker Hub 等镜像仓库获取。
- 容器(Container):容器是镜像的一个运行实例。容器可以看作是一个轻量级、独立的虚拟机。它运行一个单一的应用程序或服务,具有自己的文件系统、CPU、内存、进程空间等。
- Dockerfile:这是一个文本文件,包含了创建 Docker 镜像的指令。Docker 读取 Dockerfile并根据其内容构建镜像。
- Docker Hub:这是一个云服务,用于存储和分发 Docker 镜像。你可以在 Docker Hub上搜索和下载公开的镜像,也可以将自己的镜像推送到 Docker Hub。
- 好处:开发人员可以更加快速的构建环境。用于解决平时环境搭建,环境测试,集群测试,环境不同等问题。同时运维人员可以更加方便的进行扩展和管理应用程序。而且Docker所带来的隔离性对部署的环境也更加安全。
- 为什么说Docker安全:Docker利用Linux内核命名空间和控制组功能来实现容器之间的隔离性。每个容器都有自己的文件系统,进程,网络等。与主机隔离从而减少攻击。其次轻量级意味这运行更快,资源消耗更低,同时减少了表面攻击。其次Docker提供了签名和验证的机制,确保镜像的完整性和来源可信性。
通俗来说(自己的理解):Docker就是一个大箱子,每个项目都有自己的环境配置,比如mysql,A项目是用8版本的,B项目是用5版本的,那么本机可能不会去下载两个版本。这个时候可以通过Docker来实现双版本,只要编写了Dockerfile和yml文件,就可以直接丢进Docker里面运行,这也是Docker的方便之处,如图是流程图:
二、Docker的指令
-
docker run:运行一个新的容器。例如:docker run -d -p 80:80 nginx
这个命令从 Docker Hub 拉取 nginx 镜像,并在后台运行一个新的容器,映射本地主机的端口 80 到容器的端口 80。 -
docker ps:列出当前正在运行的容器。
-
docker images:列出本地存储的所有 Docker 镜像。
-
docker build:从 Dockerfile 构建一个镜像。docker build -t myimage:latest .
-
docker pull:从仓库拉取一个镜像。docker pull nginx
-
docker push:将本地镜像推送到远程仓库。docker push myusername/myimage:latest
-
docker stop:停止一个运行中的容器。docker stop container_id
-
docker rm:删除一个停止的容器。docker rm container_id
三、怎么利用Docker运行一个github的开源项目
可能有些人都不知道怎么运行一个github项目,作者也是经常弄错环境,那有了docker之后,这个问题就很好解决了。总得来说,就是在github上面down了一个项目下来之后,去编写两个文件,一个是dockerfile文件,一个是docker-compose.yml文件,编写完成之后再去终端输入指令:docker-compose up,这个时候就会自动去pull对应的服务镜像了。
步骤
- 下载项目:从 GitHub 克隆或下载项目。
- 编写 Dockerfile:定义如何构建应用程序的 Docker 镜像。
- 编写 docker-compose.yml:定义和配置所有需要的服务(例如,数据库和应用程序)。
- 构建和启动容器:使用 Docker Compose 构建并启动所有服务。
- 访问和使用应用程序:通过浏览器或其他客户端访问运行中的应用程序。
- dockerfile
# 选择基础镜像
FROM node:14
# 设置工作目录
WORKDIR /app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制项目文件
COPY . .
# 暴露应用程序的端口(根据实际项目的需要修改)
EXPOSE 8000
# 启动应用程序(根据实际项目的启动命令修改)
CMD ["npm", "start"]
- docker-compose up.yml
version: '3.1'
services:
db:
image: mysql:8
container_name: mysql8-container
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
MYSQL_DATABASE: projectdb
MYSQL_USER: projectuser
MYSQL_PASSWORD: projectpass
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
app:
build: .
container_name: project-app
ports:
- "8000:8000"
depends_on:
- db
environment:
DB_HOST: db
DB_USER: projectuser
DB_PASSWORD: projectpass
DB_NAME: projectdb
volumes:
db_data:
总结
此博客只用于纯新手简单了解Docker,以及作者自学的笔记,大神轻喷,感谢!