Docker基础

一、应用背景

1、解决由于环境差异导致的异常问题
2、一次构建,到处运行
3、秒级部署,便捷伸缩,高效资源利用
1、官网
	docker官网:http://www.docker.com
	docker中文网站:https://www.docker-cn.com/
2、仓库
	Docker Hub官网: https://hub.docker.com/

二、常用指令

1.帮助命令

docker version
docker info
docker --help

2.镜像命令

1、docker images	列出本地镜像
	-a:列出本地所有镜像,包括中间镜像层(镜像是分层的)
	-q:只显示镜像id
	--digests:显示镜像摘要信息
	--no-trunc:显示完整镜像信息
2、docker search	[OPTIONS] 镜像名字	
	--no-trunc : 显示完整的镜像描述
	-s : 列出收藏数不小于指定值的镜像
	--automated : 只列出 automated build类型的镜像
3、docker pull 镜像名字:版本号
4、docker rmi 镜像名字或id
	删除单个:docker rmi  -f 镜像ID
	删除多个:docker rmi -f 镜像名1:TAG 镜像名2:TAG 
	删除全部:docker rmi -f $(docker images -qa)

3.容器命令

1、拉取镜像:docker pull 镜像名
2、新建并启动容器:docker run [OPTIONS] 镜像名 [COMMAND]
	 OPTIONS说明(常用):有些是一个减号,有些是两个减号
    --name="容器新名字": 为容器指定一个名称;
    -d: 后台运行容器,并返回容器ID,也即启动守护式容器;
    -i:以交互模式运行容器,通常与 -t 同时使用;
    -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    -P: 随机端口映射;
    -p: 指定端口映射,有以下四种格式
      ip:hostPort:containerPort
      ip::containerPort
 hostPort:containerPort
      containerPort
举例:启动交互式容器:docker run -it cetnos /bin/bash
3、列出当前正在运行的容器:docker ps [OPTIONS]
    -a :列出当前所有正在运行的容器+历史上运行过的
    -l :显示最近创建的容器。
    -n:显示最近n个创建的容器。
    -q :静默模式,只显示容器编号。
    --no-trunc :不截断输出。
4、退出容器
	容器停止退出:exit
	容器不停止退出:ctrl+P+Q
5、启动容器
	docker start 容器ID或者容器名
6、重启容器
	docker restart 容器ID或者容器名
7、停止容器
	docker stop 容器ID或者容器名
8、强制停止容器
	docker kill 容器ID或者容器名	
9、删除已停止的容器
	docker rm 容器ID
10、一次性删除多个容器
    docker rm -f $(docker ps -a -q)
    docker ps -a -q | xargs docker rm
11、启动守护式容器
	docker run -d 容器名
11、查看容器日志
	dockers logs -f -t --tail 容器名
	*   -t 是加入时间戳
	*   -f 跟随最新的日志打印
	*   --tail 数字 显示最后多少条
12、查看容器内运行的进程
	docker top 容器ID
13、查看容器内部细节
	docker inspect 容器ID
14、进入正在运行的容器并以命令行交互
	docker exec -it 容器ID bashShell
	重新进入docker attach 容器ID
	上述两个区别
		attach 直接进入容器启动命令的终端,不会启动新的进程
		exec 是在容器中打开新的终端,并且可以启动新的进程
15、从容器内拷贝文件到主机上
	docker cp  容器ID:容器内路径 目的主机路径	
16、docker commit提交容器副本使之成为一个新的镜像
17、docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
案例演示:提交一个没有doc(文档目录)的新tomcat镜像

三、docker镜像

1、docker镜像是分层的(UnionFS:联合文件系统),一次同时加载多个文件系统,从外面看,只能看到一个文件系统

四、docker容器数据卷

就是一个双向的文件挂载,保证容器和宿主机某个目录的数据互通

1.命令行直接添加

1、命令: docker run -it -v /宿主机绝对路径目录:/容器内目录      镜像名
2、docker inspect 容器id,可以查看是否挂载成功
3、带权限命令(容器内只读): docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

2.DockerFile添加

1、是在已有镜像基础上通过DockerFile的VOLUME指令添加数据卷
2、创建dockerfile文件并添加以下信息:
	# volume test
	FROM centos
	VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
	CMD echo "finished,--------success1"
	CMD /bin/bash
3、build成新的镜像:docker build -f /mydocker/dockerfile1 -t mycentos .

备注:Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可

3.容器间数据共享

五、DockerFile解析

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

1.DockerFile基础知识

1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层,并对镜像进行提交

2.DockerFile执行流程

(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成

3.指令详解

4.案例

自定义镜像mycentos:
1、创建dockerfile,并写入以下信息
    FROM centos
    MAINTAINER zzyy
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    RUN yum -y install vim
    RUN yum -y install net-tools
    EXPOSE 80
    CMD echo $MYPATH
    CMD echo "success--------------ok"
    CMD /bin/bash
2、构建:docker build -t 新镜像名字:TAG .
3、运行;docker run -it 新镜像名字:TAG 
4、列出镜像的变更历史:docker history 镜像名
CMD和ENTRYPOINT 
CMD:
1、Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
2、Case:tomcat的讲解演示
	docker run -it -p 8888:8080 tomcat ls -l
ENTRYPOINT:
1、docker run 之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的命令组合
自定义tomcat9
1、创建一个文件夹,创建dockerfile,将jdk和tomcat放在文件夹里
2、

FROM         centos
MAINTAINER    zzyy
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.8.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_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE  8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out

六、本地镜像发布到阿里云

1.镜像的生成方法

1、利用前面的dockerfile
2、从容器创建一个新的镜像
docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]

2.将镜像推送到Registry

首先要注册一个阿里云仓库,然后:
$ docker login --username=吕小小布6-fldcbf registry.cn-qingdao.aliyuncs.com
$ docker tag [ImageId] registry.cn-qingdao.aliyuncs.com/lv-hx/lv-hx:[镜像版本号]
$ docker push registry.cn-qingdao.aliyuncs.com/lv-hx/lv-hx:[镜像版本号]

3.从Registry拉取镜像

$ docker pull registry.cn-qingdao.aliyuncs.com/lv-hx/lv-hx:[镜像版本号]
posted @ 2021-11-12 15:03  微醺的小布  阅读(59)  评论(0)    收藏  举报