Docker的使用

3. 使用

3.1启动和停止
  1. 启动docker服务: systemctl start docker
  2. 停止docker服务:systemctl stop docker
  3. 重启:systemctl restart docker
  4. 查看docker状态:systemctl status docker
  5. 查看docker的版本:docker -v
  6. 开机自动 启动:systemctl enable docker
3.2 docker镜像

Docker镜像可以理解为一个精简的Linux操作系统安装包。通过镜像可以快速的启动容器。

  1. 查看镜像:docker images

  2. 拉取镜像:

    • 在这里找镜像(docker hub)https://hub.docker.com/_/python/tags

    • docker pull 镜像名称:标签
      # 如果拉取镜像时,不加标签,默认拉取最新的镜像,标签为latest
      
    • 比如:拉取redis

      docker pull redis:alpine3.17
      

  1. 搜索镜像

    docker search 镜像名称
    # 不能直接搜索对应的详细版本信息,只能去网站上找:
    网站地址:https://hub.docker.com/_/python/tags
    

  1. 删除镜像

    # 删除镜像有三种方法
    1. docker rmi 镜像名称:标签
    2. docker rm -f 镜像名称:标签
    3. docker rm i 镜像id
    
  2. 修改镜像名称

    docker tag 老镜像名称:标签 新镜像名称:标签
    
    
    • redis名称修改为redis3.7

      docker tag redis:alpine3.17 redis3.17:ccx
      
    • 再次查看镜像

由图可见,多了一个镜像名称为redis3.7的镜像

  • 可以删除原来的镜像

    docker rmi redis:alpine3.17
    

3.3 docker容器

容器就是根据镜像启动的一个进程,它是一个运行的系统。

容器常用命令
  1. 创建容器

    创建容器后会自动执行cmd里面的命令,通过

    docker image inspect python:3.7.16-slim
    

    可以查看cmd命令是什么

    如果退出容器,容器则会停止

    创建容器有两种方式:

    • 交互式方式创建容器

      dockers run -it --name=python3.7 python:3.7.16-slim
      
      • -i:表示以交互式方式进行容器
      • -t:分配一个命令终端

    • 守护式方式创建容器

      /bin/sh:运行容器的时候执行的命令,会覆盖cmd里面的命令

      docker run -di --name python3.7.16 python:3.7.16-slim /bin/sh
      

      • 注意哈:如果容器名称已存在的话,创建容器会失败

        可以使用docker ps -a来查看所有的容器

  2. 查看容器

    # 1. 查看正在运行的容器
    docker ps
    # 2. 查看所有容器
    docker ps -a
    
  3. 删除容器

    docker rm 容器名称/容器id
    

  4. 进入容器里

    docker exec -it py52  /bin/sh
    #指定root用户登陆容器,场景是需要执行root用户才能执行的命令的时候
    docker exec -it -u 0 py52  /bin/sh
    docker exec -it --user root py52  /bin/sh
    

  5. 退出容器

    exit
    

    退出容器后,当前容器是在运行的

  1. 容器的启动和停止

    启动容器
    docker start 容器名称(容器id)
    重启容器
    docker restart 容器名称(容器id)
    停止容器
    docker stop 容器名称(容器id)
    docker kill 容器名称(容器id)
    

  1. 文件拷贝

宿主机文件和容器文件是隔离的

docker cp 宿主机需要拷贝的容器或者目录  容器名称:容器目录

docker cp test.py  py52:/mnt/
  1. 文件映射(存疑)

    宿主机文件和容器文件相互同步的

    docker run -v 宿主机目录(文件):容器内目录(文件)
    

Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所学的指令和说明

4. Dockerfile

dockerfile命令说明主要参考文章:http://testingpai.com/article/1634806562678

4.1 Dockerfile编写规则
  1. 指令大小写不敏感,为了区分习惯上用大写

  2. Dockerfile非注释行第一行必须是FROM

  3. 文件名必须是Dockerfile

  4. Dockerfile指定一个专门的目录为工作空间

  5. 所有引入映射的文件必须在这个工作空间目录下

  6. Dockerfile工作空间目录下支持隐藏文件(.dockeringore)

  7. (.dockeringore)作用是用于存放不需要打包导入镜像的文件,根目录就是工作空间目录

  8. 每一条指令都会生成一个镜像层,镜像层多了执行效率就慢,能写成一条指定的就写成一条

