一、Docker概述
什么是Docker?
Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。更重要的是容器性能开销极低。
Docker直译过来为"搬运工",就是搬运集装箱Container,Container可以装载任意类型的App,开发人员可以通过Docker将App变成一种标准化的,可移植的,自管理的组件,我们可以在任意主流操作系统中开发,调试和运行。
可以简单理解为一个轻量级的虚拟机,只虚拟所需要的运行环境,其他多余软件之类一概不要。
总结 : docker 是一种容器技术,解决软件跨环境迁移的问题。
功能
打包:可以将软件运行所需依赖,第三方库,软件打包到一块,变成一个安装包。(后面会演示)
分发:可以把你打包好的**"安装包"上传到一个镜像仓库,其他人可以非常方便的获取和安装**
部署:拿着**"安装包"就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境**
二、Docker 架构
Docker 使用客户端-服务器架构,其中包括多个关键组件,确保容器化应用的高效构建、管理和运行。
Docker客户端 (client) 与 守护进程 (Docker daemon)进行对话,该守护进程 完成了构建、运行和分发 Docker 容器的繁重工作。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
仓库( Repository ): 是 docker 提供的一个用来保存镜像的仓库。
镜像( Image ) : 镜像就是一个可执行的包 , 用来创建容器 ,docker中每每一个软件就是一个镜像。
容器( Container ): 容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

Docker 架构的工作流程
- 构建镜像 :使用
Dockerfile
创建镜像。 - 推送镜像到注册表:将镜像上传到 Docker Hub 或私有注册表中。
- 拉取镜像 :通过
docker pull
从注册表中拉取镜像。 - 运行容器:使用镜像创建并启动容器。
- 管理容器:使用 Docker 客户端命令管理正在运行的容器(例如查看日志、停止容器、查看资源使用情况等)。
- 网络与存储:容器之间通过 Docker 网络连接,数据通过 Docker 卷或绑定挂载进行持久化。
三、Docker安装
笔者这里使用VMware创建虚拟机(CentOS 8)安装Docker,同时使用FinalShell工具通过SSH连接。
1.更新yum源
CentOS8已经停止维护,可能会出现错误,只要更换/etc/yum.repos.d目录下的源为可用源
2.安装yum-utils,配置镜像源
bash
yum install -y yum-utils
3.设置更新镜像源
bash
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装
bash
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
5.检查版本
bash
docker -v

如图即为安装成功
6.常用启动命令
启动命令
bash
systemctl start docker
关闭命令
bash
systemctl stop docker
设置开机自动启动
bash
systemctl enable docker
7.配置镜像
在etc目录下创建docker目录
bash
mkdir -p /etc/docker
进入该目录创建daemon.json配置
bash
touch daemon.json
修改文件
bash
vim daemon.json
bash
{
"registry-mirrors": [
"https://mirror.aliyuncs.com",
"https://mirror.ccs.tencentyun.com",
"https://mirror.baidubce.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://docker.m.daocloud.io",
"https://6ddblrw4.mirror.aliyuncs.com",
"https://<cloudflare-accelerator-url>"
]
}
这是一些镜像
Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
- 科大镜像:https://docker.mirrors.ustc.edu.cn/
- 网易:https://hub-mirror.c.163.com/
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
- 七牛云加速器:https://reg-mirror.qiniu.com
当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。
8.重载配置启动
重载配置
bash
systemctl daemon-reload
重启
bash
systemctl restart docker
四、Docker服务命令
1.镜像命令
bash
镜像列表
docker images
删除本地镜像
docker rmi 镜像名/镜像id
从docker仓库拉取镜像到本地仓库
docker pull
从dockerfile构建镜像
docker build
保存镜像到本地,生成tar文件
docker save
载入本地镜像
docker load
推送镜像到服务器
docker push
2.容器命令
bash
1.查看所有容器
docker ps -a
2.停止容器
docker stop 容器名/容器id
3.删除容器
docker rm 容器名/容器id
4. 启动容器
docker start 容器名/容器id
5.创建一个新的容器并运行
docker run 镜像名/镜像id

镜像和容器
镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。
五、Docker安装服务
安装mysql
1.下载镜像
bash
docker pull 镜像名:版本号
docker pull mysql:8.0.33
2.安装
bash
docker run -d -p 3306:3306 \
--name mysql \
--restart=always \
--privileged=true \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.33
--name:指定容器名称
--restart=always 自动启动
--privileged=true 拥有特权
-p:指定端口映射
-d:让容器后台运行
3.进入容器
bash
docker exec -it 容器名/容器id bash
4.登录mysql
bash
mysql -uroot -proot

5.修改root账号加密方式
bash
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
这一步开始,就可以从可视化数据库客户端登录访问了
IP为虚拟IP地址

6.退出
bash
exit
安装Nginx
1.下载镜像
bash
不指定版本号默认最新
docker pull nginx:1.24
2.安装
bash
docker run -d -p 80:80 \
--name nginx \
--restart=always \
--privileged=true \
nginx:1.24
3.访问
虚拟IP:80
进入容器内部,容器内部部署项目的目录为 /usr/share/nginx/html
bash
docker exec -it nginx bash
bash
cd /usr/share/nginx/html
此时又有新的问题,如果我们想将自己的前端项目部署到容器中,
或者修改容器内的文件会很不方便.
这时需要在外部配置一个数据卷挂载文件.
数据卷挂载
数据卷,即一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据。
在执行docker run命令时,使用-v数据卷:容器内目录可以完成数据卷挂载。
创建数据卷
bash
mkdir -p /opt/nginx/html
安装
bash
docker run -d -p 80:80 \
--name nginx \
--restart=always \
--privileged=true \
-v /opt/nginx/html:/usr/share/nginx/html \
nginx:1.24
其中 -v /opt/nginx/html 就是与容器中对应的一个在宿主机中的数据卷
我们只需要将文件部署到宿主机的/opt/nginx/html目录下即可
安装Tomcat/Redis
参考菜鸟教程,包学包会。
菜鸟教程
六、自定义镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改,使用 Dockerfile 指令来创建一个新的镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | java:8 |
ADD | 拷贝本地文件到镜像的指定目录 | /demo.jar demo.jar |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT /CMD | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
示例
1.将我们的springboot项目打包news.jar
- 在linux中创建一个文件夹用来存放Dockerfile和jar包
bash
mkdir /opt/news
3.将springboot打包后的jar文件上传到news目录中
4.创建一个名为Dockerfile的文件
bash
FROM openjdk:8-jre
ADD /news.jar news.jar
EXPOSE 8088
CMD java -jar news.jar
5.使用命令将dockerfile中配置的内容生成一个镜像
bash
docker build -t news .
6.运行自定义镜像
bash
docker run -d -p 8088:8088 \
--name news8088 \
--restart=always \
news
7.访问
IP:8088
8.将自定义镜像下载到本地
进入要保存的目录,输入以下命令
bash
docker save news > news.tar
9.载入本地镜像
bash
docker load < news.tar

相关参考链接
1.菜鸟教程:Docker 教程 | 菜鸟教程 (runoob.com)
2.Docker官网:https://www.docker.com
3.csdn大神解读:Docker入门教程(非常详细)从零基础入门到精通,看完这一篇就够了