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 load
与docker import
命令的区别,就必须了解镜像与容器的区别:
- 镜像:用来启动容器的只读模板,是容器启动所需的rootfs,类似于虚拟机所使用的镜像。
- 容器:Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
镜像是容器的基础,可以简单的理解为镜像是我们启动虚拟机时需要的镜像,容器时虚拟机成功启动后,运行的服务。
想要了解docker load
与docker import
命令的区别,还必须知道docker save
与docker 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命令来导入一个容器快照到本地镜像库。
两者的区别在于容器快照将会丢弃所有的历史记录和元数据信息,而镜像存储文件将保存完整记录,体积也会更大。此外从容器快照文件导入时,也可以重新指定标签等元数据。