Docker学习笔记

Docker

    • Docker
      • 查看容器日志
      • 查看容器内运行进程
      • 检查容器底层信息
      • 查看容器占用磁盘大小
      • 其他
    • Docker容器使用
      • 创建容器
      • 查看所有容器
      • 启动已停止运行的容器
      • 后台运行
      • 停止容器
      • 重启容器
      • 进入容器
      • 导出容器快照文件
      • 导入容器快照文件
      • 删除容器
      • 容器网络
    • Docker镜像使用
      • 列出本地镜像列表
      • 获取/载入 镜像
      • 查找镜像
      • 删除镜像
      • 创建镜像
      • 更新镜像
      • 构建镜像
      • 设置镜像标签
    • Dockerfile
      • FROM 基础镜像
      • MAINTANIER(已经废弃,使用LABEL更加灵活)
      • LABEL
      • WORKDIR
      • ENV
      • VOLUME
      • RUN
      • ADD
      • COPY
      • CMD
      • ENTRYPOINT
      • EXPOSE
      • USER
      • ARG

Docker

查看容器日志

docker logs -f 容器id/name

查看容器内运行进程

docker top 容器id/name

检查容器底层信息

docker inspect 容器id/name

它会返回一个json文件,包含docker容器的配置和状态信息

查看容器占用磁盘大小

docker system df

# 查看 每个 image、container 详细大小:
docker system df -v

其他

  • 查询最后一次创建的容器:docker ps -l

Docker容器使用

创建容器

docker run -v </本地绝对路径>:</容器内绝对路径> -it ubuntu /bin/bash
  • -i: 交互式操作
  • -t: 终端
  • ubuntu: ubuntu 镜像
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
  • -v /本地绝对路径:/容器内绝对路径:将目录挂在到容器中,方便数据共享,数据持久化,独立于容器的生存周期
  • -v /本地绝对路径:/容器内绝对路径:roro表示 readonly 只读权限。

查看所有容器

docker ps -a

启动已停止运行的容器

docker start 容器id/name

后台运行

docker run -itd -P --name 别名 镜像名 /bin/bash
  • -d: 后台运行,加上此参数,默认不会进入容器
  • --name: 容器名称, 可以不指定,默认是随机生成的

停止容器

docker stop 容器id/name

重启容器

docker restart 容器id/name

进入容器

容器在后台运行时,此刻想进入容器,可以使用如下命令:

  • attach,此命令exit退出时会停止容器
docker attach 容器id/name
  • exec, 此命令exit退出时不会停止容器
docker exec -it 容器id/name /bin/bashsh

导出容器快照文件

docker export 容器id/name > 导出路径/快照name.tar   

导入容器快照文件

  • 使用备份文件导入
docker import 快照name.tar 镜像name
  • 使用url或者某个目录导入
docker import http://example.com/exampleimage.tgz example/imagerepo

删除容器

删除容器时,容器必须是停止状态,否则会报错

docker rm -f 容器id/name

容器网络

  • -P: 启动容器后,自动创建端口映射,将容器内使用的端口随机映射到主机上
  • -p 5000:5000: 将容器内使用的5000端口映射到主机上的5000端口
  • 查看容器端口映射情况, docker port 容器id/name

Docker镜像使用

列出本地镜像列表

docker images
  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

同一仓库镜像可以有多个tag,代表不同的版本,使用REPOSITORY:TAG来定义不同的镜像

获取/载入 镜像

# 使用docker pull来获取ubuntu镜像
docker pull ubuntu

查找镜像

docker hub 网址为 https://hub.docker.com/

docker search httpd
  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star
  • AUTOMATED: 自动构建

删除镜像

docker rmi 镜像id/name

创建镜像

  • 从已经创建的容器中更新镜像,并且提交这个镜像 更新镜像
  • 使用Dockerfile指令来构建镜像 构建镜像

更新镜像

  • 首先使用镜像创建一个容器 创建容器
docker run -t -i ubuntu:15.10 /bin/bash
docker commit -m="has update" -a="update" 镜像id update/ubuntu:v2

构建镜像

docker build -t ubuntu:v2 .
  • -t ubuntu:v2: 指定创建的镜像名称
  • .: 指定当前目录,Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

设置镜像标签

docker tag 镜像ID update/ubuntu:v2

Dockerfile

FROM 基础镜像

为映像构建指定基础镜像,会先在docker主机上查找该基础镜像,如果不存在会从docker hub上查找拉取。

# FROM语法
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
# :指定作为base image的名称
# :base image的标签,为可选项,省略时默认为 latest;
# 为校验码
FROM <image> [AS <name>] 指定从一个镜像构建起一个新的镜像名字
FROM <image>[:<tag>] [AS <name>] 指定镜像的版本 Tag

MAINTANIER(已经废弃,使用LABEL更加灵活)

# MAINTANIER语法
MAINTAINER  <name> <email>

LABEL

如果 base image 中也有标签,则继承,如果是同名标签,则覆盖。 为了减少图层数量,尽量将标签写在一个 LABEL 指令中去

# LABEL语法
LABEL <key>=<value> <key>=<value> <key>=<value> ...

WORKDIR

为接下来的 Dockerfile 指令指定当前工作目录,RUN、CMD、COPY、ADD 的工作目录都会同步变更

# WORKDIR语法
WORKDIR <path>
WORKDIR /app/test

ENV

在构建的镜像中设置环境变量,在后续的 Dockerfile 指令中可以直接使用,也可以固化在镜像里,在容器运行时仍然有效

# ENV语法
# 如果中存在空格,需要转义或用引号"括起来
ENV <key>=<value> <key>=<value> <key>=<value> ...
# 如果 base image 中也有环境变量,则继承,如果是同名环境变量,则覆盖。 为了减少图层数量,尽量将环境变量写在一个 ENV 指令中去

也可以在容器运行时指定环境变量,替换镜像中的已有变量, docker run --env = 。 使用ENV可能会对后续的 Dockerfile 指令造成影响,如果只需要对一条指令设置环境变量,可以使用这种方式: RUN =

VOLUME

挂在目录到容器内,指定数据持久化的目录,官方语言叫做挂载

VOLUME ["宿主机绝对路径"]

Docker挂载主机目录后Docker访问出现cannot open directory .: Permission denied
解决办法: 在挂载目录后多追加一个 --privileged=true即可

RUN

# 构建镜像时要执行的命令

RUN <command>
RUN ["executable", "param1", "param2"]

ADD

# 将本地的文件添加复制到容器中去,压缩包会解压,可以访问网络上的文件,会自动下载

ADD ["",... ""]

COPY

功能和 ADD 一样,只是复制,不会解压或者下载文件

CMD

# 启动容器后执行的命令,和 RUN 不一样,RUN 是在构建镜像是要运行的命令
当使用 docker run 运行容器的时候,这个可以在命令行被覆盖
CMD ["executable", "param1", "param2"]

ENTRYPOINT

# 执行命令,和 CMD 一样,只是这个命令不会被命令行覆盖
ENTRYPOINT ["executable", "param1", "param2"]

EXPOSE

# 暴露对外的端口(容器内部程序的端口,虽然会和宿主机的一样,但是其实是两个端口)
EXPOSE <port>
EXPOSE 80
# 容器运行时,需要用 -p 映射外部端口才能访问到容器内的端口

USER

指定运行命令时所使用的用户

USER :[]
USER test

ARG

设置构建镜像是要传递的参数

ARG [=]
ARG name=demo

你可能感兴趣的:(docker,docker)