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.tardocker 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重新下载镜像,运行容器,不使用缓存