Docker笔记
镜像命令
查看本机所有镜像
1 | docker images |
搜索镜像
1 | docker search 镜像名 |
下载镜像
1 | docker pull 镜像名[:TAG] |
删除镜像
1 | docker rmi 镜像名 |
加载.tar镜像文件到本地docker仓库
1 | docker load -i 镜像文件名 |
容器命令
运行镜像,新建容器并启动
1 | docker run 镜像名 |
查看正在运行的容器
1 | docker ps |
停止|关闭|重启容器
1 | docker start 容器名或id -------开启容器 |
删除容器
1 | docker rm 容器名或id |
查看容器内服务日志
1 | docker logs 容器名或id |
查看容器内的进程
1 | docker top 容器名或id |
进入容器
1 | docker exec -it 容器名或id bash |
主机与容器进行文件传输
1 | docker cp 主机文件 容器名(或id):容器路径 -------将主机文件复制到容器内部 |
查看容器内部细节
1 | docker inspect 容器名或id |
将容器打包成镜像
1 | docker commit -m "描述信息" -a "作者" 容器名或id 镜像名:标签 |
将镜像保存成一个.tar文件
1 | docker save 镜像名称:标签 -o 文件名 |
数据卷操作
数据卷的作用:实现容器与宿主机之间的数据共享
特点:
- 对数据卷的修改会立即影响容器
- 对数据卷的修改不会影响镜像
- 容器被删除后,数据卷也会一直存在
数据卷命令
创建数据卷
1 | docker volume create 卷名 |
查看所有数据卷
1 | docker volume ls |
查看某个数据卷的细节
1 | docker volume inspect 卷名 |
删除数据卷
1 | docker volume prune ------自动删除所有未使用的数据卷 |
把数据卷挂载到容器中
自定义数据卷目录
1 | docker run 镜像名 |
自动数据卷目录
1 | docker run 镜像名 |
常用服务的安装
docker安装mysql
下载mysql镜像
1 | docker pull mysql |
创建并运行mysql镜像,并指定环境变量和数据卷
1 | docker run -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 --name mysql01 -v mysqldata:/var/lib/mysql -d mysql |
Dockerfile
保留字 | 作用 |
---|---|
FROM | 当前镜像是基于哪个镜像 第一个指令必须事FROM |
MAINTAINER(deprecated) | 镜像维护者的姓名和邮箱地址 |
RUN | 构建镜像时需要运行的指令 |
EXPOSE | 当前容器对外暴露出的端口号 |
WORKDIR | 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点 |
ENV | 用来在构建镜像的过程中设置环境变量 |
ADD | 将主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包 |
COPY | 类似于ADD,拷贝文件和目录到镜像中 将从结构上下文目录中<原路径>的文件/目录复制到新的一层的镜像的<目标路径>位置 |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器启动时要运行的命令 Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run命令行参数中指定的程序替换 |
ENTRYPOINT | 指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数 |
FROM
基于哪个镜像构建新的镜像,在构建时会自动从docker hub拉取base镜像
必须作为Dockerfile的第一个指令出现
语法
1
2FROM <image>
FROM <image>[:<tag>]
EXPOSE
用来指定构建的镜像在运行为容器时对外暴露的端口
语法
1
2
3EXPOSE <port>[/tcp|/udp]
EXPOSE 80/tcp 如果没有显示指定,则默认为tcp
EXPOSE 80/udp
WORKDIR
指定在创建容器后,终端默认登录进来的工作目录
为Dockerfile中的RUN、CMD、ENTRYPOINT、COPY、ADD指定工作目录
可以指定绝对路径,如果路径不存在则会创建目录
可以使用多个WORKDIR命令,如果指定相对路径则是在上一个WORKDIR后的相对路径
语法
1
2
3WORKDIR <dir>
WORKDIR /data 绝对路径/data
WORKDIR aa 相对路径,/data下的aa,即/data/aa
COPY
用来将context目录中的指定文件复制到镜像指定目录中
语法
1
2
3
4
5COPY <src> <dir>
COPY hom* /mydir/ 通配符
COPY hom?.text /mydir/ 通配符添加多个文件
COPY home.text relativeDir/ 可以指定相对路径
COPY home.text /absoluteDir/ 可以指定绝对路径
ADD
和COPY一样
不同之处在于如果要复制的对象是个.tar压缩包,则会自动解压。如果复制的对象是个URL,则会自动下载
语法
1
2
3ADD <src> <dir>
ADD url /dir
ADD test.tar /dir
VOLUME
用来定义容器运行时可以挂载到主机上的目录
语法
1
VOLUME /data
ENV
用来为镜像设置环境变量,这个值将出现在构建阶段中后续
引用的时候用$
语法
1
2ENV <key> <value>
ENV <key>=<value>...
RUN
RUN指令将在当前镜像之上的新层中执行并提交结果
在docker build时运行
生成的提交镜像将用于Dockerfile的下一步
语法
1
2
3RUN <command>
RUN ["<executeable>","<param1>","<param2>",...]
RUN ["/bin/bash","-c","<executeable>","<param1>","<param2>",...]
CMD
与RUN类似
在docker run时运行
CMD 指令的首要目的在于为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束;注意: CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
Dockerfile中只能有一条CMD指令,如果有多条,则只有最后一条生效
语法
1
2
3CMD <command>
RUN ["<executeable>","<param1>","<param2>",...]
CMD ["<param1>","<param2>",...] 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数;
ENTRYPOINT
与CMD类似
在docker run时运行
不会被docker run的命令行参数指定的指令覆盖
语法
1
2ENTRYPOINT <command>
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]