Docker起步
Docker起步
Docker安装
如果系统中存在旧的Docker,先进行卸载:
1 | yum remove docker \ |
然后重新安装Docker:
1 | yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
安装完毕,开启服务:
1 | # 开启服务 |
配置镜像加速:
1 | # 创建目录 |
镜像可能失效,可以访问Docker国内镜像源加速列表(7月24日更新)-腾讯云开发者社区-腾讯云获取最新镜像
创建MySQL容器
运行如下命令,MYSQL_ROOT_PASSWORD为数据库用户密码
1 | docker run -d \ |
注意:对外暴露的端口是3307,3306表示容器内部mysql的端口,相当于使用3307映射了内部的3306
镜像和容器
当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)
镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub Container Image Library | App Containerization

Docker核心
⭐Docker命令⭐
首先剖析之前创建MySQL容器的命令:
1 | docker run -d \ |
docker run:创建并运行一个容器,-d是让容器在后台运行--name mysql:给容器起个名称,并且该名称必须在Docker容器中是唯一的-p 3307:3306:设置端口映射(外部端口:内部端口)-e KEY=VALUE:设置环境变量mysql:8:指定运行的镜像的名字,版本(镜像名:版本号)
常见命令

docker ps -a可以查看全部的容器,包括未启动的
docker image ls可以查看当前存在的镜像
docker exec -it 容器名称 bash表示进入容器内部并通过bash终端进行操作
docker inspect 容器名称查看容器的详细名称
Docker数据卷挂载
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间**映射**的桥梁
操作命令:
| 命令 | 说明 | 文档地址 |
|---|---|---|
| docker volume create | 创建数据卷 | docker volume create |
| docker volume ls | 查看所有数据卷 | docker volume ls |
| docker volume rm | 删除指定数据卷 | docker volume rm |
| docker volume inspect | 查看某个数据卷的详情 | docker volume inspect |
| docker volume prune | 清除所有未使用的数据卷 | docker volume prune |
注意:在执行docker run命令时,使用-v数据卷:容器内目录形式可以完成数据卷挂载(数据卷不存在,会自动创建)
示例:
1 | docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html -v nginx_conf:/etc/nginx/nginx.conf nginx |
创建后的nginx容器,它的静态资源目录和配置目录都分别使用了html数据卷、nginx_conf这两个数据卷进行映射
本地目录挂载
命令:
1 | docker run -d --name 容器名 -p 宿主机端口:容器端口 -v 宿主机目录或文件:容器内目录或文件 镜像名 |
注意:
- 本地目录必须以 / 或 ./开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql:/var/lib/mysql会被识别为一个数据卷,数据卷叫mysql-v ./mysql:/var/lib/mysql会被识别为当前目录下的mysql目录
自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程
镜像的结构:

Dockerfile
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像
| 指令 | 说明 | 示例 |
|---|---|---|
| FROM | 指定基础镜像 | FROM centos:7 |
| ENV | 设置环境变量,可在后面指令使用 | ENV key=value |
| COPY | 拷贝本地文件到镜像的指定目录 | COPY ./jdk17.tar.gz /tmp |
| RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/jdk17.tar.gz |
| EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
| ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
示例:
1 | # 使用 CentOS 7 作为基础镜像 |
编写好了Dockerfile之后,可以利用如下命令创建镜像:
1 | docker build -t myImage:1.0 . |
-t:给镜像起名,格式镜像名:版本号(不指定版本号默认为latest).:是指Dockerfile所在目录,如果就在当前目录则指定为”.”
网络
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:

Docker的网络操作命令如下:
| 命令 | 说明 |
|---|---|
| docker network create | 创建一个网络 |
| docker network ls | 查看所有网络 |
| docker network rm | 删除指定网络 |
| docker network prune | 清除未使用的网络 |
| docker network connect | 使指定容器连接加入某网络 |
| docker network disconnect | 使指定容器连接离开某网络 |
| docker network inspect | 查看网络详细信息 |
默认的bridge网桥不支持容器名解析IP地址,需要自己创建网络(测试方式:进入容器,ping 容器名)
Docker项目部署
后端部署
- 需求:将Tlias系统打包为镜像并部署
- 步骤:
- 准备MySQL容器,并创建Tlias数据库以及表结构
- 准备java应用(Tlias项目)镜像,部署Docker容器,运行测试
- 修改Tlias项目的配置文件,修改数据库服务地址以及logback日志存放地址,打jar包
- 编写Dockerfile文件
- 构建Docker镜像
- 部署Docker容器
DockerCompose
DockerCompose通过一个单独的docekr-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署
格式:
1 | services: |

可以看出,虽然内容似乎比直接部署更多了,但是结构更加清晰、可读性也更强
针对之前项目部署的所有容器、镜像构建操作,都可以编写在一个docker-compose.yml文件中:
1 | services: |
DockerCompose目录
Docker Compose的命令格式:
docker compose [OPTIONS] [COMMAND]参数说明:
| 类型 | 参数或指令 | 说明 |
|---|---|---|
| Options | -f | 指定compose文件的路径和名称 |
| -p | 指定project名称 | |
| Commands | up | 创建并启动所有service容器 |
| down | 停止并移除所有容器、网络 | |
| ps | 列出所有启动的容器 | |
| logs | 查看指定容器的日志 | |
| stop | 停止容器 | |
| start | 启动容器 | |
| restart | 重启容器 | |
| top | 查看运行的进程 |