咖啡图片
正在将巧克力泡入咖啡
ntainer" style="display: none">
文章

Docker 简介

介绍 Docker 容器、镜像、Dockerfile、常用命令、数据卷和 Docker Compose 的基础用法

Docker 简介

Docker 是一种比较出名的容器技术,通过操作系统级虚拟化,将应用及其依赖打包成容器,实现 “一次构建,到处运行”;但在实现上不虚拟整个操作系统,只虚拟应用运行所需的库、依赖、配置文件等必要组件,并与宿主机共享操作系统内核,比虚拟机更轻量化。Docker 简单来说就是用容器化技术给应用程序封装独立的运行环境,每个运行环境就是一个容器,运行容器的计算机称为宿主机。镜像是容器的模板。每个 Docker 都运行在独立的虚拟环境中,容器的网络与宿主机是隔离的。

Dockerfile 用来以自动化的方式创建 image 镜像,通过镜像可以创建多个不同的 container 容器。

参考 Docker 安装 完成 Docker 的安装,完成后在终端输入 docker --version 能返回版本号说明安装成功。

下面是使用单个容器的基本操作

编写 Dockerfile 以定制镜像,第一行用 FROM 指定基础镜像。在 DockerHub 上提供了许多高质量的操作系统镜像,还有许多方便某种语言、某种框架开发的镜像。

例如:在一个项目工程下创建 Dockerfile,完成编写后使用 docker build 创建镜像,第一次 build 会比较慢

docker build -t image_name . # -t指定镜像名。.表示在当前目录寻找Dockerfile

完成后使用 docker run 启动容器

docker run -p 80:5000 -d --name docker_name image_name # -p将容器上的5000端口映射到主机上的80端口,这样才能从主机的浏览器访问容器中的web应用。-d是detached mode,表示让容器在后台运行,输出不会直接显示在控制台。--name指定容器名字。最后指定容器使用的镜像名

其它常用命令

docker ps -a					 		 # 列举所有的容器
docker ps								 # 列举正在运行中的容器
docker stop <container_ID> 		  		 # 停止容器
docker rm -f -v <container_ID> 		     # 强制删除运行中的容器,并同时删除volumn

docker images					  		 # 列举所有的镜像
docker rmi -f image_name			     # 强制删除被使用中的镜像

docker exec -it <container_ID> /bin/bash # 启动一个远程shell,用终端	方式访问正在运行的容器

删除容器时会删除其中的所有数据,如果希望保留,可以使用 volumn,这是一个在本地和不同容器中共享的文件夹。本地修改可以和容器中保持同步。有时需要声明某些文件夹不能同步,比如不能让本地的 node_modules 目录覆盖容器中的。有时还要让本地变为 readonly,这样容器中新增的文件和文件夹不同步到本地。

docker volumn create volumn_name # 创建数据卷
docker run -p 80:5000 -d -v volumn_name:/my_dir image_name # 启动容器时通过-v参数指定将数据卷挂载到容器的某个路径下

docker push 可以把制作好的镜像推送到 Docker Hub,docker pull 可以把 Hub 中的镜像拉取到本地。

下面是使用多个容器的操作,这需要用到 docker compos 技术。另外,docker compose 用 yaml 管理命令,避免了命令行输入长串命令的麻烦。并且一个 docker compose 还会自动创建一个子网。

创建 docker-compose.yml 文件,通过 services 来定义多个 container。完成编写后,下面是常用命令

docker compose up -d # 运行所有容器,不加--build表示下次会使用之前的缓存
docker compose up -d --build # 运行所有容器,且镜像有修改就会重建
docker compose stop # 停止但不删除容器
docker compose start # 启动暂停的容器
docker compose down # 停止并删除所有容器,新创建的数据卷需要手动删除
docker compose down -v # 停止并删除所有容器,并同时删除数据卷

参考资料

Docker 入门

Docker 镜像转存

本文由作者按照 CC BY 4.0 进行授权
/body>