一、Docker安装
1、安装前必读
在安装 Docker 之前,先说一下配置,我这里是Centos7;Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。
注意:本文的命令使用的是 root 用户登录执行,不是 root 的话所有命令前面要加 sudo
2、更新 yum 包
使用 root 权限更新 yum 包(生产环境中此步操作需慎重)
yum -y update
3、卸载旧版本(如果以前安装过,否则此步骤可以忽略)
yum remove docker-ce docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
4、安装相应的安装包
yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置 yum 源
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6、安装最新版本的 Docker Engine-Community 和 containerd
yum -y install docker-ce docker-ce-cli containerd.io
7、选择性安装(查看可用版本有哪些);若已经做了第六步,无需操作此步骤
yum list docker-ce --showduplicates | sort -r
选择一个版本并安装:yum install docker-ce-版本号
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-24.0.6。
yum -y install docker-ce-24.0.6 docker-ce-cli-24.0.6 containerd.io
8、查看安装版本
docker -v
docer version
9、启动Docker,并设置开机自动启动
systemctl start docker
systemctl enable docker
#停止docker
systemctl stop docker
#重启docker
systemctl restart docker
#查看状态
systemctl status docker
运行Hello-world
通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community
docker run hello-world
10、卸载docker
(1).卸载依赖
sudo yum remove docker-ce docker-ce-cli containerd.io
(2).删除文件夹
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
二、Docker使用
1、镜像操作
#查看镜像
docker images
#移除镜像是 rmi
docker rmi <镜像【IMAGE】 ID>
#查找镜像
docker search tomcat
#拉取tomcat镜像(默认为 latest版本)
docker pull tomcat:latest
#强制删除镜像(-f)
docker rmi -f hello-world
#一次强制删除多个镜像(多个镜像中间用空格隔开hello-world 和nginx)
docker rmi -f hello-world nginx
#一次删除全部的镜像
docker rmi -f $(docker images -qa)
2、容器操作
#查看运行的容器
docker ps
#列出当前所有正在运行的容器+历史上运行过的
docker ps -a
#列出上一次运行的容器
docker ps -l
#列出前三次运行的容器
docker ps -n 3
#只显示容器编号
docker ps -q
#以交互式且伪终端打开的方式运行centos容器,且容器名字为mycentos
docker run -it --name mycentos centos
#关闭容器后退出容器
exit
#容器不停止退出
ctrl+p+q
#启动容器
docker start <容器 ID>
#重新启动容器
docker restart <容器 ID>
#停止容器(温柔停止)
docker stop <容器【CONTAINER】ID>
#停止容器(强制停止,相当于拔电源)
docker kill <容器 ID>
#删除已停止的容器
docker rm <容器 ID>
#强制删除容器(没有停止的也会被删除)
docker rm -f <容器 ID>
#一次性强制删除多个容器
docker rm -f $(docker ps -aq) 或者 docker ps -aq |xargs docker rm -f
#以后台模式启动一个容器(启动守护式容器)
docker run -d centos
docker run -d centos /bin/sh -c "while true; do echo hello zhangyanfen; sleep 2; done"
#查看容器日志(-t 加入时间戳; -f跟随最新的日志打印; --tail 数值 显示最后多少条)
docker logs -t -f --tail 3 <容器ID>
#查看容器内运行的进程
docker top <容器ID>
#查看容器内部细节
docker inspect <容器ID>
#未退出容器后,重新进入容器;(attach直接进入容器启动命令的终端,不会启动新的进程)
docker attach <容器ID>
#未退出容器的前提下,在宿主机中执行容器的命令,直接返回给宿主机(是在容器中打开新的终端,并且可以启动新的进程)
docker exec -t <容器ID> ls -l /tmp
#进入容器
docker exec -it f07f19e6eb63 /bin/bash
#从容器内拷贝文件到主机上
docker cp <容器ID>:容器内路径 目的地主机路径
docker cp 73c418ba31bc:/tmp/zyf.txt /opt
运行centos容器,并进入centos伪终端 -i 交互式; -t 伪终端
docker run -it <镜像 ID>
未退出容器的前提下,在宿主机中执行容器的ls -l /tmp命令,直接返回给宿主机
docker exec -t <容器ID> ls -l /tmp
三、Dock卷操作
Docker卷与容器绑定后,容器就可以与宿主数据互通;即便容器停止后,再次启动容器,宿主的数据仍可以同步到容器中。(ro的意思为read only,启动命令添加ro后,容器中不能编辑或添加文件,只有宿主机可以编辑或添加)
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
docker inspect <容器ID>
例:
docker run -it -v /opt/vdata:/opt/mydata --name centos centos
docker inspect 4a9cbd7f02c3
四、Docker安装Tomcat
1、查找Docker Hub上的tomcat镜像
docker search tomcat
2、拉取tomcat镜像
docker pull tomcat
docker images
3、使用tomcat默认的配置来启动一个tomcat容器
docker run -it -p 8888:8080 --name tomcat tomcat
注意
当Tomcat版本过高时,根据IP地址和端口号访问可能会出现下面问题:出现404
是因为webapps文件夹下内容为空,内容都在webapps.dist 目录下,解决办法如下:
1.进入tomcat容器
docker exec -it 容器id /bin/bash
2.ls 查看文件夹内容,可以发现下面有webapps文件夹和webapps.dist文件夹,将webapps.dist下的内容全部异动到webapps中。
mv webapps.dist/* webapps
4、拷贝容器内tomcat配置文件和日志到本地准备映射
在主机中创建文件夹
mkdir -p /opt/app/tomcat
docker cp tomcat:/usr/local/tomcat/conf /opt/app/tomcat/conf
docker cp tomcat:/usr/local/tomcat/logs /opt/app/tomcat/logs
5、停止tomcat,并删除容器
docker stop tomcat
docker rm tomcat
6、创建卷并运行tomcat容器
docker run -it -p 8888:8080 --name tomcat \
-v /opt/app/tomcat/webapps:/usr/local/tomcat/webapps \
-v /opt/app/tomcat/conf:/usr/local/tomcat/conf \
-v /opt/app/tomcat/logs:/usr/local/tomcat/logs --restart=always tomcat
7、生成新的镜像文件
docker commit -a='作者' -m='镜像描述' 容器ID 新的镜像名/名称:版本 如下:
docker commit -a="zhangyanfen" -m="有doc的tomcat" f07f19e6eb63 zf/mytomcat:1.0
根据新创建的镜像,启动新的容器
docker run -it -p 7777:8080 --name tomcat zf/mytomcat:1.0