Docker Command and Dockerfile
镜像相关命令
# 下载镜像
docker pull xxx
# 搜素镜像
docker search xxx
# 查看已经下载了哪些镜像
docker images
# 查看已下载镜像的id
docker images -q
# 删除镜像
docker rmi containerId/SOURCE_IMAGE[:TAG]
#删除所有镜像
docker rmi $(docker images -q)
docker images -q | xargs docker rmi
# 删除tag为<none>的镜像
docker rmi | xargs docker images | awk '{if ($2 == "<none>" )print $3}' | xargs docker rmi -f
容器相关的命令
# 载入一个本地镜像
docker load -i tomcat-8.0-jre.tar
# 启动一个容器
docker run -dp 8080:8080 tomcat-8.0-jre --name tomcat
# 查看正在运行的容器
docker ps
# 查看全部容器的id
docker ps -q
# 查看全部容器
docker ps -a
#运行 重启 停止 杀掉容器
docker start/restart/stop/kill containerId/name
# 删除已创建的容器
docker rm containerId/name:tag
docker rm $(docker ps -q)
# 查看日志
docker logs containerId/name
# 实时显示日志
docker logs -tf containerId/name
# 行首添加时间 的日志
docker logs -tail 5 containerId/name
# 查看容器资源情况
docker top containerId
# 进入容器的交互模式
docker exec -it containerId bash
# 复制 容器中的文件、目录到 宿主机
docker cp containerId:/root/test.txt /root/
# 复制 宿主机的文件、目录到 容器中
docker cp a.txt containerId:/root/
# 打包一个镜像
docker commit -m "description xx" -a "author" containerId SOURCE_IMAGE[:TAG]
docker save redis:latest -o redis-cluster.tar
# 上传到docker hub仓库
docker tag redis:latest docker.io/whalefall541/redis:0.01
docker push docker.io/whalefall541/redis:0.01
# 查看docker 网络配置
docker network ls
# 创建自定义网桥
docker mynetwork create mynetwork
# 将容器指定到 创建的网桥上
docker run -dp 80:80 --network mynetwork redis
# 删除网桥
docker newnetwork rm mynetwork
# 查看网桥
docker inpsect mynetwork
# 数据卷指定
# docker run -dp 80:80 tomcat -v /root/webapps:/root/webapps
docker run -dp 80:80 tomcat -v aa:/root/webapps
# 数据卷创建
docker volume create volume_1
# 删除所有未使用的卷
docker volume prune
docker rm volume_1
# 查看数据卷
docker inspect volume_1
Dockerfile
- ADD
- COPY
- ENV
- EXPOSE
- FROM
- LABEL
- STOPSIGNAL
- USER
- VOLUME
- WORKDIR
- ONBUILD (when combined with one of the supported instructions above)
详细教程请看官网[Dockerfile][https://docs.docker.com/engine/reference/builder/]
Understand how CMD and ENTRYPOINT interact
Both CMD and ENTRYPOINT instructions define what command gets executed when running a container.
There are few rules that describe their co-operation.
Dockerfile should specify at least one of
CMDorENTRYPOINTcommands.ENTRYPOINTshould be defined when using the container as an executable.CMDshould be used as a way of defining default arguments for anENTRYPOINTcommand
or for executing an ad-hoc command in a container.CMDwill be overridden when running the container with alternative arguments.
The table below shows what command is executed for different ENTRYPOINT / CMD combinations:
| No ENTRYPOINT | ENTRYPOINT exec_entry p1_entry | ENTRYPOINT ["exec_entry", "p1_entry"] | |
|---|---|---|---|
| No CMD | error, not allowed | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry |
| CMD ["exec_cmd", "p1_cmd"] | exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry exec_cmd p1_cmd |
| CMD ["p1_cmd", "p2_cmd"] | p1_cmd p2_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry p1_cmd p2_cmd |
| CMD exec_cmd p1_cmd | /bin/sh -c exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd |
Note
If
CMDis defined from the base image, settingENTRYPOINTwill
resetCMDto an empty value. In this scenario,CMDmust be defined in the
current image to have a value.You can override the ENTRYPOINT setting using --entrypoint,
but this can only set the binary to exec (no sh -c will be used).
一个简单的案例
拷贝springboot文件到 容器并 指定spring配置文件运行
FROM java
ENV JARNAME="demo-0.0.1-SNAPSHOT.jar"
WORKDIR /root/app
RUN /bin/bash -c "echo 'aaaa' >> 1.txt"
EXPOSE 80
VOLUME ["/root/app"]
ENTRYPOINT ["java","-jar","demo-0.0.1-SNAPSHOT.jar", "-Dspring.config.location"]
# 注意此处的参数 覆盖时要制定容器内 或者容器能访问到的位置才行
CMD ["application.yml"]
#ENTRYPOINT ["echo","/root"]
#CMD ["/root/app"]
docker build -t springboot:0.01 .
docker run -v /dockerlearn/dockerfilelearn:/root/app -p 80:80 --network rediscluster_default --rm springboot:0.01
Note
- 如果
ENTRYPOINT ["exec_entry", "p1_entry"]后面还有
**CMD ["p1_cmd", "p2_cmd"]**那么CMD中的参数将全部追加到 ENTRYPOINT
当docker run后面跟参数时会覆盖掉CMD中的参数- CMD ENTRYPOINT 数组形式 都是exec模式,不支持解析本地变量
如果想解析 使用这个命令ENTRYPOINT ["sh","-c","java -jar $JARNAME"]- 如果使用了
ENTRYPOINT ["sh","-c",..]或者直接使用ENTRYPOINT "echo Hello world"
那么直接就无法覆盖参数了
参考文献
Docker Command and Dockerfile的更多相关文章
- Docker(二):Dockerfile 使用介绍
上一篇文章Docker(一):Docker入门教程介绍了 Docker 基本概念,其中镜像.容器和 Dockerfile .我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dock ...
- Docker系列07—Dockerfile 详解
本文收录在容器技术学习系列文章总目录 1.认识Dockerfile 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 基于容器制作镜像,已经在上篇Docker系列 ...
- [转]Docker(三):Dockerfile 命令详解
本文转自:https://blog.csdn.net/ityouknow/article/details/79600406 上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dock ...
- 这20个Docker Command,有几个是你会的?
在这之前呢,也写过两篇关于Docker基础入门类的文章 Docker容器技术入门(一) Docker容器技术入门(二) 很多人都感觉这文章这么简单.这么基础,可是别忘记了"万丈高楼平地起&q ...
- Docker(三):Dockerfile 命令详解
上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...
- Docker实战-编写Dockerfile
一.编译镜像 1. 编译镜像 Dockerfile类似于Makfile,用户使用docker build就可以编译镜像,使用该命令可以设置编译镜像时使用的CPU数量.内存大小.文件路径等 语法:doc ...
- Docker Python API 与 Docker Command
span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span. ...
- docker入门1: Dockerfile介绍
Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行 ...
- [转帖]Docker学习之Dockerfile命令详解
Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...
随机推荐
- Linux服务器下JVM堆栈信息dump及问题排查
#dump 方法栈信息 jstack $pid > /home/$pid/jstack.txt #dump jvm内存使用情况 jmap -heap $pid > /home/$pid/j ...
- 课程设计- 基于ssm的捐赠物资分配管理系统 && 基于java的申请救援管理系统
课程设计- 基于ssm的捐赠物资分配管理系统 && 基于java的申请救援管理系统 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架: ...
- iOS开发之蜂窝布局—Swift
前言 最近项目中用到了类似蜂窝的六边形布局,在这里分享出来抛砖引玉,供大家参考学习.本文提供了2种思路实现效果,第一种方式使用UICollectionView实现,第二种方式使用UIScrollVie ...
- 浅谈 SQL 注入(注入篇)
一.SQL注入简介 1.1 什么是SQL注入 在用户可控制的参数上过滤不严或没有任何限制,使得用户将传入的参数(如URL,表单,http header)与SQL语句合并构成一条 SQL语句传递给web ...
- DVWA-全等级文件包含
DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...
- Internet的接入与IP地址 概述
文章目录 一.计算机接入Internet 1.公用交换电话网(PSTN)接入 2.有线电视(CATV)接入 3.局域网接入 4.无线接入 二.IP地址 1.IP地址的格式 2.IP地址分类 3.子网掩 ...
- Azkaban入门(启动一个Simple Example)
Azkaban简介 azkaban是一个开源的任务调度系统 Azkaban是一套简单的任务调度服务,整体包括三部分webserver.dbserver.executorserver. 开发语言为Jav ...
- PostgreSQL隐藏字段
1)创建了一个表 apple=# \d test_time Table "public.test_time" Column | Type | Modifiers --------+ ...
- Servlet常见问题
时间:2016-12-6 23:18 java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMapcommo ...
- Spring Data JPA:解析CriteriaQuery
CriteriaQuery 源码定义 CriteriaQuery定义在包路径javax.persistence.criteria下,其定义如下: /** * The <code>Crite ...