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 来运行该镜像了。

posted @   雪化山河  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示