Docker 专题总结
Docker 专题总结
Docker 的基本命令
-
启动 Docker
$ systemctl start docker
-
停止Docker
$ systemctl stop docker
-
重启Docker
$ systemctl restart docker
-
开启自启动Docker
$ systemctl enable docker
-
查看Docker的概要信息
$ docker info
-
查看Docker的帮助文档
$ docker --help
-
查看Docker的版本信息
$ docker version
Docker 镜像的常用命令
-
docker images 列出本机所有镜像
$ docker images
列出本机所有镜像 :
标签 说明 REPOSITORY 镜像的仓库源 TAG 镜像的标签(版本)同一个仓库有多个TAG的镜像,多个版本;我们用REPOSITORY:TAG来定义不同的镜像; IMAGE ID 镜像ID,镜像的唯一标识 CREATE 镜像创建时间 SIZE 镜像大小 列出镜像可选参数
OPTIONS 可选参数: -a 显示所有镜像(包括中间层) -q 只显示镜像ID -qa 可以组合 --digests 显示镜像的摘要信息 --no-trunc 显示完整的镜像信息 -
docker search 搜索镜像
$ docker search
和 https://hub.docker.com/ 这里的搜索效果一样;
OPTIONS可选参数:
可选参数 说明 --no-trunc 显示完整的镜像描述 -s 列出收藏数不小于指定值的镜像 --automated 只列出Docker Hub自动构建类型的镜像 -
docker pull 下载镜像
docker pull 镜像名称:[TAG]
注意:不加TAG,默认下载最新版本latest
-
删除单个镜像
# 1,删除单个: docker rmi 镜像名称:[TAG]
如果不写TAG,默认删除最新版本latest
有镜像生成的容器再运行时候,会报错,删除失败;
我们需要加 -f 强制删除
-
docker rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]
$ docker rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]
-
删除全部
$ docker rmi -f $(docker images -qa)
Docker容器常用命令
-
查看正在运行的容器
$ docker ps [OPTIONS] $ docker ps 查看正在运行的容器 $ docker ps -a 查看所有容器 $ docker ps -n 2 显示最近创建的2个容器 $ docker ps -f status=exited 查看停止的容器
OPTIONS说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
-
容器停止退出
$ exit #容器停止退出
$ ctrl + P + Q #容器不停止退出
-
进入容器
$ docker attach 容器ID or 容器名
-
启动容器
$ docker start 容器ID or 容器名
-
重启容器
$ docker restart 容器ID or 容器名
-
停止容器
$ docker stop 容器ID or 容器名 #暴力删除,直接杀掉进程 (不推荐) docker kill 容器ID or 容器名
-
删除容器
$ docker rm 容器ID #如果删除正在运行的容器,会报错,我们假如需要删除的话,需要强制删除; $ docker rm -f 容器ID #删除多个容器 $ docker rm -f 容器ID1 容器ID2 中间空格隔开 #删除所有容器 docker rm -f $(docker ps -qa)
-
docker宿主机和容器间文件拷贝
#宿主机文件 copy to 容器内 docker cp 需要拷贝的文件或者目录 容器名称:容器目录 # 比如 docker cp /home/data/001.jpg 6498bcb8d66f /home/data/001.jpg #容器内 copy to 宿主机 docker cp 容器名称:容器目录 宿主机目录
-
docker 查看容器日志
$ docker logs [OPTIONS] CONTAINER #也可以去docker日志文件目录查找,docker日志文件目录 /var/lib/docker/containers/
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟) --tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
-
docker 查看容器进程
$ docker top 容器ID
-
docker 进入容器执行命令,直接操作容器,执行完 回到 宿主主机终端;
我们一般用于 启动容器里的应用 比如 tomcat nginx redis elasticsearch等等
$ docker exec -it 容器名称 或者 容器ID /bin/bash
-
提交运行时容器成为镜像
docker commit -a='作者' -m='备注' 运行时容器ID 新镜像名称
-
容器端口映射
# 端口映射; $ docker run -it -p 8888:8080 镜像ID $ docker run -it -P 镜像ID
-
创建并启动容器
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...] # 启动普通容器 $ docker run --name 别名 镜像ID # 启动交互式容器 运行一个容器 取别名 交互模式运行 以及分配一个伪终端 $ dokcer run -it --name 别名 镜像ID # 守护式方式创建并启动容器,执行完命令后,终端依然再宿主机上; $ docker run -di --name 别名 镜像ID #启动容器,并执行/bin/bash命令; $ docker run -it --name 别名 镜像ID /bin/bash命令
--name="容器新名字":为容器指定一个名称;
-i:以交互模式运行容器,通常与-t或者-d同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-d: 后台运行容器,并返回容器ID;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
Docker目录挂载
-
简介:容器目录挂载,我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以实现宿主机和容器目录的双向自动同步;
-
作用:前面的 cp 命令来实现数据传递,这种方式比较麻烦;我们通过容器目录挂载,能够轻松实现代码上传,配置修改,日志同步等需求;
-
语法:
#单个目录挂载 $ docker run -it -v /宿主机目录:/容器目录 镜像名 #多个目录挂载 $ docker run -it -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名 #挂载目录只读: $ docker run -it -v /宿主机目录:/容器目录:ro 镜像名
注意:
如果同步的是多级目录,可能会出现权限不足的提示;
这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要在启动命令后添加 --privileged=true 来解决挂载的目录没有权限的问题;
Docker tomcat端口映射的坑
问题描述:启动容器后,外网无法映射访问 Tomcat
排查思路:
-
查看firewall-cmd --state,添加策略对外打开指定的端口
#查看 firewall-cmd --list-ports firewall-cmd --list-services #添加策略 firewall-cmd --add-port=5000/tcp --permanent firewall-cmd --remove-port=5000/tcp --permanent firewall-cmd --reload
-
查看 sysctl net.ipv4.ip_forward 是否转发 0-未转发 1-转发
-
查看容器 tomcat的 webapp目录下是否存在文件,讲webapp.dist目录内文件 拷贝至wepapp
Docker 配置 Tomcat
-
配置思路:先进行镜像的拉取安装,然后指定端口启动并进入容器。在本地建立Tomcat 同级目录,并将容器Tomcat目录下内容拷贝至宿主机,再进行宿主机与容器之间的挂载,这样容器与宿主机间的数据关系就同步了。
-
配置步骤:
-
安装镜像并运行容器
$ docker pull tomcat:8.5.31 $ docker run -di -p 8888:8080 镜像id
-
宿主机里home目录下新建tomcat目录,复制容器里conf,webapps到宿主机
$ docker cp 容器id:/usr/local/tomcat/conf /home/tomcat/ $ docker cp 容器id::/usr/local/tomcat/webapps /home/tomcat/
-
把容器里的tomcat里的webapp,logs,conf挂载到宿主机tomcat目录下,方便上传代码,同步持久化日志,以及方便配置tomcat;关掉容器,启动容器;
$ docker run -d --name 容器名称 -p 80:8080 -v /home/tomcat/conf/:/usr/local/tomcat/conf/ -v /home/tomcat/webapps/:/usr/local/tomcat/webapps/ -v /home/tomcat/logs/:/usr/local/tomcat/logs/ 镜像名称
-
配置tomcat server.xml 以及 同步上传war包
<Context path="" docBase="/usr/local/tomcat/webapps/WebTest" debug="0" reloadable="true" />
-
Docker 配置 MySQL
-
简介:docker安装MySQL 和 安装Tomcat 差不太多,这边主要介绍下配置思路
-
安装步骤:
-
拉取需要的MySQL镜像
$ docker pull mysql:5.7
-
创建宿主机挂载目录,存储MySQL配置文件、数据文件及相关日志信息
$ docker cp 容器id:/etc/mysql/conf.d /home/mysql/ $ docker cp 容器id:/var/log /home/mysql/ $ docker cp 容器id:/var/lib/mysql /home/mysql/
-
创建并运行容器,端口指定,目录挂载
$ docker run -p 3306:3306 -d -v /etc/mysql/conf.d/:/home/mysql/conf/ -v /var/log:/home/mysql/log/ -v /var/lib/mysql/:/home/mysql/mysql/ -e MYSQL_ROOT_PASSWORD=123456 镜像ID
-
用sqlyog连接docker里的数据库,导入sql脚本
-
-
注意事项:
-
运行的项目里的数据库连接地址,要写docker里的mysql容器所在的虚拟IP地址;容器间通信IP;
# 查看 inspect中的 "IPAddress": "172.17.0.2" 信息 项目中locahost 替换为容器IPAddress 地址 $ docker inspect 容器ID
-
Docker迁移与备份
-
大公司开发过程中,经常自定义镜像,然后commit提交成镜像到本地仓库,但是我们发布到客户服务器的时候,可以用前面讲得发布到hub官方,或者阿里云,但是有些机密性的项目,是禁止公网存储的,所以我们只能通过docker镜像备份和迁移实现。
-
实现方式:
#备份镜像 $ docker save -o 备份镜像的名称 源镜像名称:tag版本 比如: $ docker save -o mytomcat7.1.tar java1234/tomcat7:7.1 #将打好的tar 进行sftp或网络传输 可实现自定义镜像的恢复 $ docker load -i 镜像文件 比如:$ docker load -i mytomcat7.1.tar
DockerFile
-
简介:
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于操作系统(centos或者Ubuntu)基础镜像并最终创建的一个新镜像;通过用手工的方式,修改配置文件,或者添加,删除文件目录的方式,来构建一种新镜像;这种手工方式麻烦,容易出错,而且不能复用;Dockerfile使用脚本方式来构建自动化,可复用的,高效率的创建镜像方式,是企业级开发的首选方式;
在软件系统开发生命周期中,采用Dockerfile来构建镜像;
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
-
DockerFile常用指令
#定义了使用哪个基础镜像启动构建流程 FROM image_name:tag #声明镜像维护者信息 MAINTAINER user_info #设置环境变量(可以写多条) ENV key value #构建容器时需要运行的命令(可以写多条) RUN command #设置终端默认登录进来的工作目录 WORKDIR path_dir #当前容器对外暴露出的端口 EXPOSE port #将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 ADD source_dir/file dest_dir/file #和ADD相似,但是如果有压缩文件是不能解压 COPY source_dir/file dest_dir/file #创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等 VOLUME #指定容器启动时要运行的命令,假如有多个CMD,最后一个生效 CMD #指定容器启动时要运行的命令 ENTRYPOINT #当构建一个被继承的Dockerfile时运行的命令,父镜像在被子镜像继承后父镜像的onbuild被触发。可以把ONBUID理解为一个触发器。 ONBUILD
-
DockerFile构建自定义CentOS
#第一步:编写DockerFile FROM centos MAINTAINER zhangtao<zhangtao2021@126.com> LABEL name="zhangtao CentOS Image" \ build-date="20210316" ENV WORKPATH /home/ WORKDIR $WORKPATH RUN yum -y install net-tools RUN yum -y install vim EXPOSE 80 CMD /bin/bash #2.通过DockerFile构建镜像 构建 docker build -f myCentosDockerFile -t zhangtao/mycentos:1.1 . #3:测试运行镜像 运行 docker run -it 镜像ID #4.查看镜像历史 查看镜像历史 docker history 镜像ID
DockerFile通过VOLUME实现容器卷
-
简介:前面用启动命令 -v 宿主机目录:容器卷目录 来实现容器卷目录挂载。但是由于定义Dockerfile的时候,并不能保证在所有的宿主机上都有这样的特定目录,所以在Dockerfile定义中,只能指定容器卷目录;
-
语法:
#编写DockerFile FROM centos VOLUME ["/home/v1","/home/v2"] CMD /bin/bash #构建 $ docker build -f myVolumeDockerFile -t zhangtao/myTest:1.1 . #运行 $ docker run -it 镜像ID
容器运行后,进入home目录,找到v1,v2两个容器卷目录;然后我们通过 docker inspect 容器ID 来查看下默认生成的容器卷对应的宿主机目录,通过新建文件和 修改,实现容器卷同步
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库