【Docker】学习笔记

1. docker基本操作

  • 镜像搜索

    // 直接搜索镜像资源
    docker search mysql
    // 搜索过滤
    docker search --filter "is-official=true" mysql // 官方发布镜像

  • 拉取镜像

    docker pull mysql

  • 查看本地镜像

    docker images

  • 删除本地镜像

    docker rmi mysql
    // 强制删除镜像
    docker rmi -f mysql

  • 保存加载镜像

    docker save 镜像id > 文件名.tar
    // example:
    docker save 8da80fe49fcf>./mysql.tar

    docker load < 文件名.tar
    // example:
    docker load < mysql.tar

    // 加载的镜像会没有名称和TAG,需要重命名
    docker tag [镜像id] [新镜像名称]:[新镜像标签]

  • 创建容器

    docker create --name=mysqlContainer mysql

  • 创建并运行容器

    docker run -itd --name=mysqlContainer mysql

  • 查看容器信息

    // 查看运行中的容器信息
    docker ps

    // 查看包括已停止运行的所有容器的信息
    docker ps -a

  • 停止运行容器

    docker stop mysqlContainer

  • 重新运行容器

    docker restart mysqlContainer

  • 删除容器

    docker rm mysqlContainer

  • 进入退出容器环境:

    docker-compose exec -it [容器的name或ID] /bin/bash

    // 有时候镜像比较精简,没有bash,使用下面的命令
    docker-compose exec -it [容器的name或ID] /bin/sh

    // 退出容器终端界面
    exit

  • 提交容器修改

    docker commit -m "do something" mysqlContainer my_mysql

  • 导入导出容器

    // 导出容器为镜像包
    docker export mysqlContainer > mysql.tar
    // 将镜像tar包导入并命名
    docker import mysql.tar mysqlimage

2. docker开发模式

Docker开发模式,然后把代码挂载到容器。

在开发和测试环境中,推荐使用- v 共享文件夹来存储开发人员的

程序代码,避免频繁打包操作。

  • 端口映射

    // 将宿主机的33060端口与docker的3306端口进行映射
    docker run -itd --name mysqlContainer -p 33060:3306 mysql

  • 文件挂载

    // 将宿主机下指定目录与docker容器目录进行关联,":"前是宿主机目录,后面是容器内目录
    docker run -itd --name mysqlContainer -v /test_mysql:/usr/mysql_folder

  • 文件拷贝

    // 将宿主机下的A.tar 拷贝到容器的/usr/mysql_folder/目录下
    docker cp /test_mysql/A.tar mysqlContainer:/usr/mysql_folder/

3. dockerfile

Dockerfile 是一个文本文件,其中包含我们需要运行以构建 Docker 镜像的所有命令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。Docker 使用 Dockerfile 中的指令自动构建镜像。我们可以 docker build 用来创建按顺序执行多个命令行指令的自动构建。

FROM :使用 FROM 为后续的指令建立基础映像。在所有有效的 Dockerfile 中, FROM 是第一条指令。

LABEL: LABEL 指令用于组织项目映像,模块,许可等。在自动化布署方面 LABEL 也有很大用途。在 LABEL 中指定一组键值对,可用于程序化配置或布署 Docker 。

RUN: RUN 指令可在映像当前层执行任何命令并创建一个新层,用于在映像层中添加功能层,也许最来的层会依赖它。

CMD: 使用 CMD 指令为执行的容器提供默认值。在 Dockerfile 文件中,若添加多个 CMD 指令,只有最后的 CMD 指令运行。

作者:JavaPub

链接:https://www.zhihu.com/question/61349295/answer/2543817956

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

补充:

  • MAINTAINER:维护者信息,可选。

    MAINTAINER CYK

  • COPY:将dockerfile文件所在目录下的本地文件或目录添加到容器中
    COPY指令中,宿主主机上的目录必须是相对于构建时所用的dockerfile所在的目录。

    COPY local_folder/ /usr/mysql_folder/
    COPY local_folder/a.tar /usr/mysql_folder/

  • ENTRYPOINT: 只允许一个,如果有多个,会发生覆盖,只执行最后一个。

    ENTRYPOINT ["nginx", "-g", "daemon off;"]

  • EXPOSE: 用于指定与外界交互的端口号,但并不会关联,需要在运行容器时通过-p来关联这些端口号

    声明容器可以使用80和443端口

    EXPOSE 80 443

  • VOLUME: 用于指定容器运行时创建的匿名数据卷路径,在启动容器docker run的时候,我们可以通过-v参数修改挂载点。即容器运行时,会创建VOLUME指定的目录,任何向该目录中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化,可以避免容器不断变大。

  • WORKDIR: 工作目录,类似于cd命令,会进入到指定目录下

5. docker-compose up -d --build

docker-compose up -d --build

根据dockerfile重新下载镜像,运行容器,不使用缓存

相关推荐
HC1825808583220 分钟前
“倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
学习·生活
学习路上_write24 分钟前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程
非概念30 分钟前
stm32学习笔记----51单片机和stm32单片机的区别
笔记·stm32·单片机·学习·51单片机
无敌最俊朗@2 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习
EterNity_TiMe_2 小时前
【论文复现】STM32设计的物联网智能鱼缸
stm32·单片机·嵌入式硬件·物联网·学习·性能优化
Algorithm15762 小时前
mac上使用docker搭建gitlab
macos·docker·gitlab
L_cl3 小时前
Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
学习
前端SkyRain3 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
青椒大仙KI113 小时前
24/11/13 算法笔记<强化学习> DQN算法
笔记·算法
提笔惊蚂蚁3 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析