Docker学习

docker 命令学习

  • 对于docker的学习以及一些命令的记录

image 镜像常用

  • image也就是镜像,可以理解为一个个安装包
  • docker images 查看所有的镜像
  • docker pull mysql 拉取镜像
  • docker search mysql 搜索镜像
  • docker rmi 镜像名:tag | 镜像id 后面加tag或者镜像id来删除镜像
  • docker rmi -f 镜像名:tag | 镜像id 强制删除以及创建容器的镜像,会将容器和镜像一并删除
  • docker images -a 显示所有镜像
  • docker images -q 查看所有的镜像id
  • docker rmi -f $(docker images -q) 强制删除所有的镜像$( )嵌套

container 容器的相关操作

  • docker run

    • docker run 镜像名:tag | 镜像id 开启运行镜像,由于容器本身具有隔离性,容器内的端口号无法被外界监听,可以开启多个容器与多个端口的映射,多节点部署
    • docker run -p 8080(宿主机端口):8080(容器端口) tomcat:8.0-jre8 宿主机端口与容器中端口进行映射
    • docker run -d -p 8080(宿主机端口):8080(容器端口) tomcat:8.0-jre8 后台运行该容器
    • docker run -d(后台运行) -p 8080:8080(可以书写多个) --name tomcat01(容器名称) tomcat:8.0-jre8(镜像名称:tag) 启动容器 指定名称 后台运行 端口映射
    • docker load -i tar文件名 将打包tar文件导入到自己的docker仓库
  • docker ps

    • docker ps 查看容器
    • docker ps -a 查看所有容器(包括运行和非运行)
    • docker ps -q 查看正在运行的容器的Id
    • docker ps -aq 查看所有容器的Id
  • 停止 重启

    • docker start 容器名或者容器Id 开启容器
    • docker restart 容器名或者容器Id 重启容器
    • docker stop 容器名或者容器Id 正常停止容器运行
    • docker kill 容器名或者容器Id 立即停止容器运行
  • 删除容器

    • docker rm 容器Id|容器名称 删除停止的容器
    • docker rm -f 容器Id|容器名称 删除正在运行的容器
    • docker rm -f $(docker ps -aq) 删除所有容器
  • 查看日志

    • docker logs 容器id | 容器名称 查看日志(不会实时更新)
    • docker logs -f 容器id | 容器名称 实时查看日志
    • docker logs -tf 容器id |容器名称 实时查看日志的同时查看时间戳
    • docker top 容器id | 容器名 查看容器内的进程
    • docker exec -it 容器名|容器id bash 进入容器并执行控制台交互
    • exit 退出进入的容器
  • 操作系统与容器的文件交互

    • docker cp 容器id|name :容器内资源路径 操作系统中路径 首先进入容器,将容器内的文件拷贝到操作系统中
    • docker cp 文件|目录名 容器(id,name):/容器内资源路径 从操作系统复制文件到容器
  • 查看容器内部细节

    • docker inspect 容器(name,id) 查看容器内细节
  • 数据卷 Volume

    • 作用:实现宿主机系统和容器之间的文件共享,可以相互共享一个文件目录等…共享了之后当对宿主机的文件进行修改之后能直接影响到容器,有了数据卷机制之后能将宿主机的文件目录映射到容器的文件目录
    • 要在容器启动之前开启数据卷
    • 1.自定义数据卷目录:
      docker run -d -p 8080:8080 --name tomcat01 -v 宿主机目录:容器内目录 tomcat:8.0-jre 路径必须为绝对路径
    • docker run -d -p 8080:8080 --name tomcat02 -v /root/apps/:/usr/local/tomcat/webapps tomcat:8.0-jre8
    • 2.自动数据卷目录
    • docker run -d -p 8080:8080 --name tomcat02 -v xx:/usr/local/tomcat/webapps tomcat:8.0-jre8
      1. 代表一个数据卷的名字,名称可以随便写,docker在不存在时自动创建这个数据卷,同时自动映射宿主机中某个目录
      2. 同时在启动容器时会将aa对应容器目录中全部内容复制到aa映射目录中
      3. 就是说会在宿主机中自动创建xx这个目录并且把容器中的数据复制一份到宿主机中,具体在哪不知道,需要去搜索一下
      4. 该方法在容器中创建redis,mysql使用,这样可以把数据备份到宿主机中,就算容器被删除,在宿主机中的xx还是存在的,我可以开启另一个redis或者mysql容器来挂载到当前的xx数据卷
      5. 不想对容器中的数据有写操作,可以采用这种数据卷方式,类似一种持久化机制,需要对容器有写操作时,用第一种方式
  • 把容器打包成一个镜像

    • 部署到容器之后,我们可以把整个容器打包成一个镜像,这样下次可以直接运行这个镜像,这个镜像包含我们之前部署的内容
    • docker commit -m "描述信息" -a "作者信息" (容器id或者容器名称) 打包的镜像名称:tag
    • docker commit -m "deploy test project" -a "kelian" 91ddc621sd2f test-tomcat:1.0
    • docker save 镜像名称:tag -o 文件名 将镜像导出成新的文件名可以进行备份
    • docker save test-tomact:1.0 -o test-tomcat-1.0.tar把tar包给别人之后可以用load方式load进docker
    • docker load -i test-tomcat-1.0.tar load进docker
  • docker中容器之间的网络配置

    • docker 允许通过外部访问容器或容器互联的方式来提供网络服务
    • docker容器与操作系统的通信机制

    • 当docker启动时,会自动在主机上创建一个docker0虚拟网桥,实际上是linux的一个bridge,可以理解为软件交换机。它会挂载到它的网口之间进行转发
    • 当run一个容器的时候,会默认给容器氛围172.17.0.x的ip,这样所有的容器在一个网段里面,当进行相互的通信时,会使网络阻塞
    • 一般我们创建一个容器,就对其分配一个网桥

    1. docker network ls 查看默认网桥
    2. docker network creat xxx(网桥name) 创建一个网桥
    3. docker run -d -p 8081:8080 --network ems --name tomcat03 tomcat 创建容器并且配置容器的默认网桥为ems,一旦在启动容器时指定了网桥,在这个网桥中的任何容器会对容器的IP地址与容器的名字进行映射,我们只需要访问名字就能访问对应的iphttps://tomcat01:8080
    4. docker network rm 网桥name 删除对应的网桥
    5. docker inspect ems 查看网桥内的详细信息
  • 数据卷详细

    • docker run -d -p 8081:8080 --name tom03 -v /Users/kelian.li/other:/usr/local/tomcat/webapps:ro tomcat 后面加ro表示readonly,宿主机的改变会影响到容器,但是容器不能有写操作
    • docker volume ls 查看数据卷
    • docker volume prune 删除所有数据卷
  • Dockerfile

    • Dockerfile用来帮助我们自己构建一个自定义的镜像,日后用可以将自己应用打包成镜像,这样就可以让我们应用进行容器运行
    • FROM

    • 在指定目录下vim Dockerfile在第一行写上FROM:centos7代表该镜像基于centos7构建的
    • docker build -t mycentos7:01 .(表示构建当前目录中的所有上下文)
    • RUN

    • 构建镜像时需要运行的指令
    • 在Dockerfilr文件中第二行写入RUN yum install -y vim会在centos7中创建vim
    • EXPOSE

    • 当前容器对外暴露出的端口号
    • 在Dockerfile文件中写上EXPOSE 8080该镜像暴露的端口,这样之后才能在-p指令中映射对应的端口号
    • WORKDIR

    • 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
    • WORKDIR /workdocker run -it mycentos7:03进入centos7容器之后会自动进入WORKDIR的目录,而不是根目录
    • ENV

    • 用来在构建镜像过程中设置环境变量
    • ENV BASE_DIR /data/bb 采用映射的方式将/data/bb作为value,BASE_DIR作为key,后面的代码中要用到该目录的时候可以直接使用$BASE_DIR
    • ADD

    • 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
    • 使用与COPY相同但是ADD可以加URL链接
    • COPY

    • 类似于ADD,拷贝文件和目录到镜像中,将从上下文目录中<原路径>的文件/目录复制到新的一层的镜像内<目标路径>位置
    • COPY aa.txt /data/bb将宿主机中当前dockerfile文件夹中的aa.txt文件一起打包进容器内的/data/bb中
    • VOLUME

    • 容器数据卷,用于数据保存和持久化工作
    • VOLUME /data/bb 允许该目录可以使用数据卷挂载
    • CMD

    • 指定一个容器启动时要运行的指令,Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
    • docker run mycentos7:17 echo "i love docker" 后面的指令会覆盖掉CMD中的第一条指令
    • ENTRYPOINT

    • 指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数
    • ENTRYPOINT ls 容器启动的时候会自动执行ls查看指令,CMD和ENTRYPOINT合起来用时,用json结构
  • docker-compose

    • 实现对Docker容器集群的快速编排,定位:定义和运行多个Docker容器的应用,同时可以对多个容器进行编排(编排是指容器的执行顺序)
    • 项目(project):有多个服务共同组成一个完整业务单元,定义在docker-compose.yml文件中
    • 服务(service):一个服务对应一个应用容器,在一个项目中可以存在多个服务
    • 创建过程
      1. 创建一个docker-compose.yml文件在这里插入图片描述
      2. docker-compose up 启动这个项目的所有服务,必须保证运行命令的目录存在docker-compose.yml
