Docker笔记(二)------docker基本命令

全面解析Docker命令、镜像管理、容器操作及Dockerfile应用,深入理解Docker工作原理,掌握部署网站至Nginx及数据库安装运行技巧。

一、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 abc@qq.com
    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. 把自己创建的镜像传到阿里云
    在这里插入图片描述
    新建仓库,上面有教程,直接复制到终端运行就可以


完……

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值