Docker知识点记录

一、docker是什么/h1>
  1. docker:是一个应用打包,发布,部署工具。

  2. docker优势:跨平台部署,性能优越(按需分配),自动化部署,稳定性优越。

  3. docker运行方式:Docker是C/S模式,以客户端和守护进程的方式来运行。

  4. 一个docker容器同时只能管理一个进程,这个进程退出后,容器也就退出了,当然一个容器里可以同时运行多个进程。当容器启动完后执行某脚本后,该进程结束了,其他进程也结束了,所以该容器自动退出了,解决方案:我们可以让该脚本一直运行不停止。 (知识来自博客:https://blog.csdn.net/zhuchunyan_aijia/article/details/81143481tm_source=blogxgwz8)

  5. docker怎么实现宿主机上的代码能够实时同步到docker ——>使用文件挂载方法(bind mount)

  6. docker怎么能然数据持久化,不会随着容器的丢失而丢失,特别是容器运行过程中产生的数据 —–>使用文件挂载的方式(volume),容器创建在宿主机上的目录进行管理。

  7. 多容器通信:只需要将几个容器放入同一个 络中就可以;针对复杂的多个容器docker提供了docker-compose来管理。

  8. 怎么实现docker’数据的备份和迁移:bind mount方式可以直接拷贝宿主机上的数据;volume方式有容器创建和管理,可以借助Ubuntu容器将数据弄出来。详情见:https://docker.easydoc.net/doc/81170005/cCewZWoN/XQEqNjiu

  9. docker三剑客
    ①. docker-machine:解决docker运行环境问题,一个linux的虚拟机。win10已经有hyper-v虚拟机,可以直接运行。(目前已经淘汰)
    ②. docker-componse:容器编排技术,例如:两个容器之间通信
    ③. docker-swarm:解决多主机多容器调度部署问题。(已经淘汰,目前用K8S代替。)

  10. run,cmd,endpoint三个指令的区别
    ①. run:用于镜像打包过程的命令,常用来安装软件包。
    ②. cmd:容器启动后执行的命令和参数,但是参数会被 docker run命令指定参数替代
    ③. endpoint:配置容器启动时执行的命令和参数,其参数不会被docker run命令指定的参数替代。

docker快速上手资料:https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP

二、docker打包之dockerfile

docker file关键字于语法介绍:注意一点,写命令的时候要分清楚宿主机和容器的路径关系,以及运行时机

  • FROM : 指定基础镜像,第一行书写
  • MAINTAINER xxx 指定维护者
  • ADD /mnt/disk/app /app 复制代码,将本地需要运行的执行文件拷贝到容器中
  • COPY /mnt/disk/jslave/config.cfg /app 拷贝代码
  • WORKDIR /app 设置容器启动后的默认目录
  • LABLE name=‘username’ 为镜像添加元数据
  • ENV python /user/bin/python3.8 设置镜像环境变量
  • VOLUME /app 挂盘
  • EXPOSE 8080 映射端口
  • RUN pip install -r requirements.txt 运行pip操作,一般用来安装软件包
  • CMD [‘python’, ‘/app/app.py’] 用来设置容器启动后默认执行的命令,但是CMD设置的命令会被docker run后面的命令参数替换
  • ENTRYPOINT 配置容器启动时执行命令(一定会执行)

1. docker yaml文件之单双引 问题:

代码如下(示例):

错:启动容器 错:/bin/bash: 1: [python,:not found
错分析:yaml中CMD 不能使用单引 ,要用双引

2. docker yaml文件之注释问题

代码如下(示例):

错:启动容器 错:failed to solve with frontend dockerfile.v0: failed to create LLB definition: dockerfile parse error line 1: FROM requires either one or three arguments
错分析:yaml中会把在同一行的注释当成参数,所以注释必须单独为一行


3. docker yaml文件ADD、COPY不支持绝对路径

代码如下(示例):

错:容器build的时候 错,
failed to compute cache key: “/D:01.WORKSPACE01.dockerrequriments.txt” not found: not found
错分析:docker file中 ADD,COPY只能使用build中PATH路径的相对路径,不能使用绝对路径。


4. docker yaml文件RUN shell脚本

代码如下(示例):

错:容器build的时候 错,
=> ERROR [4/6] RUN “mkdir -p /app/env”
#8 0.471 /bin/sh: 1: mkdir -p /app/env: not found
错分析:docker file中 RUN语句常用来执行软件安装,容器未启动时,时无法创建文件夹的;其中CMD时容器启动后默认执行的参数,参数可以被docker build中的参数取代;ENTRYPOINT 时容器启动时的命令,一定会执行


5. 正确的dockerfile文件—打包python

正确较为全面的DockerFile文件

三、docker命令汇总

1. docker 下载命令

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

  • OPTIONS:-a , Download all tagged images in the repository
    -q, Suppress verbose output
  • 举个例子:下载mysql:【 docker pull mysql】【 docker pull mysql:5.7.20】

2. docker 打包命令

docker build [OPTIONS] PATH | URL | –

  • OPTIONS:-f 指定dockerfile文件路径
    -t 指定dockerImage的名字和版本

3.docker 启动命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
options参数介绍:

  • -d 后台运行
  • -i 打开STDIN,以交互模式运行容器,通常与 -t 同时使用
  • -t 分配一个伪tty,一般与 -i 连用
  • -p 可以指定容器对宿主机暴露的端口
  • -v 指定容器挂载方式(bind mount,volume, tmpfs mount)

常见的几个例子:

  • 后台执行容器,能够登陆控制台管理: docker run -i -t -d image_name
  • 为容器指定一个名字:docker run -d –name=my_container_name image_name
  • 容器暴露80端口给宿主机:docker run -d –name=my_container_name -p 80:80 image_name
  • 宿主机目录挂载到容器: docker run -d –name=my_container_name -v 绝对路径:容器目录 image_name
  • 容器挂载目录在宿主机上:docker run -d –name=my_container_name -v 自定义取宿主机上挂载目录名字:容器目录 image_name

4.docker 查看命令

docker ps [OPTIONS]

  • docker ps 查看当前正在运行的容器 ;
  • docker ps -a 查看所有运行过,正在运行的容器详情
  • docker ps -n 5 Show n last created containers
  • docker ps -l Show the latest created container

docker images [OPTIONS] [REPOSITORY[:TAG]]

  • docker images 查看所有docker镜像
  • -a ,-f ,-q和docker ps一样

docker volume ls 查看volume列表

docker network ls 查看 络列表

docker exec -it container_id bash 进入容器

docker container attach contain_id 进入容器,当多个终端同时进入的时候,所有窗口会同步显示; 实际操作中改命令卡住,特别注意,推出的时候,容器会同步推出,所以需要用 Ctrl+P+Q来退出。

5.docker 操作命令

docker rm container-id 删除指定id的容器

docker rm container-id 删除指定id的容器

docker rmi image-id/image-name:version 删除指定id的镜像

docker stop/start container-id 停止/启动指定id的容器

6.docker 络操作命令

docker network COMMAND

  • connect:Connect a container to a network
  • create:Create a network
  • disconnect: Disconnect a container from a network
  • inspect: Display detailed information on one or more networks
  • ls:List networks
  • prune: Remove all unused networks
  • rm: Remove one or more networks

举个例子:应用要与数据库通信,则需要通过 络将应用和MySql建立通信,方法就是部署在同一个 络中。

  • 创建 络:docker create network your_network_name
  • 运行MySql在这个 络:docker run -d –name 容器别名 –network 络名称 –network-alias 设置 络别名 -t 镜像名称:版本
  • 运行你的容器,指定相同的network:docker run -d -t 镜像:版本
    注意:若容器已经启动,则可以使用如下命令进行 络切换:docker network connect –alias mysql my-network mysql

7.docker 其他操作命令(docker –help)

docker [OPTIONS] COMMAND

Docker知识点记录

总结

Docker 打包,发布,运行的方式极大的提升了应用程序的可移植性,是运维三板斧之一。

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8597 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年3月10日
下一篇 2022年3月10日

相关推荐