Docker学习

docker学习

docker是一个开源的应用容器引擎,可以在一个操作系统中抽象出多个虚拟环境,可以让那个开发者在对应的虚拟环境进行添加对应的依赖,并且不同的虚拟环境相互隔离。

可以理解一个liunx服务器是一个单独的环境,可以部署docker引擎,划分出多个不同的虚拟环境,每一个环境就是一个容器,一个容器里面的就是一个单独的环境,可以有liunx的端口号、资源等。

docker 基础知识

1. 安装docker

常见其他教程

2. image镜像、containers

image是一个镜像可以看做一个java文件
containers一个运行的容器,可以看作一个class文件。
image是我们下载到docker中的镜像,但是还没有运行,如果执行run,则运行镜像,会生成一个容器,该容器就是一个单独的环境。

docker ps 查询正在运行的容器
docker images 查询所有的镜像

3. docker中的run

docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

常见OPTIONS说明:

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

如果指定了-it则会打开一个终端,输出对应程序的数据,如果关闭了窗口,则对应执行的sh命令也会关闭。

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

–name xx:指定容器名称

-v: 绑定容器中的地址,让文件地址绑定,相当于容器中的文件路径相当于宿主机上的容器路径。

-e xx=yy 设置环境变量,有些软件会读取环境变量的内容。

比如-it,运行后,当前进程会有一个交互终端,而-d则没有

–net=host

–net=host (-和-有两个)
这样会使用主机资源,也就是ip和port直接使用主机。

docker 查看容器信息

docker inspect id

docker 进入容器

docker exec -it id /bin/bash
推出:exit

dockerfile介绍

dockerfile是用来构建docker镜像的文件,也就是说如果后续自己要部署一个自定义的容器,则需要编写dockerfile,这个文件十分简单,使用DockerFile创建镜像逐渐成为企业交付的标准。

  1. 每一个指令必须大写字母
  2. 执行从上到下顺序执行
  3. # 表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交

1. 编写文件

常见指令

FROM			 指明构建的新镜像是来自于哪个基础镜像
MAINTAINER 	 指明镜像维护者及其联系方式(姓名+邮箱)
RUN			 制作镜像的时候需要运行的命令,RUN后面接linux里的命令,这个命令是在制作镜像的时候使用的
WORKDIR			 镜像的工作目录,docker exec 命令执行的时候进入的目录
VOLUME			 向镜像创建的容器中添加数据卷,数据卷可以在容器之间共享和重用
EXPOSE			 指明容器运行的时候暴露的端口
ONBUILD			 当构建一个被继承DockerFile的时候,就会运行ONBUILD指令,触发指令
ENV				 设置镜像环境变量,这样在run的时候可以通过-e指定对应变量
ADD       		 ADD和COPY作用相似,可以从一个URL地址下载内容复制到容器的文件系统中,还可以将压缩打包格式的文件解压后复制到指定位置
COPY			 COPY指令用来将本地的文件或者文件夹复制到镜像的指定路径下
# 文件复制均使用 COPY 指令,在需要自动解压缩的场合使用 ADD 指令
CMD				 指定这个容器启动的时候要运行的命令Dockerfile只允许使用一次CMD指令,一般都是脚本中最后一条指令
ENTRYPOINT		 指定这个容器启动的时候要运行的命令,可以追加命令
# 如果docker run后面出现与CMD指定的相同的命令,那么CMD就会被覆盖。而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令

docker中cmd和entrypoint区别

ENTRYPOINT 容器启动后执行的命令,让容器执行表现的像一个可执行程序一样,与CMD 的 区 别 是 不 可 以 被 docker run 覆 盖 , 会 把 docker run 后 面 的 参 数(在run的时候后面是定义为ARG的) 当 作 传 递 给ENTRYPOINT

  1. RUN 指令:用于指定 docker build 过程中要运行的命令。
  2. 注意,一个RUN指令可以运行多个命令,之间用&&符号隔开,这样只生成一层镜像层。
  3. CMD是启动构建映像时容器默认执行的命令。一个Dockerfile只能有一个CMD。使用docker run $image $other_command启动容器时,可以覆盖CMD。
  4. CMD指令可让您设置默认命令,该命令为仅在运行容器而不指定命令时执行。如果Docker容器使用命令运行,则默认命令为忽略了。如果Dockerfile具有多个CMD指令,则除最后一条以外的所有指令CMD指令将被忽略.
  5. ENTRYPOINT 指令:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序;但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序;
  6. ENV name docker ENTRYPOINT echo “Hello, $name”
    1. 其中$符号可以指定对应环境变量参数
  7. 要明白enterpoint是执行shell还是执行command命令,command命令不会被shell解析
  8. 使用如下格式,可以解析:ENTRYPOINT [“/bin/sh”, “-c”, “echo hello, $name”],也就是最后一个空是一个shell操作。

copy 复制文件

如果我们容器需要使用到宿主机的文件,则可以使用copy进行复制到容器中。必然我们的容器是tomcat,对应执行的war在外部容器,则可以使用copy将外部的war进行复制过来。

2. build执行镜像

docker build -f [path] -t [name].

如:docker build -f ./Dockerfile -t api-xxx:1.0.1 .

其实知识

  1. 如果要运行一个含有mysql容器的时候,可以创建二个dockerFile一个是mysql一个是java,这样就不需要在java中的dockerFile的mysql容器给写进来,后续可以使用服务编排docker-compose
  2. 在docker run的时候最后可以指定对应的命令,比如 ls -s ,比如./xxx.sh 脚本, 如果dockfile使用CMD,则会替换对应的CMD,CMD就是默认启动的命令。比如mysql启动,则dockfile有对应的CMD [mysqld]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值