一、Docker 的安装
(一)、安装过程
官网:https://docs.docker.com/engine/install/centos/
1、准备工作
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
//安装yum
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
//配置阿里云仓库
yum -y install gcc
yum -y install gcc-c++
yum install docker-ce docker-ce-cli containerd.io
//安装docker
3、systemctl daemon-reload
4、systemctl restart docker
docker --version //查看docker是否安装成功
1、vim /etc/docker/daemon.json
2、{
"registry-mirrors":["https://ma62fx9r.mirror.aliyuncs.com"]
}
//虚拟机开机,后台启动docker
systemctl enable docker
//查看配置信息是否更改成功
docker info
(二)、基础指令
1、查看镜像
docker images
docker images -p //罗列镜像
docker images -pa //查看所有id
2、镜像说明:images
docker images --digests //显示摘要信息
docker images --no-trunc //显示完整的镜像信息
3、搜索镜像:search
docker search 镜像名 -s //列出收藏数。
4、下载镜像:pull
docker pull 镜像名 //默认最新版本
docker pull 镜像名:3.2 //指定版本号
5、删除镜像:rmi
docker rmi -f 镜像id //删除指定在后面加版本号
docker rmi -f 镜像id 镜像id //多个删除
docker rmi -f 镜像id //删除指定在后面加版本号
docker rmi -f $(docker images -qa) //删除所有
6、跑镜像容器:run
docker run it 镜像id //把镜像加载到docker容器里面
docker ps //查看启动的容器进程
docker run -p 9400:9400 -d middleground/middleground-gateway //后台运行暴露端口
可选参数:
--name :位容器指定一个名称
-d:后台运行容器
-v:表示把本地文件目录挂载到容器里面
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,
-p:随机端口映射
格式:
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
例如:
docker run -it --name mycentos0115 centos
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5xRVlBvy-1633917489322)(C:\Users\211\AppData\Roaming\Typora\typora-user-images\image-20210727142343585.png)]
7、进程查询:ps
docker ps
参数:
-a:列出当前所有正在运行的容器
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:不截断输出
8、退出容器:exit
exit //退出当前容器,关闭容器
Ctrl+p+q //退出当前容器,容器不关
9、重启容器:start
docker start 容器名 //注意不是镜像名称。
docker restart 容器名 //重启容器
9.1查看容器大小
du -sh * //查看所有
du -sh <容器id> //查看指定容器
docker system df -v //查看容器大小
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bLQUgLLN-1633917489324)(C:\Users\211\AppData\Roaming\Typora\typora-user-images\image-20210727143335794.png)]
10、停止容器:stop
docker stop 容器id/容器名 //
docker kill 容器名/容器id //强制关闭
docker stop $(docker ps -aq) //停止所有容器
11、删除容器:rm
docker rm //删除已关闭的
docker rmf //强制删除未关闭
docker rm -f$(docker ps -a -q) //删除多个
docker ps -a -q | xargs docker rm //删除多个
12、日志:logs
docker logs -f -t --tail 容器id //-t时间,-f跟随最新的日志打印,tail 数字显示最后多少条
1、top
docker top 容器名称 //查看容器内部的进程
2、inspect
docker inspect 容器名 //查看容器内部细节
13、进入容器:attach
1、docker exec -it 容器id //bashShell //直接进入容器启动命令红缎,不会启动新进程。
2、docker attach 容器id //实在容器中打开新的终端,并且可以启动新的进程
3、docker cp 容器id:///文件名 /目标文件夹///
14、提交副本镜像:commit
docker commit //提交容器副本使之成为一个新的镜像
例如:docker commit -a="zzyy" -m="del tomcat doc" 镜像id 新镜像名称:1.2
解释:
-a:作者
-m:标注信息
镜像id:正在运行的镜像容器
新镜像名:提交自己的镜像名字。版本号
(三)容器数据卷
1、数据卷:VOLUME
作用:宿主机与容器的数据共享,数据持久化,数据完全同步
docker run -it -v /宿主机绝对路径:/容器内目录 镜像名
例如:docker run -it -v /myDataVolume:/dataVolumeContainer centos
权限设置:
docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos //ro只允许容器读,不允许写操作。
2、DockerFile
a.关系解读:
JAVA EE hello.java------>java.class
Docker images--------->DockerFile(镜像模板的描述)
b.DockerFile与数据卷
步骤:编写dockerfile文件----->docker build------->run
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,-------success1"
CMD /bin/bash
build DckerFile
docker build -f /mydocker/dockerfile2 -t zzyy/centos .
-f:在当前目录下build可以不加。
当运行镜像的时候,会默认赋值给宿主机。
c.注意报错:
Docker 挂载主机目录Docker访问出现cannot open directory .:Permission denied
解决办法:在挂载目录后多加一个–privileged=true参数即可
docker run -it -v /myDateVolume:/dataVolumeContainer --privileged=true 镜像名
d.数据卷数据传递共享-容器
概念:容器与容器的数据交互。
命令:
docker run -it --name dc01 zzyy/centos //--name指定名称
touch de01_add.txt //添加一个文件
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
touch de02_add.txt
docker run -it --name dc03 --volumes-from dc01 zzyy/centos
touch de03_add.txt
作用:子夫都会同时共享。删除dec01后也会共享。
(四)保留关键字
FROM
FROM //基于那个镜像
MAINTAINER
MAINTAINER //镜像的维护者姓名邮箱地址
RUN
RUN //容器构件时需要运行的命令,构建镜像的过程中进行额外命令
EXPOSE
EXPOSE //暴露出服务端口号,最外层。
WORKDIR
WORKDIR //指定容器创建后,终端默认登录的进来工作目录,一个落脚点.
WORKDIR $my-path
ENV
ENV //用来在构建镜像过程中设置环境变量
ADD
ADD //拷贝加解压
COPY
COPY //直接拷贝
例如:
copy["src","dest"]
copy src dest //src源,dest目的
VOLUME
VOLUME //数据容器卷,保存数据和持久化
CMD
CMD //指定容器启动时,需要执行的命令
dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参 数替换或者覆盖。
shell
exec
ENTRYPOINT
ENTRYPOINT //指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,追加
ONBUID
ONBUID //当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承 后父镜像的onbuild被触发。
其他
docker rm -f $(docker ps -q) //级联删除
docker ps:查询当前正在运行的容器
-q:查询容器id
(五)实例
1、步骤
(1)编写DockerFile
FROM centos //构建镜像的基础镜像
ENV mypath /tem //定义一个变量
WORKDIR $mypath //指定默认进入系统后的落脚点
RUN yum -y install vim //安装vim的功能
RUN yum -y install net-tools //安装功能
EXPOSE 80 //暴露端口
CMD /bin/bash //命令行执行
(2)构建:build
docker build -t 新镜像名称:TAG.
-t:标识为客户端
:TAG:表示标签
.:表示当前路径
docker build -f /mydocker/DockerFile2 -t mycentos:1.3 .
(3)运行:run
docker run -it mycentos:1.3
(4)列出镜像变更历史:history
docker images mycentos:1.3
docker history fa24446daa76
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eAIFneZ9-1633917489326)(C:\Users\211\AppData\Roaming\Typora\typora-user-images\image-20210728134325924.png)]
实现ip的查询
(1)编写DockerFile
FROM centos
RUN yum install -y curl
CMD ["curl","-s","http://ip.cn"]
(2)构建
docker build -f /mydocker/dockerfile3 -t myip . //-f:加路径
(3)运行
docker run 镜像ip
二、tomcat集成示例
步骤
1、创建文件夹
mkdir -p /zzyyuse/mydockerfile/tomcat9
(1)编写DockerFile
FROM centos
MAINTAINER tz<1004793718@qq.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把JAVA与tomcat添加到容器当中去
ADD jdk-8u172-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.50.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境
ENV JAVA_HOME /usr/local/jdk1.8.0_172
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apche-tomcat-9.0.50
ENV CARALANA_BASE /usr/local/apache-tomcat-9.0.50
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA/bin
#容器监听的端口
EXPOSE 8080
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.50/bin/startup.sh"]
#CMD["/usr/local/apache-tomcat-9.0.50/bin/catalina.sh","run"]
#启动时运行tomcat
CMD /usr/local/apache-tomcat-9.0.50/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.50/bin/logs/catalina.out
(2)构建镜像
docker build -f /tz/mydockerfile/tomcat9/DockerFile -t tztomcat9 . //不在当前目录,需要加路径。
docker build -t tztomcat9 . //当前目录能识别的情况下。
(3)运行:
docker run -d -p 9080:8080 --name myt9 -v /tz/mydockerfile/tomcat9/test/:/usr/local/apache-tomcat-9.0.5/webapps/test -v /tz/mydockerfile/tomcat9/tomcatlogs/:/usr/local/apache-tomcat-9.0.5/logs --privileged=true zzyytomcat9
docker run -d -p 9080:8080 --name centos_tomcat -v /opt/centos_tomcat/test/:/opt/apache-tomcat-9.0.50/webapps/test -v /centos_tomcat/tomcatlogs/:/opt/apache-tomcat-9.0.50/logs --privileged=true centos_tomcat
2、本机实例:
(1)环境准备
a.安装docker
b.安装centos
(2)docker
a.导入包
b.编写Dockerfile文件
c.build镜像
d.运行镜像成为一个容器
三、其他命令
1、加载下载的镜像
docker load -i busybox.tar.gz