docker 常见基本操作,Dockerfile编写介绍和部分错误
启动,停止,重启docer 服务
- 启动:
systemctl start docker
- 停止:
systemctl stop docker
- 重启:
systemctl restart docker
- 查看docker 启动日志
systemctl status docker
docker 镜像相关操作
- 查看镜像:
docker images
- 删除镜像:
docker rmi 镜像ID/镜像名称
第三方镜像的使用
搜索,下载,上传,修改仓库地址
- 在docker 仓库搜索第三方镜像
docker search 镜像名称
,例如搜索ubuntu镜像docker search ubuntu
,docker search nginx
- 从公共仓库拉去镜像
docker pull 镜像名称
,例如拉取docker pull ubuntu
,默认下注最新ubuntu镜像,如果需要加入版本号
例如:docker pull nginx:latest
- 上传镜像到仓库
docker pull image
- 加入自己镜像地址在
/etc/docker/key.json
中修改{ "registry-mirrors": ["https://iwpfe8zv.mirror.aliyuncs.com"] #加入自己的镜像地址 }
docker 容器常见操作
镜像
- 运行镜像
docker run ImageName/ID
2 运行镜像并且以bash进行交互docker run -t -i ubuntu /bin/bash
容器
- 启动容器:
docker start containerID/containerName
- 停止容器:
docker stop containerID/containerName
或者强杀docker kill containerID/containerName
- 重启容器:
docker restart containerID/containerName
- 查看正在运行容器:
docker ps
- 查看所有容器:
docker ps -a
容器高级
- 进入容器:
docker login containerID
- 查看容器进程:
docker top containerID
- 重命名容器
docker rename oldName NewNmae
- 查看正在运行容器的网络端口映射情况
docker port ContainerID
参数说明
- -d : 守护进程模式在后台运行
- -p : 容器内部端口绑定到指定的主机端口
- -P : 容器内部端口随机映射到主机的高端口
- -f : 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出
- -l : 查询最后一次创建的容器
- -t : 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
- -i : 则让容器的标准输入保持打开
- -m : 提交的描述信息
- -a : 指定镜像作者
- –rm: 停止容器后移除容器
查看日志
命令dokcer logs
root@VM-0-13-ubuntu:/home/ubuntu# docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--help Print usage
--since string Show logs since timestamp
--tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
dockerfile 编写和示例
dockerfile 简介
dockerfile 类似于一般的描述文件,dockerfile 支持#注释命令
#WORKDIR
ADD main /
RUN chmod +x main
EXPOSE 3000
ENTRYPOINT ["./main"]
功能是基于alpine镜像,添加main可执行文件到镜像中,暴露3000端口,设置容器开始运行时第一个命令。
编写docker dockerfile
基本命令简介
FROM:
这个设置基本的镜像,为后续的命令使用,所以应该作为Dockerfile的第一条指令。FROM <image>:<tag>
或者 FROM <image>
无论什么时候,尽可能使用BU提供的基础镜像,有利于技术规范化,简化你的Dockerfile。
MAINTAINER:
格式为 MAINTAINER ,指定维护者信息
RUN
在shell 终端运行命令,格式为 RUN 或者或 RUN [“executable”, “param1”, “param2”]
EXPOSE:
EXPOSE 指令指定容器监听的端口。因此,你应该使用通用、惯例的端口到你的应用。
例如,一个包含着Apacheweb服务端的镜像将使用80端口,当镜像包含是一个MangoDB应该使用EXPOSE 27017 等等。
CMD:
支持三种格式
CMD [“executable”,“param1”,“param2”] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD [“param1”,“param2”] 提供给 ENTRYPOINT 的默认参数;
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
ADD
格式为 ADD
该命令将复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。
COPY
格式为 COPY 。
复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 。
当使用本地目录为源目录时,推荐使用 COPY。
ENTRYPOINT
ENTRYPOINT 最佳使用场景是设置镜像的主入口命令,允许镜像好像命令运行一样(使用 CMD 作为默认的标志)。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
VOLUME
格式为 VOLUME ["/data"]。
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
USER
格式为 USER daemon。
指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。
当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。
WORKDIR
格式为 WORKDIR /path/to/workdir
为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。
可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
ONBUILD
格式为 ONBUILD [INSTRUCTION]。
配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
编译docker 镜像
docker build -f DockerFile .
这个编译没有指定标签名 加 -t tag
指定标签名
运行容器
根据容器ID 运行容器并且映射端口
docker run -p 3000:3000 5310e8cc7a3e
后台运行
docker run -d -p 3000:3000 5310e8cc7a3e
docker导出、导入
导出镜像:docker save 镜像 > my.tar
导入镜像:docker load < my.tar
export 带有当前容器的运行信息快照
docker export 3144ce77fc7c -o e.tar
docker import e.tar econtioner:latest
常见错误
Error response from daemon: conflict: unable to delete 129e213d49a8 (must be forced) - image is being used by stopped container 693d3554ca11
docker stop 693d3554ca11
docker rm 693d3554ca11
-
docker rmi 129e213d49a8
要是这个image正在被容器使用,需要先删除容器,才能删除镜像或者强制删除使用命令docker rmi -f imageID
ufw docker ubuntu 16.04
/etc/default/docker文件后面追加DOCKER_OPTS="--iptables=false"