Docker 使用手册

环境配置

菜鸟教程地址:https://www.runoob.com/docker/docker-container-usage.html

docker 常用命令

  • 镜像运行容器
docker run -it --name=testUbuntu ubuntu  创建一个名字为testUbuntu的容器
options:
	--name="name"    为容器指定新name
	-d   后台运行容器,并返回容器ID,也即启动守护式容器
	-i   以交互模式运行容器,通常与-t同时使用
	-t   为容器重新分配一个伪输入终端,通常与-i同时使用
	-P   注意是大写,随机端口映射
	-p   小写,指定端口映射,有以下四种格式
	ip:hostPort:containerPort
    ip::containerPort
    hostPort:containerPort
    containerPort
	-v /宿主机目录:/容器目录
  • 查看日志: docker logs -f -t –tail 100 kibana7.7.1
  • 更新启动参数: docker update –restart=always xxx
  • 查看所有容器: docker ps -a
  • 查看启动容器: docker ps
  • 启动已停止的容器: docker start 容器id或名字
  • 关闭容器 : docker stop 容器id
  • 取消容器开机启动: docker update --restart=no 容器ID
  • 强制关闭: docker kill 容器id
  • 删除已停止容器 : docker rm 容器id
  • 删除没有停止容器: docker rm -f 容器id
  • 进入容器内部: docker exec -it 程序id /bin/bash
  • exit 关闭容器退出(自测不会退出): ctrl+p+q
  • 查看日志: docker logs -f (追加) -t (加入时间戳) --tail 3 (显示最后3行) 容器id
  • 查看容器结构细节: docker inspect 容器id
  • 拷贝容器中的文件: docker cp 容器id:文件路径 要拷贝到的路径
  • 导入镜像文件:export导出:docker import - {镜像名} < [镜像文件路径]; save导出:docker load < busybox.tar.gz
  • 提交自己的docker镜像: docker commit -a="lgd" -m="mysql-lgd" 243baa0ea2a7 ligoudan/lgd-mysql:1.0
  • **查看镜像的详细信息:**docker inspect [imageId]
  • history 命令查看镜像历史: docker history [imageId]
  • 查询全部运行中的容器ID: $(docker ps -aq)

Dockerfile指令说明:

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER wudl
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD myspringbootdocker.jar /myspringbootdocker.jar
# 运行jar包
RUN bash -c "touch /myspringbootdocker.jar"
ENTRYPOINT ["java","-jar","/myspringbootdocker.jar"]
#暴露8088作为微服务容器对外端口
EXPOSE 8088
  • FROM- 镜像从那里来
  • MAINTAINER- 镜像维护者信息
  • RUN- 构建镜像执行的命令,每一次RUN都会构建一层
  • CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数
  • VOLUME- 定义数据卷,如果没有定义则使用默认
  • USER- 指定后续执行的用户组和用户
  • WORKDIR- 切换当前执行的工作目录
  • HEALTHCHECH- 健康检测指令
  • ARG- 变量属性值,但不在容器内部起作用
  • EXPOSE- 暴露端口
  • ENV- 变量属性值,容器内部也会起作用
  • ADD- 添加文件,如果是压缩文件也解压
  • COPY- 添加文件,以复制的形式
  • ENTRYPOINT- 容器进入时执行的命令

问题

docker: Error response from daemon: No command specified

一般来说产生这个报错是因为启动的容器是被docker export出来的镜像,具体报错如下

[root@dockertest container]# docker run --name nginx-import-test -d -p 4000:80 nginx-import-test:1.0  
docker: Error response from daemon: No command specified.
See 'docker run --help'.

被docker export出来的镜像在启动的时候需要指定command,例如我启动上述nginx容器,需要指定Command

Command可以通过下面命令查询到:

docker ps -a --no-trunc

查询到Command之后,运行容器:

docker run --name nginx-import-test -d -p 4000:80 nginx-import-test:1.0  /docker-entrypoint.sh nginx -g 'daemon off;'

容器就正常启动了

原文链接:

docker import和docker load的区别?

首先,想要清楚的了解docker loaddocker import命令的区别,就必须了解镜像与容器的区别:

  • 镜像:用来启动容器的只读模板,是容器启动所需的rootfs,类似于虚拟机所使用的镜像。
  • 容器:Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

镜像是容器的基础,可以简单的理解为镜像是我们启动虚拟机时需要的镜像,容器时虚拟机成功启动后,运行的服务。

想要了解docker loaddocker import命令的区别,还必须知道docker savedocker export命令:

  • docker save images_name:将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
  • docker export container_id:将一个容器导出为文件,再使用docker import 命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。

docker import和docker load的区别

实际上,既可以使用docker load命令来导入镜像库存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库。

两者的区别在于容器快照将会丢弃所有的历史记录和元数据信息,而镜像存储文件将保存完整记录,体积也会更大。此外从容器快照文件导入时,也可以重新指定标签等元数据。