1、docker search redis
没有提供可查tag的命令,需要去dockerhub上爬的
2、启动docker:service docker start
(构建好以后,就不需要了:docker build -f Dockerfile -t springboot-jar .)
(构建好以后,就不需要了:docker build -f Dockerfilelog -t springboot-log-jar .)
3、启动docker里面的容器:
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
(单体启动java程序:nohup java -jar springbootstudy.jar)
docker run -p 8082:8082 -d springboot-jar (指定端口)
测试: http://172.19.211.109:8082/springbootstudy/hello
如果是,docker run -p 8001:8082 -d springboot-jar (指定端口)
http://172.19.211.109:8001/springbootstudy/hello
docker run -p 9096:9096 -d springboot-log-jar
测试: http://172.19.211.109:9096/hellolog
sh get-docker.sh
sudo service docker start
docker:
sudo systemctl status docker
换成下面这样
sudo /etc/init.d/ docker status
或者
sudo service docker status
4、docker ps 列出所有在运行的容器信息
5、ubuntu 本机操作,查找日志: find . -name 'spring.log' -ls
6、查看docker中容器日志:docker logs -f -t --tail 100 31d1ed582afb (容器id)
2023-04-22T15:41:30.076856077Z 2023-04-22 [http-nio-9096-exec-1] DEBUG com.atguigu.springboot.HelloController - hello,debug
2023-04-22T15:41:30.077217839Z 2023-04-22 [http-nio-9096-exec-1] INFO com.atguigu.springboot.HelloController - hello info
2023-04-22T15:41:30.077752886Z 2023-04-22 [http-nio-9096-exec-1] WARN com.atguigu.springboot.HelloController - hello warn
2023-04-22T15:41:30.078258278Z 2023-04-22 [http-nio-9096-exec-1] ERROR com.atguigu.springboot.HelloController - hello error
2023-04-22T15:41:30.087428991Z 2023-04-22 [http-nio-9096-exec-1] ERROR com.atguigu.springboot.HelloController - exeption str
7、 停止docker容器: docker stop 31d1ed582afb
8、删除image id : docker rmi 7b96f5b4eb19 (如果构建过容器,提示删不掉)
Error response from daemon: conflict: unable to delete 7b96f5b4eb19
(must be forced) - image is being used by stopped container a983740aebc5
docker rmi -f 7b96f5b4eb19 强制
9、数据卷挂载
VOLUME /tmp
VOLUME /spring/log
定义了一个log的持久化存储,这样SpringBoot应用在容器里运行时,我们可以用命令行进入容器内部,查看log文件夹下的日志文件。
在SpringBoot应用的application.properties配置文件里,设置日志文件的输出目录为/spring/log
使用下面的命令行进入镜像:
docker exec -it 56b861aff898 /bin/sh
(56b861aff898 为 64位的SHA256字符串前面12位)
这样就在Docker镜像里查看SpringBoot应用运行时生成的日志文件:
(ctrl + D 退出)
参考链接:运行在Docker里的SpringBoot应用,如何查看记录在文件系统的日志 - 腾讯云开发者社区-腾讯云 (tencent.com)
10、在 Docker 1.10 之前,图像id是随机的,但从那时起,它们是使用哈希(当前为 SHA256
确定性地生成的。每个图像层都有一个摘要,它是其内容的哈希。
图像 ID 是一个不同的摘要,从配置中散列 - 其中包括其层的摘要。
要识别文件的唯一性,就是摘要算法。
11、 md5sum spring-boot-log.jar, sha256sum spring-boot-log.jar。 校验文件完整性;
12、从容器内拷贝文件到主机上
• 容器→主机
• docker cp 容器ID:容器内路径 目的主机路径
docker cp 7c4a8204eeb7:/spring/log/spring.log /usr/local
13、从宿主机拷贝到容器:
docker cp /usr/local/test.log 7c4a8204eeb7:/root
进入容器查看:docker exec -it 7c4a8204eeb7 /bin/sh
14、导出导入:
Docker镜像的导入导出_本文介绍docker镜像的导入导出,用于迁移、备份、升级等场景,准备环境如下:_小苏少的博客-优快云博客
导出:docker save -o ./springboot-jar.tar springboot-log-jar:latest
导入:docker load < springboot-jar.tar
(主要是本地测试的,先删除之前导出的镜像,重新导入刚才导出的备份tar)
参考:docker镜像的导入导出_docker__c G-DevPress官方社区 (youkuaiyun.com)
export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。可以依据具体使用场景来选择命令
若是只想备份images,使用使用export、import即可
若是在启动容器后,容器内容有变化,需要备份,则save、load;
docker save:将容器的文件系统导出为tar存档
15、docker 容器查看日志:
为什么要看日志?比如启动容器失败,却不给出任何提示,这时候我们就需要查看下到底是为什么?
$ docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
查看指定时间后的日志,只显示最后100行:
$ docker logs -f -t --since="2023-04-29" --tail=50 CONTAINER_ID
查看某时间之后的日志:
$ docker logs -t --since="2023-04-29T19:22:53" CONTAINER_ID
16、Docker 镜像构建之 docker commit;
我们可以通过公共仓库拉取镜像使用,但是,有些时候公共仓库拉取的镜像并不符合我们的需求。尽管已经从繁琐的部署工作中解放出来,但是实际开发时,我们可能希望镜像包含整个项目的完整环境,在其他机器上拉取打包完整的镜像,直接运行即可。
Docker 支持自己构建镜像,还支持将自己构建的镜像上传至公共仓库,镜像构建可以通过以下两种方式来实现:
docker commit:从容器创建一个新的镜像;
docker build:配合 Dockerfile 文件创建镜像。
下面我们先通过 docker commit 来实现镜像的构建。
目标:我们通过基础镜像 centos:7,在该镜像中安装 jdk 和 tomcat 以后将其制作为一个新的镜像 mycentos:7。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a="mrhelloworld" -m="jdk11 and tomcat9" centos7 mycentos:7
-a:提交的镜像作者;
-c:使用 Dockerfile 指令来创建镜像;
-m:提交时的说明文字;
-p:在 commit 时,将容器暂停。
参考:Docker 镜像构建之 docker commit - 知乎 (zhihu.com)
docker commit命令的使用_docker_思诚代码块-DevPress官方社区 (youkuaiyun.com)
17、docker:export/save/commit 区别:
commit:提交容器到镜像,实现容器持久化;
export:导出容器和镜像,实现容器内容持久化;
save:导出镜像文件,实现镜像内容持久化。
commit+save模式:保留了一个镜像的所有历史文件和元数据,它把容器的内容作为一个新的层覆盖在原有镜像之上,然后实现持久化。原有的镜像没有改变。
这样的好处是,当我发现这个commit+save的镜像包有问题的时候,可以快速回滚到之前的镜像版本。
export模式:打扫干净屋子再请客。把之前镜像的层级删干净,只保留最新的快照文件。
这种情况适用于我不需要回滚,当前的状态即是最佳状态的时候。这样做的好处是,删除了没有用处的历史数据,同时保留了镜像具有的所有功能,关键是镜像文件还小的很
参考:docker:export/save/commit谁才是你心中那个她 - 知乎 (zhihu.com)
18、 容器即应用:
我同一个镜像模版springboot-log-jar,启动了两个应用,分别用宿主机的9098和9099端口(前面启动了好几个其他应用),算两个容器;
19、ubuntu防火墙操作:
打开防火墙:ufw enable;
关闭防火墙: ufw disable;
ufw status,查看防火墙状态;
20、卸载docker:
sudo apt-get remove docker docker-engine docker.io