【基础工具】Docker基础功能
Last updated on February 22, 2024 am
Docker介绍
Docker 是一个应用打包、分发、部署的工具,也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。
特性 | 普通虚拟机 | Docker |
---|---|---|
跨平台 | 通常只能在桌面级系统运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行 | 支持的系统非常多,各类 windows 和 Linux 都支持 |
性能 | 性能损耗大,内存占用高,因为是把整个完整系统都虚拟出来了 | 性能好,只虚拟软件所需运行环境,最大化减少没用的配置 |
自动化 | 需要手动安装所有东西 | 一个命令就可以自动部署好所需环境 |
稳定性 | 稳定性不高,不同系统差异大 | 稳定性好,不同系统都一样部署方式 |
Docker 主要功能
- 打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
- 分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装
- 部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在 Windows/Mac/Linux。
Docker 用途介绍
- 应用分发、部署,方便传播给他人安装。特别是开源软件和提供私有部署的应用
- 快速安装测试/学习软件,用完就丢(类似小程序),不把时间浪费在安装软件上。例如 Redis / MongoDB / ElasticSearch / ELK
- 多个版本软件共存,不污染系统,例如 Python2、Python3,Redis4.0,Redis5.0
- Windows 上体验/学习各种 Linux 系统
Docker主要概念
- 镜像:可以理解为软件安装包,可以方便的进行传播和安装。
- 容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。
- 简单来说就是我们存储上传镜像,通过镜像生成容器,镜像可以在docker hub中进行管理
Docker的安装
版本的安装
- 桌面版:https://www.docker.com/products/docker-desktop
- 服务器版:https://docs.docker.com/engine/install/#server
镜像加速源
镜像加速器 | 镜像加速器地址 |
---|---|
Docker 中国官方镜像 | https://registry.docker-cn.com |
DaoCloud 镜像站 | http://f1361db2.m.daocloud.io |
Azure 中国镜像 | https://dockerhub.azk8s.cn |
科大镜像站 | https://docker.mirrors.ustc.edu.cn |
阿里云 | https://ud6340vz.mirror.aliyuncs.com |
七牛云 | https://reg-mirror.qiniu.com |
网易云 | https://hub-mirror.c.163.com |
腾讯云 | https://mirror.ccs.tencentyun.com |

加入以下命令:=="registry-mirrors": ["https://registry.docker-cn.com, https://hub-mirror.c.163.com"]==
Docker镜像下载与软件安装
Docker 安装的优点
- 一个命令就可以安装好,快速方便
- 有大量的镜像,可直接使用
- 没有系统兼容问题,Linux 专享软件也照样跑
- 支持软件多版本共存
- 用完就丢,不拖慢电脑速度
- 不同系统和硬件,只要安装好 Docker 其他都一样了,一个命令搞定所有
Docker 安装 Redis
Docker 官方镜像仓库查找 Redis :https://hub.docker.com/
找到如下的命令:
1 |
|
- --name的意思就是为产生的容器命名,比如这里命名为some-redis
- -d的意思是在后台运行
- 执行docker run就能立刻 pull镜像、生成容器、以及运行容器
Docker安装ubuntu

