docker 命令和使用
docker-compose 启动项目报错:
ERROR: for decryptdata Cannot start service xxx: driver failed programming external connectivity on endpoint xxx
(dfc54321e5744deb2b0b178093e9bc0783a8b839866e028e14e717282c8753d1): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8090 -j
DNAT --to-destination xxxx:8090 ! -i br-1b1cef9f64e2: iptables: No chain/target/match by that name.
一般是防火墙重启之类导致的,在重启了防火墙之后,可以再重启下 docker ( systemctl restart docker )来解决这个问题,之后再次 docker-compose up 就可以启动项目了
docker 查找镜像官网:
https://hub.docker.com/
docker 安装查看命令使用官网:
https://docs.docker.com/engine/install/centos/
docker rmi $(docker images -f "dangling=true" -q) //删除 <none> 空悬镜像
或者:docker rmi $(docker images | grep "none" | awk '{print $3}')
清除无用镜像占用的内存:docker system prune
清除默认数据卷位置下没有任何关联的卷:docker volume prune(记得有用的先备份)
docker stats 查看cpu,内存占用情况
systemctl start docker 启动 docker
systemctl enable docker 加入开机启动
docker update 容器名 --restart=always 开机自启容器(得先开机自启 docker ,才能自启容器)
systemctl restart docker 重启 docker
=============================================================
docker search mysql 搜索 mysql 这个镜像文件(https://hub.docker.com/)必须注册登录才可以搜索
docker pull 文件名 下载镜像文件【指定版本号,文件名:x.x.x,文件名后面:加版本】
docker images 查看镜像文件(这个命令是查看镜像)
docker ps 查看正在运行的容器(这个命令是查看容器)
docker start 容器id 启动容器
docker stop 容器id 停止正在运行的容器
docker restart 容器id 重启容器
docker ps -a 查看所有的容器(包括运行中的,不运行的)
docker run tomcat 创建容器,并且启动 tomcat 容器(多次使用,会启动多个,一个镜像可以被多个容器启动)
docker run --name xxx tomcat 创建启动一个tomcat容器,并且命名为 xxx(一旦起名字了,就不可多次启动同一个名字的容器)
-p 指定映射端口
docker run --name xxx -p 8081:8080 tomcat (前台启动,会打打印启动信息,可用于排查故障)指定外部端口(8081)映射到内部端口(8080),外界可以通过 8081 来访问该容器
-d 后台启动
docker run --name xxx -p 8081:8080 -d tomcat (后台启动,不会打印启动信息)指定外部端口(8081)映射到内部端口(8080),外界可以通过 8081 来访问该容器
docker exec -it 容器id bash 进入容器中(容器要启动状态才能进入)
docker inspect 容器id 查看该容器的 ip 信息(在容器外查看)
docker rmi 镜像id 删除镜像【当存在多个同名镜像时,可使用镜像名字加版本号的方式删除 docker rmi image_name:tag】
docker rm 容器id 删除容器(镜像启动后,就变成容器,应该说每个镜像,都会在启动后,单独变成一个容器在运行)
把一个容器反编译成一个镜像,使用 commit :
docker commit -m="mongo tomcat" -a="mongo" 容器id mongo:1.0
-m="mongo tomcat" 表示:要提交的描述信息
-a="mongo" 表示作者为:mongo
mongo:1.0 表示镜像文件名称
* 数据卷:就是用来外部和内部共享数据的东西,使用 -v 来建立外部和内部的关联
-v 关联内外部数据
docker run --name nginx8 -p 81:80 -d --privileged=true -v /data/nginx/html:/usr/share/nginx/html nginx(建议 -v 前面加上 --privileged=true,表示给文件夹权限)
(1)具名挂载,直接写绝对路径,会以外部目录为准,启动时覆盖内部,启动后双向绑定,内外时时同步
docker run --name nginx8 -p 81:80 -d -v /data/nginx/html:/usr/share/nginx/html nginx
docker run --name nginx8 -dp 80:80 -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/nginx.conf:/etc/nginx nginx(-v 多次使用,同时映射多个)
-v /data/nginx/html 外部目录
/usr/share/nginx/html 容器内部目录
数据只要上传到 外部目录,内部目录会时时同步更新
(2)匿名挂载,启动时不会外部覆盖内部,得先创建挂载卷:
docker volume create nginx_html
然后再挂载
docker run --name nginx1.23.1 -dp 80:80 -v nginx_html:/usr/share/nginx/html nginx
然后外部目录一般在:/var/lib/docker/volumes/ 目录下
=============================================================
docker file 的使用
===================================================================================
* springboot 打包成镜像,用 docker 容器化部署方式:
(1)创建 Dockerfile 文件(该文件名一字不差,不可随意修改),内容为:
###指定java8环境镜像 FROM java:8 ###复制文件到容器app-springboot ADD docker-springboot-0.0.1.jar /app-springboot.jar ###声明启动端口号 EXPOSE 8080 ###配置容器启动后执行的命令 ENTRYPOINT ["java","-jar","/app-springboot.jar"]
(2)在 jar 包同一目录下,放 Dockerfile 文件,然后执行命令:
docker build -t docker-springboot-0.0.1 . //注意最后面的 “.” ,不能忘记了,表示当前目录
该命令就会把 springboot 项目打包成 docker 镜像
(3)运行该镜像:docker run -p 8080:8080 docker-springboot-0.0.1
如果不行,可以重启下 dockder:systemctl restart docker
开启特定端口,或者关闭防火墙:systemctl stop firewalld
==========================================================
* docker-compose 的使用(需要先安装)
docker-compose up -d 后台启动所有容器( docker-compose up --build -d 不加 --build ,直接用原来的镜像启动,加了会重新构建新的镜像)
docker-compose down 撤销下线所有容器
docker-compose logs -f 全部容器下的日志
docker-compose logs -f 容器id 某个容器下的日志
* docker 和 docker-compose 都安装配置好后,在项目里面配置好 Dockerfile 和 docker-compose.yml 文件后,
在 /home/docker 文件下,上传:
xxx.jar
Dockerfile
docker-compose.yml
这3个文件,然后直接 :
docker-compose up --build -d //启动 docker 自动安装下载运行(每次更换 jar 包重复该操作,如果不带 --build,会使用原有的镜像,更换的 jar 包不起作用)
【 docker-compose up --build -d xxxx //指定启动 docker-compose.yml 文件中的某个服务,而不会全部启动 】
docker-compose logs -f //查看日志( docker-compose logs -f --tail 50 xxx )
docker-compose down //关闭项目(更换 jar 包时使用)
【 docker-compose stop xxxx1 xxxx2 //停止某一个服务(空格,再写一个服务名,可以一次停止多个服务) 】
【 docker-compose restart xxxx //重启某一个服务 】
* 使用 docker-compose 安装的应用,比如 redis 这类,可以登录的,除了进入容器内登录,还可以直接在宿主机登录,方式为:
docker exec -it 容器id redis-cli -a 密码
* docker 安装的应用,下载镜像文件,转移到另一个服务器运行的方式:
1、在原镜像服务器上:
docker save -o /path/to/save/xxxx.tar image_name repository_name:tag
-o 输出
/path/to/save/ 要存放镜像的目录
xxxx.tar 打包出来的镜像压缩包文件名字
image_name 要打包的镜像文件(使用 docker images 查看)
repository_name:tag 镜像文件名字:版本号(后期转移到新服务器要用)
之后便可在存放路径下看到 xxxx.tar 压缩包
2、下载该压缩包,再上传到对应服务器,或者使用 scp 直接传送到目标服务器对应目录
3、在目标服务器使用:
docker load -i /path/to/save/xxxx.tar 加载该文件成为镜像
如果第一步没有在 save 时指定 repository_name:tag 镜像名和版本号,这里加载成镜像后,会变成 <none>,可以使用:
docker tag image_id repository_name:tag 来重新指定。
4、之后便可使用 docker run 来运行该镜像了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通