一、核心概念
1、镜像:一个包含应用本身及应用运行所需的环境、配置、系统函数库的静态文件(静态概念)
2、容器:基于镜像运行得来的一个完全隔离互不影响的进程(动态概念)
3、镜像仓库
1)、远程仓库(Docker Hub)- 访问较慢,需配置镜像加速源
2)、本地仓库(Docker本地的)
二、基本命令
1、镜像
0)、搜索:docker search 镜像名称
1)、拉取:docker pull 镜像名称
2)、推送:docker push 镜像名称
3)、查看:docker images
4)、查看所有镜像ID:docker images -q
5)、删除:docker rmi 镜像名称
6)、删除所有:docker rmi docker images -q
7)、制作镜像:docker build -t 镜像名称 .
8)、导出镜像:docker save -o 镜像名称.tar 镜像名称
9)、加载镜像:docker load -i 镜像名称.tar
10)、容器转为镜像:docker commit 容器名称 镜像名称
2、容器
1)、查看所有:docker ps -a
2)、查看正在运行:docker ps
格式化查看,更清爽: docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
3)、删除:docker rm 容器名称
4)、强制删除:docker rm -f 容器名称
删除所有容器: docker rm -f $(docker ps -qa)
5)、创建容器:docker create -d --name=容器名称 -p 宿主机端口:容器内端口 镜像名称
6)、创建并运行容器:docker run -d --name=容器名称 -p 宿主机端口:容器内端口 镜像名称
7)、启动容器:docker start 容器名称
8)、停止容器:docker stop 容器名称
9)、重启容器:docker restart 容器名称
10)、暂停容器:docker pause 容器名称
12)、恢复容器:docker unpause 容器名称
13)、进入容器:docker exec -it 容器名称 /bin/bash
14)、查看容器信息:docker inspect 容器名称或者容器id
15)、创建容器相关设置
1)、自启动: --restart=always
2)、挂载数据卷: -v es-data:/usr/share/elasticsearch/data
3)、加入网络:--network es-net
5)、端口映射: -p 宿主机端口:容器内端口
16)、修改容器设置语法
docker update 相关设置 容器ID
如:修改容器不再自启动:docker update --restart=always 容器ID
17)、查看容器日志:docker logs -f 容器名称
三、数据卷
1、作用:使容器与数据进行解耦(可实现备份),也可实现容器与容器、宿主机与容器进行数据交互的效果
2、挂载方式:
1、数据卷(虚拟目录)挂载
docker run -d \
--name nginx \
-p 80:80 \
-v html:/usr/share/nginx/html \
nginx
2、绝对路径挂载
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/init/:/docker-entrypoint-initdb.d \
-v /root/mysql/conf/:/etc/mysql/conf.d \
-v /root/mysql/data/:/var/lib/mysql \
mysql
3、相关命令
docker volume
create 数据卷名称: 创建数据卷
ls: 查看所有数据卷
rm 数据卷名称: 删除数据卷
prune: 删除没用的数据卷
inspect 数据卷名称:: 查看某个数据卷详情
四、自定义镜像
1、镜像结构: 底层基础镜像 + 中间的Layer层 + 顶层的入口指令
2、Dockerfile:用来描述镜像构建过程的指令文件(FROM\COPY\RUN\EXPOSE\ENTRYPOINT)
3、命令:docker build -t 镜像名称 . 【备注: .代表当前目录】
4、示例:
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
五、网络
1、作用:用于容器间进行数据通信的,使用容器名通信即可!
2、命令
docker network
create:创建一个网络
ls: 查看所有网络
rm:删除指定网络
prune:清除未使用的网络
inspect:查看网络详细信息
connect:使指定容器连接加入某网络
disconnect:使指定容器连接离开某网络
六、项目部署
1、原生docker方式部署
1)、安装软件
2)、部署后端
1-项目打jar包并上传至linux
2-为当前java项目编写dockerfile
3-基于dockerfile和jar包构建镜像
4-基于镜像创建并运行容器、注意网络
docker run -d \
--name hmall \
-p 8080:8080 \
--network hmall \
hmall
3)、部署前端
1-准备好前端资源- html
2-准备好nginx的配置文件
3-将上述资源上传到linux
4-创建并运行容器 - 进行linux资源的挂载、注意网络
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network hmall \
nginx
2、docker compose方式部署
1、将所有容器所需的数据准备好
2、编写好docker compose文件
3、运行docker compose文件
创建并运行所有容器:docker compose up -d
停止并销毁所有容器: docker compose down
启动所有容器:docker compose start
停止所有容器:docker compose stop