4.2 Dockerfile指令说明
FROM python:3-alpine  # 第一行非注释行必须是FROM  
WORKDIR /app         #设置容器的工作空间目录
ADD ./xxx.txt /app   #讲宿主机的依赖包文件添加到镜像里面
RUN pip install -r xxx.txt  #安装依赖包,RUN是在打镜像的过程中执行的命令,建议少用RUN
CMD ["python","start.py"]   #创建容器后自动执行的命令,但是如果启动容器的时候传了命令进去,这个命令会被覆盖

  1. FROM:基础 镜像
 1.1、FROM是Dockerfile文件开篇第一个非注释行代码
 1.2、用于为镜像文件构建过程指定基础镜像,后续的指令都基于该基础镜像环境运行
 1.3、基础镜像可以是任何一个镜像文件
 1.4、docker build 会在docker宿主机上查找指定的文件,如未找到会自动去Docker Hub Registry上拉取
 1.5、如果没找到对应的镜像就会返回错误信息
  1. WORKDIR:用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY、ADD指定设定工作目录
2.1、WORKDIR /mnt,如果目录不存在会自动创建,包括他的父目录
2.2、一个Dockerfile中WORKDIR可以出现多次,其路径也可以为相对路径,相对路径是基于前一个WORKDIR路径
2.3、WORKDIR也可以调用ENV指定的变量
2.4:举例
     from python:latest
     workdir /mnt
     run touch a.txt
     workdir /usr
     run touch b.txt
  1. ADD:类似于COPY指令,ADD支持tar文件和URL路径
3.1. 语法:ADD <src> <dest>
  1. RUN:docker build镜像构建的时候需要执行的shell命令默认"/bin/sh -c"运行

    1、docker build过程中需要执行的命令
    2、RUN是在镜像构建完成之后运行结束
    3、RUN执行的命令只能基于基础镜像的命令,执行之前先要确定基础镜像是否有该命令
    4、一个Dockerfile可以写多个RUN
    

语法一:

语法一、RUN command1 && command2....  
          1、通常是shell命令且以"/bin/sh -c"来运行它,此时运行为shell的子进程
          2、进程在容器中的PID!=1,不能接收unix信号,当使用docker stop 将无法接收到
          3、RUN echo "test_demo" > a.txt 此时可以使用shell特性

语法二:

语法二、RUN ["executable","param1","param2"]
          1、executable为要运行的命令
          2、param1为命令运行的参数
          3、不会以"/bin/sh -c"运行(非shell子进程),因此不支持shell操作符如变量替换和通配符(?,*等)
          4、如果运行命令需要依赖shell特性可以增加参数,手动启动为shell的子进程
             RUN ["/bin/bash","-c","executable","param1"]
          5、list中的参数要使用双引号
  1. CMD:启动容器指定默认要运行的程序或命令,默认"/bin/sh -c"运行

    1、docker run过程中需要执行的命令
    2、CMD运行结束后容器就将终止
    3、CMD指定的命令将可以被 docker run 最后面的命令覆盖
    4、一个Dockerfile写多个CMD只有最后一个CMD会生效
    
4.3 使用Dockerfile一个python环境镜像
1. 编写Dokerfile文件
FROM python:3-alpine  # 第一行非注释行必须是FROM  
WORKDIR /app         #设置容器的工作空间目录
ADD ./xxx.txt /app   #讲宿主机的依赖包文件添加到镜像里面
RUN pip install -r xxx.txt  #安装依赖包,RUN是在打镜像的过程中执行的命令,建议少用RUN
CMD ["python","start.py"]   #创建容器后自动执行的命令,但是如果启动容器的时候传了命令进去,这个命令会被覆盖

我的dockerfile

FROM python:3.7.16-slim
WORKDIR /app
ADD requirements.txt /app 
RUN pip install -r requirements.txt
CMD["python","run_server.py"]
  • python中如何生产依赖包:python freeze > xxx.txt
  • 安装依赖包文件中的包:pip install -r xxx.txt
2. 构建镜像
docker build -t 镜像名称:标签 Dockerfile所在的目录
.:表是当前目录
docker build -t .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值