Docker基本使用
一、安装
参考黑马程序员的讲义
安装Docker - 飞书云文档
二、原理
去docker的镜像仓库中下载镜像到本地镜像,通过本地镜像复制到容器中,每个容器都是独立的。

三、docker run

其中-e的环境变量去docker hub官网中查对应镜像的介绍中,environment的一项中有写

四、docker常见命令

命令 | 说明 | 文档地址 |
|---|---|---|
docker pull | 拉取镜像 | |
docker push | 推送镜像到DockerRegistry | |
docker images | 查看本地镜像 | |
docker rmi | 删除本地镜像 | |
docker run | 创建并运行容器(不能重复创建) | |
docker stop | 停止指定容器 | |
docker start | 启动指定容器 | |
docker restart | 重新启动容器 | |
docker rm | 删除指定容器 | |
docker ps | 查看容器 | |
docker logs | 查看容器运行日志 | |
docker exec | 进入容器 | |
docker save | 保存镜像到本地压缩文件 | |
docker load | 加载本地压缩文件到镜像 | |
docker inspect | 查看容器详细信息 |
# 设置容器开机自启 docker update --restart=always [容器名/容器id] # Docker开机自启 systemctl enable docker五、设置命令别名
当我们有的命令太长了,我们可以考虑使用这个方式
修改/root/.bashrc文件

记得保存后要source该文件
六、数据卷
1.体系结构
day02-Docker - 飞书云文档
数据卷类似Vue的挂在,容器和宿主机的文件是同步增删的。

2.常用命令
命令 | 说明 | 文档地址 |
|---|---|---|
docker volume create | 创建数据卷 | |
docker volume ls | 查看所有数据卷 | |
docker volume rm | 删除指定数据卷 | |
docker volume inspect | 查看某个数据卷的详情 | |
docker volume prune | 清除数据卷 |
# 首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷 docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx # 查看数据卷 docker volume ls # 查看数据卷详情 docker volume inspect html # 进入容器内部 docker exec -it nginx bash挂载示例
容器要挂载哪些目录,你看你常用哪些,就在官方文档查哪些的路径,挂就完了
# 创建并运行新mysql容器,挂载本地目录 docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ -v ./mysql/data:/var/lib/mysql \ -v ./mysql/conf:/etc/mysql/conf.d \ -v ./mysql/init:/docker-entrypoint-initdb.d \ mysql七、自制镜像
1.体系结构
我们要从0部署一个Java应用,大概流程是这样:
- 准备一个linux服务(CentOS或者Ubuntu均可)
- 安装并配置JDK
- 上传Jar包
- 运行jar包
那因此,我们打包镜像也是分成这么几步:
- 准备Linux运行环境(java项目并不需要完整的操作系统,仅仅是基础运行环境即可)
- 安装并配置JDK
- 拷贝jar包
- 配置启动脚本

2.dockerfile镜像打包常用命令
指令 | 说明 | 示例 |
|---|---|---|
FROM | 指定基础镜像 |
|
ENV | 设置环境变量,可在后面指令使用 |
|
COPY | 拷贝本地文件到镜像的指定目录 |
|
RUN | 执行Linux的shell命令,一般是安装过程的命令 |
|
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
通常打包Linux和jdk这种每个项目都要做的功能都有别人为我们整合好的Layer
八、网络
容器的网络IP其实是一个虚拟的IP,其值并不固定与某一个容器绑定,如果我们在开发时写死某个IP,而在部署时很可能MySQL容器的IP会发生变化,连接会失败。
所以我们需要自定义一个网络,直接根据容器名进行访问而不是ip,容器名不会变
命令 | 说明 | 文档地址 |
|---|---|---|
docker network create | 创建一个网络 | |
docker network ls | 查看所有网络 | |
docker network rm | 删除指定网络 | |
docker network prune | 清除未使用的网络 | |
docker network connect | 使指定容器连接加入某网络 | |
docker network disconnect | 使指定容器连接离开某网络 | |
docker network inspect | 查看网络详细信息 |