Docker常用命令
1.1 基础命令
systemctl start docker --启动docke
systemctl stop docker --关闭docker
systemctl restart docker --重启docker
systemctl enable docker --docker设置随服务启动而自启动
systemctl status docker --查看docker 运行状态
docker version --查看docker 版本号信息
docker info --查看docker详细信息
docker --help --查看docker帮助信息
docker pull [optins] 拉取架包
镜像命令
2.1 搜索镜像
docker search 镜像名 --搜索具体的镜像名
docker search --filter=STARS=9000 mysql --搜索 STARS >9000的 mysql 镜像
2.2 拉取镜像
docker pull 镜像名 -- 拉取指定的镜像
docker pull 镜像名:tag --加上tag表示拉取指定版本的镜像
不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本
docker run 镜像名 --运行镜像
docker run 镜像名:Tag --运行指定版本的镜像
例:docker pull tomcat
例:docker run tomcat
2.3 删除镜像
docker rmi -f 镜像名/镜像ID --删除一个
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID --删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f $(docker images -aq) --删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker image rm 镜像名称/镜像ID --删除镜像
2.4 保存镜像
:::info
将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像
:::
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
例:docker save tomcat -o /myimg.tar
2.5 加载镜像
--任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像
docker load -i 镜像保存文件位置
docker tag 原容器id 新容器名:版本号 --然后通过tag打标签
容器命令
3.1 容器命令
docker ps --查看正在运行容器列表
docker ps -a --查看所有容器 -----包含正在运行 和已停止的
3.2 运行容器
参数
-it 表示 与容器进行交互式启动
-d 表示可后台运行容器 (守护式运行)
--name 给要运行的容器 起的名字
/bin/bash 交互路径
docker run -it --name 要取的别名 镜像名:Tag /bin/bash
例:例如我们要启动一个redis 把它的别名取为redis001 并交互式运行 需要的命令 —我这里指定版本号为5.0.5
(1)拉取redis 镜像
docker pull redis:5.0.5
(2)执行命令
docker run -it --name redis001 redis:5.0.5 /bin/bash
(3)查看运行的容器
docker ps
3.3 停止容器
docker stop 容器名/容器ID
3.4 删除容器
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
3.5 容器端口与服务器端口映射
-p 宿主机端口:容器端口 (注意是小写的p)
-P 宿主机随机端口:容器端口 (注意是大写P)
例:
docker run -d --name nginx01 -p 9090:80 nginx
docker run -d --name nginx02 -p 9091:80 nginx
:::info
-p 9090:80 解析 将容器内部的 80端口与docker 宿主机(docker装在哪太服务器 那台服务器 )9090端口进行映射 那通过外部访问宿主机9090端口 即可访问到 docker 容器 80端口了
:::
在Docker中, -p 和 -P 是用于映射容器端口到主机端口的两个选项。它们之间的区别如下:
- -p 选项:这个选项用于映射指定的容器端口到主机的指定端口。例如,使用 -p 8080:80 将容器的80端口映射到主机的8080端口。你可以指定容器和主机的端口号。
- -P 选项:这个选项用于自动将容器的所有暴露的端口映射到主机的随机端口。Docker会自动分配一个主机端口,并将容器端口映射到该主机端口上。类似 docker -p :80 你可以使用 docker port <container_name> 命令来查看容器的映射端口。
总结来说, -p 选项允许你手动指定容器和主机的端口映射关系,而 -P 选项则是自动将容器的所有暴露的端口映射到主机的随机端口上。
3.6 进入容器
docker exec -it 容器名/容器ID /bin/bash
docker exec -it nginx01 /bin/bash --#进入 前面的 nginx容器
3.7 退出容器
从容器内 退出到自己服务器中 需注意 两个退出命令的区别
exit --未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
Ctrl + p + q -- 无论是否添加-d 参数 执行此命令容器都不会被关闭
3.8 停止容器
docker stop 容器ID/容器名
3.9 重启容器
docker restart 容器ID/容器名
3.10 启动容器
docker start 容器ID/容器名
3.11 kill容器
kill 容器
3.12容器文件拷贝
docker cp 命令用于在容器和本地文件系统之间复制文件/文件夹。
docker cp foo.txt mycontainer:/foo.txt -- 第一个为虚拟机上的文件,第二个为容器中的文件
docker cp name:/container_path to_path
例如:
docker cp tomcat:usr/local/tomcat/README.md ./
3.13 查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID
3.14 容器自动重启
使用docker run命令时 添加参数–restart=always 便表示,该容器随docker服务启动而自动启动
docker run -d -p 8888:6379 --restart=always --name redis002 nginx:latest/bin/bash
3.15 数据挂载
简单来讲,就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复!
-v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置
3.15.1 挂载数据库
docker run -d -p 3305:3306 --restart=always --name mysql-test -v /home/cyz23:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
3.15.2 挂载nginx
docker run -d -p 9090:80 -v /cyz23/nginx:/usr/share/nginx/html nginx
自己虚拟机中的位置,冒号后边为固定的nginx位置。
3.16 更换容器名
docker rename 容器ID/容器名 新容器名
3.17 自己提交一个容器
我们运行的容器可能在镜像的基础上做了一些修改,有时候我们希望保存起来,封装成一个新的镜像,这时候我们就需要使用 commit 命令来构建一个新的镜像
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
扩展内容
4.1 环境变量
docker run -d -e name=heimi -e girl=canglaoshi nginx
4.2 --rm
在Docker中, --rm 标志用于在容器停止后自动删除容器。当使用该标志运行容器时,容器停止运行后会立即被删除,释放相关的资源。这对于临时性的容器和一次性任务非常有用,可以避免手动删除容器的麻烦
4.3 --network=host
4.4 docker 镜像和容器的区别
Docker容器是轻量级的,共享操作系统内核,⽐虚拟机启动更快。⽽虚拟机则模拟整个操作系
统,在⼀个物理机器上运⾏多个操作系统实例。
打包后端项目
1.给自己的项目打架包,注意MySql数据库的版本和连接数据的信息,连接端口需要用本机的ip地址代替localhost,同时,使用Navicat管理工具也需要使用本机的ip地址,这样兼容性更强。
spring.datasource.url=jdbc:mysql://192.168.14.37:3309/wms-demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowMultiQueries=true
- 打包完毕后,拉取架包到虚拟机(宿主机中),然后配置dockerfile文件,设置打包方式,注意JDK的版本。
FROM openjdk:8
# 设置工作目录
WORKDIR /workspace
# 复制应用程序文件到容器中
# COPY ./wms-app-0.0.1-SNAPSHOT.jar /workspace/app.jar
ADD wms-app-0.0.1-SNAPSHOT.jar app.jar
# 设置环境变量
# ENV JAVA_HOME=/usr/local/openjdk-11
# ENV PATH=$PATH:$JAVA_HOME/bin
# 配置容器暴漏的端口
EXPOSE 8080
# 编译Java应用程序
RUN cd /workspace && ls
# java App
ENTRYPOINT ["java","-jar","app.jar"]
- 然后进入到与架包相应的位置,使用 build 和 run 命令进行构建架包并运行架包。
docker build -t mall:v1 . --打包镜像
docker run -it --rm beimao:v1 --运行镜像
- 然后测试端口即可。
- 注意:需要关闭防火墙,关闭虚拟机中的防火墙,必要时重启docker,同时需要设置mysql的host端口号根据% 查找信息, 同时mysql中的host的root 也需要设置%。