模版命令
docker-compose.yml
   version: " "           #设定compose的版本
   services:              #用来书写当前项目中哪些容器服务
   	tomcat01:       #服务名
   	images: tomcat                   #指定使用镜像   image:tag
   	container_name: tomcat     #指定启动时容器名称    --name
   	ports:      #指定容器端口与宿主机端口映射 -p
   		- "8080:8080"
   	volumes:     #指定容器中哪些路径与宿主机路径进行数据卷映射
   		- /root/apps: /usr/local/tomcat/webapps
   		- tomcatwebapps: /usr/local/tomcat/webapps
   	networks:   #指定容器启动后使用哪个网桥
   		- aa
   	command: xxxx    #用来覆盖容器默认启动命令
   	envoriment:    #用来指定容器启动时环境参数
   		- MYSQL_ROOT_PASSWORD=root
   	env_file:    #用来将environment环境中配置放入指定配置文件中
   		- ./mysql.env #必须是以env结尾的文件
   	depends_on:  #当前容器的运行依赖于其他容器,先运行其他容器才能运行当前容器
   		- tomcat02   #写的是服务名
   	build:  #用来指定Dockerfile所在目录,先根据build中Dockerfile自动构建镜像,自动运行容器
   		context: ./demo  #指定上下文目录dockerfile所在目录
   		dockerfile: Dockerfile  #dockerfile文件名
   	container_name: ...............
   	..........
   	......
   volume:
   	tomcatwebapps:
   	external:
   		true
   networks:
   	aa:
   		external:
   			true
   	
  • docker-compose up -d 后台启动
  • docker-compose down 关闭docker-compose中的所有服务,并关闭网络
  • docker-compose exec xxx(yml中声明的服务id) bash 进入compose中的容器
  • docker-compose ps 查看当前docker-compose中运行的容器
  • docker-compose restrat 重启
  • docker-compose rm (服务id) 删除
  • docker-compose start / stop
  • docker-compose top 查看compose容器内运行的进程
  • docker-compose pause/unpause 服务id 暂停和继续compose中的服务容器

视频链接:https://www.bilibili.com/video/BV1ZT4y1K75K?p=31
完结!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值