基本概念
Docker是一个用于 构建 运行 传送 应用程序的平台
Docker和虚拟机的区别
虚拟机
虚拟机是完整的操作系统,是通过虚拟化完成的
Docker
Docker并不需要一个完整的操作系统,而是使用宿主机的操作系统,所以启动非常快,同时因为需要的资源更少,所以可以在一台物理服务器上运行更多的容器
安装配置
下载Docker Docker Desktop: The #1 Containerization Tool for Developers | Docker
然后双击你下载的文件
输入指令
docker version
启动完成
注意:如果你只能看到Client,而没有Server说明docker没有启动
win11安装教程建议看:【Docker】掌握 Docker魔法:Windows 11 平台上的完美容器部署终极指南_win11安装docker-CSDN博客这位大佬写的
容器化
- 创建一个Dockerfile
- 使用Dockerfile构建镜像
- 使用镜像创建和运行容器
快速入门
部署mysql
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
解读
-
docker run -d
:创建并运行一个容器,-d
则是让容器以后台进程运行 -
--name
mysql
: 给容器起个名字叫mysql
,可以叫别的 -
-p 3306:3306
: 设置端口映射。-
容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
-
容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
-
格式:
-p 宿主机端口:容器内端口
,示例中就是将宿主机的3306映射到容器内的3306端口
-
-
-
e
TZ=Asia/Shanghai
: 配置容器内进程运行时的一些参数-
格式:
-e KEY=VALUE
,KEY和VALUE都由容器内进程决定 -
案例中,
TZ=Asia/Shanghai
是设置时区;MYSQL_ROOT_PASSWORD=123
是设置MySQL默认密码
-
-
mysql
: 设置镜像名称,Docker会根据这个名字搜索并下载镜像-
格式:
REPOSITORY:TAG
,例如mysql:8.0
,其中REPOSITORY
可以理解为镜像名,TAG
是版本号 -
在未指定
TAG
的情况下,默认是最新版本,也就是mysql:latest
-
Docker基础
常见命令
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
拉取镜像
docker pull 镜像名称
删除本地镜像
docker rmi 镜像名称
查看本地镜像
docker images
创建并运行容器
docker run
删除容器
docker rm [-f] 容器名
设置容器的开机自启
docker update --restart=always 容器名称
-f:强制删除
保存镜像到本地压缩文件
docker save -o 文件名 镜像名:latest
latest: 是指版本 这个不能缺少
加载本地压缩文件到镜像
docker load
查看日志
docker logs [ -f ] 容器名
-f: 持续输出日志,相当于监听端口
进入容器内部
docker exec -it 容器名 bash
-it:添加一个可交互的终端
数据卷
数据卷是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁
常用命令
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷的详情 |
docker volume prune | 清除数据卷 |
注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建。
提示:
- 在执行docker run命令时,使用-v 数据卷:容器内目录 可以完成数据卷的挂载
- 在创建容器时,如果挂在了数据卷且数据卷不存在,会自动创建数据卷
容器挂载
docker inspect 容器名
查询容器的详细信息
容器的本地目录挂载
- 在执行docker run命令时,使用 -v 本地目录:容器内目录 可以完成本地目录的挂载
- 本地目录必须以 "/" 或 "./"开头,如果直接以名称开头,会被识别为数据卷而非本地目录
- -v mysql:/var/lib/mysql 会被识别为一个数据卷叫mysql
- -v ./mysql:/var/lib/mysql 会被识别为当前目录下的mysql目录
自定义镜像
没学会。。。。。
容器网络
容器的网络IP其实是一个虚拟的IP,其值并不固定与某一个容器绑定,如果我们在开发时写死某个IP,而在部署时很可能MySQL容器的IP会发生变化,连接会失败。
命令 | 说明 |
---|---|
docker network create | 创建一个网络 |
docker network ls | 查看所有网络 |
docker network rm | 删除指定网络 |
docker network prune | 清除未使用的网络 |
docker network connect | 使指定容器连接加入某网络 |
docker network disconnect | 使指定容器连接离开某网络 |
docker network inspect | 查看网络详细信息 |
创建容器的时候加入网络
docker run -d --name my -p 3307:3306 --network 网络名 镜像
注意: 这样创建的容器是没有默认网桥的