Docker常用操作

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
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值