Docker笔记(二)

一、Docker命令
  1. 下载镜像
    语法:docker pull <image>
    docker pull nginx  
    docker pull centos
    
  2. 运行镜像到容器
    语法:docker run -d -p 80:80 <image>
    #-p 将容器端口发布到主机
    #-d 在后台运行容器并答应容器id
    docker run -d -p 80:80 nginx
    
  3. 查看正在运行的镜像
    语法:docker ps
    在这里插入图片描述
  4. 在linux中运行
    在这里插入图片描述
  5. 将镜像保存为tar文件
    语法:docker save <image> > tarName.tar
    在这里插入图片描述
  6. 强制移除镜像
    语法:docker rmi -f <image>
  7. 把压缩包下载下来
    语法:docker load < tarName.tar
  8. 查看所有镜像
    语法:docker images
    在这里插入图片描述
二、Docker启动命令
  1. 启动命令:systemctl start docker
  2. 开机启动:systemctl enable docker
三、Docker 帮助命令
  1. 官方文档地址
  2. 文档命令:docker –help
  3. 显示docker版本信息:docker version
  4. 显示docker系统信息,包含镜像和容器信息:docker info
四、Docker镜像命令
  1. 列出本地镜像:docker images [option]
    -a列出本地所有镜像
    –digests显示摘要信息
    -q显示镜像id
    –no-trunc显示完整进行信息
  2. 从docker hub 中查找镜像:docker search [option] 镜像名(https://hub.docker.com)
    –automated 只列出automated build类型镜像
    –no-trunc显示镜像完整描述
    -s n只显示n以上的评分(stars)的镜像
  3. 加载镜像:Docker pull [options] 镜像名称
  4. 删除本地镜像:docker rmi 镜像名称(参数:-f强制删除)
    删除一个镜像:docker rmi hello-world(:latest)
    删除多个镜像:docker rmi name:Tag name2:Tag
    删除本地镜像(正在使用的镜像不删除):docker rmi -f $(docker images -q)(-q为返回所有镜像的id)
    杀掉进程,然后删除:docker kill 进程id
五、Docker 容器命令
  1. 启动容器:docker run [options] image [COMMAND] [ARG…]
    -d 后台运行
    -it 打开交互容器
  2. 查看日志:docker logs [options] 容器名
    -f跟随打印
    -t显示时间戳
    –tail=n显示n条,一般用来查看新日志
    –since=’’2019-10-10”显示从日期之后的日志
  3. 查看容器中运行的进程信息,支持ps参数
  4. 查看容器运行细节:docker inspect 容器id
六、Docker 工作原理

Docker更小更好
在这里插入图片描述

七、Docker镜像
  1. UnionFS:联合文件系统(该合并的合并到一起,把多个文件系统都合并到联合文件系统,在联合文件系统上,每个文件系统可以在上面运行,当有多个文件系统要使用相同文件时,谁先挂载谁先使用;挂载的都是只读,更改的文件都是副本,副本优先显示;删除:是逻辑删除,标记为删除,实际上A删除,但是B显示文件还在)
  2. Docker镜像是一个分层结构
    eg:tomcat软件包:kernel(实时操作系统)-》 centos-》 jdk-》 tomcat-》 tomcat软件包
  3. 镜像加载原理
  4. 退出容器
    Ctrl+p+q 临时退出容器,保持状态
    Exit 退出容器,不保持装填
  5. 开启一个或多个已经停止的容器/停止容器/重启容器:docker start/stop/restart 容器id
  6. 杀死一个容器:docker kill 容器id前面部分数字(kill相当于拔电源,stop相当于正常关机)
  7. 删除一个或多个容器:docker rm [options] 容器名
  8. 删除所有容器:docker rm -f $(docker ps -q)
  9. rm与stop/kill 区别:rm掉的不在了,stop/kill掉的还在
  10. docker wait:阻塞运行直到容器停止
  11. docker export:将文件系统作为一个tar文档
  12. docker port:列出指定容器的端口映射
  13. docker login:登录一个docker镜像仓库
  14. docker logout:退出登录
  15. docker push [options] image:tag:将本地镜像传送到镜像仓库
  16. docker history:查看指定镜像创建的历史过程
  17. docker save:将指定镜像保存为tar文件
    eg:docker save hello-world > hello.tar
  18. docker load:导入tar文件为镜像;eg: docker load < hello.tar
八、部署自己的网站到nginx上

方式一:更改显示文件(麻烦)
方式二:用Dockerfile(下面使用方式二)

使用当前位置作为Nginx保存位置
在这里插入图片描述
步骤:

  1. 进入正在运行的容器并交互:docker attach [options] container

  2. 进入正在运行的容器并交互:docker exec [options] containerId command [args…]
    -d 后台运行
    -i 交互
    -t 分配一个伪终端
    exec和attach区别
    exec进入,即使exit退出也能保持容器运行
    attach进入,exit退出后,容器不再运行

  3. 在容器和宿主机间互相拷贝数据:
    宿主机—> 容器:docker cp [option] 宿主机文件路径 容器id:容器内路径
    容器—> 宿主机:docker cp [option] 容器id:容器内路径 宿主机文件路径

  4. 从容器创建一个新的镜像:docker commit [options] containerId imageName:tag(容器id 镜像名:标记,如latest等)
    -a (author)提交镜像的作者
    -c 使用docker指令来创建镜像
    -m 文字说明
    -p (pause)提交时容器暂停(关机后再打开也还存在)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  5. Tomcat
    在这里插入图片描述
    在这里插入图片描述
    Tomcat 默认访问webapps页面,但是webapps中没有东西,东西都在webapps,所以默认访问找不到页面,如下:所以我们要对文件名进行修改
    在这里插入图片描述
    改名
    在这里插入图片描述
    在这里插入图片描述
    把tomcat镜像放到本地(根据tomcat创建新镜像,创建容器,再提交到镜像,就变成自己的镜像,下次打开的时候不会不见)
    在这里插入图片描述
    在这里插入图片描述

  6. Docker容器数据卷
    1.Docker理念:将运行的环境与软件打包形成一个容器来运行,需要对容器的数据进行保存,也就是数据持久化。

    • 提交数据到镜像,保存
    • 使用docker数据卷。卷:是目录或者文件,存在于一个或多个容器内,但不属于联合文件系统。

    2.数据卷:可以数据持久化保存,独立于容器的生命周期,所以docker在结束或者删除容器时候不会删除挂载的数据卷

    1. 数据卷可以在容器间共享数据
    2. 数据卷修改数据直接生效,互相直接使用
    3. 数据卷怎么改,都不会包含在镜像的更新中
    4. 数据卷的生命周期会一直持续到没人用它为止

    3.如何使用数据卷
    3.1.使用命令绑定:docker run -it -v /宿主机绝对路径:容器内绝对路径 imageName
    在这里插入图片描述
    修改数据也共享
    在这里插入图片描述
    关掉容器后依然共享,因为两个文件已经绑定。
    ***查看是否绑定:docker inspect 镜像部分id
    3.2.设置权限
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4.用Dockerfile构建容器数据卷
    4.1.在宿主机根目录下,新建mydockerfile文件夹,在文件夹内新建Dockerfile文件
    4.2.用volume指令给镜像添加一个或多个数据卷(容器数据共享)
    在这里插入图片描述
    4.3. 通过build生成新镜像
    在这里插入图片描述
    4.4. 运行镜像为容器
    在这里插入图片描述
    4.5. 通过inspect可以查看容器信息,找到容器数据卷对应在宿主机
    在这里插入图片描述
    4.6. 宿主机中进入到上面数据卷的目录
    在这里插入图片描述
    4.7. 在容器中新建文件,在宿主机新建文件,查看数据是否共享(容器和宿主机)
    在这里插入图片描述
    在这里插入图片描述
    注意:通过数据卷实现数据共享,需要先创建数据卷,主机和容器都进入到数据卷中,(容器通过数据卷名进入,主机通过数据卷id进入,可以在host通过inspect查看对应id)然后主机需要进入到对应数据卷的_data下。和文件共享系统不一样
    5.数据卷容器(命名的容器挂载数据卷)(容器和容器共享使用数据卷容器)
    命名的容器挂载数据卷,其他的容器通过挂载这个容器(父容器),该命名的容器称为数据卷容器
    5.1. 父容器
    在这里插入图片描述
    5.2. 子容器1
    在这里插入图片描述
    5.3. 子容器2
    在这里插入图片描述
    5.4. 主机host
    在这里插入图片描述

  7. 在docker中安装MongoDB和mysql并且在docker中运行
    7.1.下载:docker pull mysql、docker pull mongo
    7.2.运行mysql镜像为容器:docker run -itd –name mysqlcon -p 3306:3306 -e
    MYSQL_ROOT_PASSWORD=123456 mysql
    在这里插入图片描述
    7.3. 同样操作mongo
    在这里插入图片描述

  8. 了解Dockerfile
    8.1Dockerfile执行流程
    8.1.1.每条指令必须大写
    8.1.2.指令从上到下顺序执行
    8.1.3.每一条指令都会创建一个容器并提交一个镜像(每一条指令在对原来的镜像操作后都会创建一个新的镜像层,dockerfile会基于刚刚提交的镜像层再运行一个容器,相当于一条产品加工流水线,每个工人都对产品进行操作,再放到流水线上交给下一个工人操作,工人就相当于每一个命令)
    8.1.4.下一条指令基于上一步提交的镜像运行一个容器,操作然后提交一个镜像
    8.1.5.如果还有下一条,重复执行步骤4,直到执行完毕
    在这里插入图片描述
    8.2.Dockerfile中的命令
    8.2.1. FROM:必须放在第一条指令(如果不知道用什么镜像,可以写成scratch,scratch是一个特殊的空白镜像),eg:FROM scratch
    8.2.2. MAINTAINER:镜像的维护人员的信息,eg:MAINTAINER [email protected]
    8.2.3. RUN:用于执行run后面跟着的命令行命令,有两种形式:1》shell格式:RUN shell命令行;2》exec格式:RUN [“可执行文件”,”参数1”,”参数2”](方括号内的经过编译是json数据,必须使用双引号;如果run代码过长,用&&连接,\来换行);
    8.2.4. EXPOSE:容器对外暴露一个端口;
    在这里插入图片描述
    8.2.5. WORKDIR:指定从镜像创建容器时,进入容器的时候默认目录
    在这里插入图片描述
    Redis:
    在这里插入图片描述
    8.2.6. ENV:用来构建镜像时,设置环境变量,后面呢会用来设置版本信息
    在这里插入图片描述
    8.2.7. VOLUME:共享数据卷的位置
    在这里插入图片描述
    8.2.8. COPY:复制指令,为从宿主机复制文件到容器 指定路径;COPY 源路径 目标路径、COPY [“源路径”,”目标路径”]
    (注意:文件拷贝到文件夹时,文件夹结尾的/别漏了,COPY 1.txt /usr/tmp/;源路径支持通配符:COPY haha* /usr/tmp/ 、COPY ha?.txt /usr/tmp/)
    在这里插入图片描述
    8.2.9. ADD:从宿主机复制文件到容器指定路径,同COPY,但也有额外功能:
    1》支持自动解压缩,如gzip,tar;
    2》会自动处理url
    在这里插入图片描述
    8.2.10. LABEL:镜像的描述信息
    在这里插入图片描述
    8.2.11. CMD:指定容器开始运行的时候执行的命令,也就是镜像run的时候,一个Dockfile只有最后一个会生效,有两种格式:
    1》CMD shell脚本;
    2》CMD [“可执行文件”,”参数1”,”参数2”](Dockerfile中的CMD命令可以被在docker run image params时后面的参数所替换)
    8.2.12. ENTRTPOINT:和CMD一样,也是指定容器启动时的参数
    8.2.13. ONBUILD:用于当其他Dockerfile以我作为基础镜像时,才运行的指令
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  9. 使用Dockerfile自己创建镜像
    9.1. 创建一个自己的centos,自带vim和网络
    9.2. 新建一个文件夹createimagesteset,在该文件夹下打开终端
    9.3. 编辑Dockerfile文件,build自己的镜像
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    9.4. 把自己创建的镜像传到阿里云
    在这里插入图片描述
    新建仓库,上面有教程,直接复制到终端运行就可以


完……

发布了26 篇原创文章 · 获赞 2 · 访问量 787

猜你喜欢

转载自blog.csdn.net/id__39/article/details/104521166