首先先从远端拉取镜像,可以指定版本或者是最新的版本
接着本地进行run
1 |
|
Docker参考文档
命令参考:https://docs.docker.com/engine/reference/commandline/run/
Docker的常见命令
docker run
运行一个容器(-d后台运行、--name重命名container)docker stop
停止运行一个容器docker ps
列出正在运行的容器docker ps -a
列出所有的容器docker rm
删除某个容器docker exec
(-itmycontainer
/bin/sh)进入某一个容器;docker exit
退出某个容器docker stop container-id
停止指定 id 的容器docker start container-id
启动某个id容器docker images
查看镜像列表docker rm container-id
删除指定 id 的容器docker rmi image-id
删除指定 id 的镜像docker volume ls
查看 volume 列表docker network ls
查看网络列表docker-compose up
表示的意思是在docker-compose.yml的文件夹所在的位置运行如下docker-compose up -d
后台运行只需要加一个 -d 参数docker-compose ps
查看运行状态docker-compose stop
停止运行docker-compose
重启docker compose的服务docker-compose restart service-name
重启单个服务docker-compose exec service-name sh
进入容器命令行
Docker创建镜像
Dockerfile
是用于创建自定义Docker镜像的文件,其主要作用包括配置文件、挂载点、对外暴露的端口和设置环境变量
容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果删除了容器,也就删除了其最上面的读写层,文件改动也就丢失了。Docker使用存储驱动管理镜像每层内容及可读写层的容器层。
Dockerfile 操作常用指令
FROM 镜像
指定新镜像所基于的基础镜像,第一条指令必须为FROM 指令,每创建一个镜像就需要一条 FROM 指令
1
2#指定了go的镜像:这个时候会从网上下载
FROM golang:1.20-alpineMAINTAINER 名字
说明新镜像的维护人信息
1
2#指定维护者的信息
LABEL maintainer="XXXXX@gmail.com"WORKDIR 路径 为后续的 RUN、CMD、ENTRYPOINT 指定工作目录
这里定义的目录相当于是在docker的文件夹下定义新的目录并会将本地的文件内容上传上去
1
2# 定义工作目录
WORKDIR /Workspace/ApiServiceRUN 命令
在所基于的镜像上执行命令,并提交到新的镜像中
1
2#编译应用程序
RUN go build -o api_service main.goCMD ["要运行的程序", "参数1", "参数2"]
Dockerfile只能有一条CMD命令。如果指定多条命令,只执行最后一条命令。
1
2# 运行应用程序
CMD ["./api_service"]EXPOSE 端口号
指定新镜像加载到 Docker 时要开启的端口
1
2# 暴露端口
EXPOSE 8080ENV 环境变量 变量值
设置一个环境变量的值,会被后面的 RUN 使用
1
2
3# 设置环境变量
ENV BUILD_ENV local
ENV TZ=Asia/Shanghai #容器内部的时间设置与上海所在的时区一致ADD 源文件/目录 目标文件/目录
将源文件复制到镜像中,源文件要与
Dockerfile
位于相同目录例子本地的文件在
/Workspace/ApiService
中,这个时候会将本地的/Workspace/ApiService
目录下所有的文件送到docker
中的/Workspace/ApiService/docker
中1
2
3
4WORKDIR /Workspace/ApiService
ADD docker .
#ADD . . #这里表示相同文件夹目录直接复制VOLUME [“目录”] 在容器中创建一个挂载点
Build镜像并运行
构建dockerfile镜像并运行
要运行 Dockerfile 文件,需要使用 Docker 工具。Docker 可以在不同的操作系统上运行,包括 Windows、macOS 和各种 Linux 发行版。以下是一些运行 Dockerfile 的步骤:
- 安装 Docker 工具
在官网上下载并安装 Docker
工具,根据你的操作系统选择对应版本。安装完成后,可以在终端中运行
docker
命令来检查是否安装成功。
- 进入 Dockerfile 所在目录
打开终端,进入 Dockerfile 所在目录。可以使用
cd
命令切换目录。
- 构建 Docker 镜像
使用以下命令构建 Docker 镜像:
1 |
|
其中 -t
参数用于指定镜像的名称,.
表示 Dockerfile
所在目录。执行该命令后,Docker 会根据 Dockerfile
文件中的指令创建镜像。
- 运行 Docker 容器
使用以下命令运行 Docker 容器:
1 |
|
其中 -p
参数用于指定主机端口和容器端口的映射关系,<镜像名称>
是在第 3 步中指定的镜像名称。执行该命令后,Docker
会在后台启动一个容器,并将容器的标准输出输出到终端中。如果 Dockerfile
中没有指定端口,需要在运行容器时指定 -p
参数,并将容器端口映射到主机上的一个端口。否则,容器会启动失败。
-d
表示的当前的容器可以在后台运行
--name
表示给指定的容器起个名字,否则会随机生成名字
停止docekr容器
使用如下命令停止:
1 |
|
其中,<container-id>
是要停止的容器的 ID。可以使用以下命令查看正在运行的容器列表:
1 |
|
如果要停止所有容器,可以使用以下命令:
1 |
|
其中,docker ps -aq
命令用于列出所有容器的 ID。
Scratch最小镜像
使用scratch
镜像时,确保应用程序是静态的可执行文件或者不需要额外的操作系统层,这样可以最大程度地减少镜像的大小
我们这里给出一个例子
首先在创建一个最小的镜像的时候需要一个应用程序,这个程序可以通过dockerfile生成或者是从其他地方引入,那么这里给出一个golang
镜像构建应用程序api_service
1 |
|
接着第二阶段就建一个最小的轻量级的docker镜像,首先需要按照构建镜像的基本步骤确定工作目录,环境变量、端口等信息,接着通过从已经编译好的环境中获取应用程序,最后执行程序
1 |
|
写好dockerfile之后就可以构建并运行了
1 |
|
注意:通过这个方式只会产生一个scratch镜像,仅包含一个应用程序
Docker-Compose
如果项目依赖更多的第三方软件,我们需要管理的容器就更加多,每个都要单独配置运行,指定网络。使用
docker-compose
把项目的多个服务集合到一起,一键运行。要把项目依赖的多个服务集合到一起,我们需要编写一个docker-compose.yml
文件,描述依赖哪些服务
Wordpress安装
在dockerhub在安装wordpress的时候,所需要的服务非常多,所以需要把项目依赖的多个服务集合到一起
1 |
|
首先编写一个:docker-compose.yml
接着在docker-compose.ym==l文件所在的位置==执行:docker-compose up
就可以了
注意:执行完docker-compose up之后就已经生成容器并已经成功run起来了